@fest-lib/uniform 0.1.20 → 0.1.22

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 (2) hide show
  1. package/dist/uniform.js +235 -242
  2. package/package.json +1 -1
package/dist/uniform.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Promised as rn, UUIDv4 as h, deepOperateAndClone as he, isCanJustReturn as Me, isCanTransfer as Ie, isNotComplexArray as ot, isPrimitive as Ae } from "@fest-lib/core";
2
- var Qs = /* @__PURE__ */ (function(e) {
2
+ var Gs = /* @__PURE__ */ (function(e) {
3
3
  return e.SUCCESS = "success", e.ERROR = "error", e;
4
- })({}), Vs = /* @__PURE__ */ (function(e) {
4
+ })({}), Qs = /* @__PURE__ */ (function(e) {
5
5
  return e.PRIMITIVE = "primitive", e.NUMBER = "number", e.STRING = "string", e.BOOLEAN = "boolean", e.BIGINT = "bigint", e.UNDEFINED = "undefined", e.NULL = "null", e.OBJECT = "object", e.FUNCTION = "function", e.ARRAY = "array", e.MAP = "map", e.SET = "set", e.SYMBOL = "symbol", e.WEAK_REF = "weakRef", e.PROMISE = "promise", e.UNKNOWN = "unknown", e;
6
6
  })({}), d = /* @__PURE__ */ (function(e) {
7
7
  return e.GET = "get", e.SET = "set", e.CALL = "call", e.APPLY = "apply", e.CONSTRUCT = "construct", e.DELETE = "delete", e.DELETE_PROPERTY = "deleteProperty", e.HAS = "has", e.OWN_KEYS = "ownKeys", e.GET_OWN_PROPERTY_DESCRIPTOR = "getOwnPropertyDescriptor", e.GET_PROPERTY_DESCRIPTOR = "getPropertyDescriptor", e.GET_PROTOTYPE_OF = "getPrototypeOf", e.SET_PROTOTYPE_OF = "setPrototypeOf", e.IS_EXTENSIBLE = "isExtensible", e.PREVENT_EXTENSIONS = "preventExtensions", e.TRANSFER = "transfer", e.IMPORT = "import", e.DISPOSE = "dispose", e;
@@ -330,7 +330,7 @@ function ht(e) {
330
330
  close: () => t.close()
331
331
  };
332
332
  }
333
- var Ks = {
333
+ var Vs = {
334
334
  createSender: g,
335
335
  createListener: m,
336
336
  detectType: Z,
@@ -430,7 +430,7 @@ var Ks = {
430
430
  get subscriberCount() {
431
431
  return this._subs.size;
432
432
  }
433
- }, Ys = class extends _ {
433
+ }, Ks = class extends _ {
434
434
  constructor(e = 1) {
435
435
  super({
436
436
  bufferSize: e,
@@ -522,7 +522,7 @@ function hn(e) {
522
522
  r && n(r.response, r.transfer), s.next(t);
523
523
  };
524
524
  }
525
- var Js = class extends _ {
525
+ var Ys = class extends _ {
526
526
  constructor(e, t) {
527
527
  super(), e.subscribe({
528
528
  next: (n) => {
@@ -539,14 +539,14 @@ var Js = class extends _ {
539
539
  complete: () => n.complete()
540
540
  });
541
541
  return () => s.unsubscribe();
542
- }), Xs = (e) => (t) => new v((n) => {
542
+ }), Js = (e) => (t) => new v((n) => {
543
543
  const s = t.subscribe({
544
544
  next: (r) => n.next(e(r)),
545
545
  error: (r) => n.error(r),
546
546
  complete: () => n.complete()
547
547
  });
548
548
  return () => s.unsubscribe();
549
- }), Zs = (e) => (t) => new v((n) => {
549
+ }), Xs = (e) => (t) => new v((n) => {
550
550
  let s = 0;
551
551
  const r = t.subscribe({
552
552
  next: (i) => {
@@ -556,7 +556,7 @@ var Js = class extends _ {
556
556
  complete: () => n.complete()
557
557
  });
558
558
  return () => r.unsubscribe();
559
- }), er = (e) => (t) => new v((n) => {
559
+ }), Zs = (e) => (t) => new v((n) => {
560
560
  const s = t.subscribe({
561
561
  next: (i) => n.next(i),
562
562
  error: (i) => n.error(i),
@@ -565,7 +565,7 @@ var Js = class extends _ {
565
565
  return () => {
566
566
  s.unsubscribe(), r.unsubscribe();
567
567
  };
568
- }), tr = (e) => (t) => new v((n) => {
568
+ }), er = (e) => (t) => new v((n) => {
569
569
  let s;
570
570
  const r = t.subscribe({
571
571
  next: (i) => {
@@ -577,7 +577,7 @@ var Js = class extends _ {
577
577
  return () => {
578
578
  clearTimeout(s), r.unsubscribe();
579
579
  };
580
- }), nr = (e) => (t) => new v((n) => {
580
+ }), tr = (e) => (t) => new v((n) => {
581
581
  let s = 0;
582
582
  const r = t.subscribe({
583
583
  next: (i) => {
@@ -610,12 +610,12 @@ var Js = class extends _ {
610
610
  error: (r) => t.error(r)
611
611
  }));
612
612
  return () => n.forEach((s) => s.unsubscribe());
613
- }), sr = () => h(), M = (e, t) => (n) => {
613
+ }), nr = () => h(), M = (e, t) => (n) => {
614
614
  const s = g(e), r = (i, o) => s(i, o);
615
615
  return m(e, (i) => {
616
616
  n.active && (t ? t(i, r, n) : n.next(i));
617
617
  }, (i) => n.error(i), () => n.complete());
618
- }, rr = (e, t) => M(e, t), ir = (e, t) => M(e, t), or = (e, t) => M(new BroadcastChannel(e), t), ar = (e, t, n) => M(new WebSocket(typeof e == "string" ? e : e.href, t), n), cr = (e) => M("chrome-runtime", e), lr = (e) => M("service-worker-client", e), hr = (e) => M("service-worker-host", e), ur = (e) => M("self", e);
618
+ }, sr = (e, t) => M(e, t), rr = (e, t) => M(e, t), ir = (e, t) => M(new BroadcastChannel(e), t), or = (e, t, n) => M(new WebSocket(typeof e == "string" ? e : e.href, t), n), ar = (e) => M("chrome-runtime", e), cr = (e) => M("service-worker-client", e), lr = (e) => M("service-worker-host", e), hr = (e) => M("self", e);
619
619
  function mn(e, t, n) {
620
620
  const s = g(e), r = new v((i) => M(e, n)(i));
621
621
  return {
@@ -631,7 +631,7 @@ function gn(e, t) {
631
631
  return e.addEventListener(t, s), () => e.removeEventListener(t, s);
632
632
  });
633
633
  }
634
- var dr = {
634
+ var ur = {
635
635
  channel: (e, t) => new ln(e, t),
636
636
  invoker: (e, t, n) => Ve(e, t, n),
637
637
  handler: (e, t) => Ve(e, t, hn(t)),
@@ -780,7 +780,7 @@ var yn = {
780
780
  this.requestor.close(), this.responder.close();
781
781
  }
782
782
  };
783
- function fr(e, t) {
783
+ function dr(e, t) {
784
784
  return new dt({
785
785
  channel: e,
786
786
  ...t
@@ -798,10 +798,10 @@ function qe(e, t) {
798
798
  ...t
799
799
  });
800
800
  }
801
- function pr(e, t, n) {
801
+ function fr(e, t, n) {
802
802
  return qe(e, n).connect(t);
803
803
  }
804
- function _r(e, t) {
804
+ function pr(e, t) {
805
805
  const n = qe(e, {
806
806
  autoDetect: !0,
807
807
  ...t
@@ -895,7 +895,7 @@ var pt = /* @__PURE__ */ Symbol.for("uniform.proxy"), _t = /* @__PURE__ */ Symbo
895
895
  primitive: !1
896
896
  };
897
897
  }
898
- }, mr = class {
898
+ }, _r = class {
899
899
  _dispatch;
900
900
  constructor(e) {
901
901
  this._dispatch = e;
@@ -960,10 +960,10 @@ function gt(e) {
960
960
  return !1;
961
961
  }
962
962
  }
963
- function gr(e) {
963
+ function mr(e) {
964
964
  return gt(e) ? e.$descriptor ?? null : null;
965
965
  }
966
- function br(e) {
966
+ function gr(e) {
967
967
  if (!gt(e)) return null;
968
968
  try {
969
969
  const t = Reflect.get(e, _t);
@@ -1015,7 +1015,7 @@ var Sn = class {
1015
1015
  return ee(this._invoker, this._config);
1016
1016
  }
1017
1017
  };
1018
- function yr() {
1018
+ function br() {
1019
1019
  return new Sn();
1020
1020
  }
1021
1021
  var En = mt;
@@ -1644,13 +1644,13 @@ var bt = class {
1644
1644
  function S(e) {
1645
1645
  return new yt(e);
1646
1646
  }
1647
- function wr(e, t, n) {
1647
+ function yr(e, t, n) {
1648
1648
  return S({
1649
1649
  name: e,
1650
1650
  ...n
1651
1651
  }).attach(t, n);
1652
1652
  }
1653
- function vr(e, t, n) {
1653
+ function wr(e, t, n) {
1654
1654
  const s = new MessageChannel();
1655
1655
  return s.port1.start(), s.port2.start(), {
1656
1656
  channel1: S({
@@ -1667,16 +1667,16 @@ function vr(e, t, n) {
1667
1667
  };
1668
1668
  }
1669
1669
  var U = /* @__PURE__ */ new Map();
1670
- function Cr(e, t) {
1670
+ function vr(e, t) {
1671
1671
  return U.has(e) || U.set(e, S({
1672
1672
  name: e,
1673
1673
  ...t
1674
1674
  })), U.get(e);
1675
1675
  }
1676
- function xr() {
1676
+ function Cr() {
1677
1677
  return [...U.keys()];
1678
1678
  }
1679
- function kr(e) {
1679
+ function xr(e) {
1680
1680
  const t = U.get(e);
1681
1681
  return t ? (t.close(), U.delete(e)) : !1;
1682
1682
  }
@@ -1698,14 +1698,14 @@ function te() {
1698
1698
  }
1699
1699
  return re;
1700
1700
  }
1701
- function Sr(e, t) {
1701
+ function kr(e, t) {
1702
1702
  te().expose(e, t);
1703
1703
  }
1704
- function Er(e, t) {
1704
+ function Sr(e, t) {
1705
1705
  return te().remote(e, t);
1706
1706
  }
1707
- var wt = (e, t = null) => te().proxy(e), Ir = (e, t, n = {}) => wt(t, null), Tr = (e, t, n = {}) => te().wrapDescriptor(e, e?.channel ?? n?.connectChannel);
1708
- function Pr(e, t) {
1707
+ var wt = (e, t = null) => te().proxy(e), Er = (e, t, n = {}) => wt(t, null), Ir = (e, t, n = {}) => te().wrapDescriptor(e, e?.channel ?? n?.connectChannel);
1708
+ function Tr(e, t) {
1709
1709
  const n = S({
1710
1710
  name: t,
1711
1711
  autoListen: !1
@@ -1728,7 +1728,7 @@ var C = {
1728
1728
  a: "array",
1729
1729
  ta: "typedarray",
1730
1730
  udf: "undefined"
1731
- }, Mr = [
1731
+ }, Pr = [
1732
1732
  typeof ArrayBuffer != C.udf ? ArrayBuffer : null,
1733
1733
  typeof MessagePort != C.udf ? MessagePort : null,
1734
1734
  typeof ReadableStream != C.udf ? ReadableStream : null,
@@ -1791,7 +1791,7 @@ function P(e) {
1791
1791
  var ye = /* @__PURE__ */ new Map(), w = {
1792
1792
  name: "unknown",
1793
1793
  instance: null
1794
- }, we = /* @__PURE__ */ new Map(), xt = (e) => [...Object.values(d)].includes(e), Ar = (e) => {
1794
+ }, we = /* @__PURE__ */ new Map(), xt = (e) => [...Object.values(d)].includes(e), Mr = (e) => {
1795
1795
  if (e instanceof Worker) return e;
1796
1796
  if (e instanceof URL) return new Worker(e.href, { type: "module" });
1797
1797
  if (typeof e == "function") try {
@@ -1851,7 +1851,7 @@ var ye = /* @__PURE__ */ new Map(), w = {
1851
1851
  }, St = (e = "$host$") => Oe(e), G = (e, t = {}, n = typeof self < "u" ? self : null) => {
1852
1852
  const s = St(e ?? "$host$");
1853
1853
  return s?.createRemoteChannel?.(e, t, n) ?? s;
1854
- }, Rr = (e, t = {}, n) => {
1854
+ }, Ar = (e, t = {}, n) => {
1855
1855
  if (e == null || n) return;
1856
1856
  if (ye.has(e)) return ye.get(e);
1857
1857
  const s = {
@@ -1860,7 +1860,7 @@ var ye = /* @__PURE__ */ new Map(), w = {
1860
1860
  remote: Promise.resolve(new kt(e, t))
1861
1861
  };
1862
1862
  return ye.set(e, s), s;
1863
- }, ue = /* @__PURE__ */ new WeakMap(), de = /* @__PURE__ */ new WeakMap(), Ye = /* @__PURE__ */ new WeakMap(), qr = (e, t) => ue.get(e)?.[t], Rn = (e, t = w?.name, n) => typeof e == "object" && e != null || typeof e == "function" && e != null ? de.has(e) ? de.get(e) : ue.has(e) ? ue.get(e) : ot(e) || n?.includes?.(e) || t == w?.name ? e : {
1863
+ }, ue = /* @__PURE__ */ new WeakMap(), de = /* @__PURE__ */ new WeakMap(), Ye = /* @__PURE__ */ new WeakMap(), Rr = (e, t) => ue.get(e)?.[t], Rn = (e, t = w?.name, n) => typeof e == "object" && e != null || typeof e == "function" && e != null ? de.has(e) ? de.get(e) : ue.has(e) ? ue.get(e) : ot(e) || n?.includes?.(e) || t == w?.name ? e : {
1864
1864
  $isDescriptor: !0,
1865
1865
  path: D.get(e) ?? (() => {
1866
1866
  const s = [h()];
@@ -2290,7 +2290,7 @@ var Bn = class {
2290
2290
  get names() {
2291
2291
  return [...this._connections.keys()];
2292
2292
  }
2293
- }, Le = () => Wn.getInstance(), At = (e, t, n) => Le().getOrCreate(e, t, n), Nr = (e = "$host$", t) => At(e, "internal", {
2293
+ }, Le = () => Wn.getInstance(), At = (e, t, n) => Le().getOrCreate(e, t, n), qr = (e = "$host$", t) => At(e, "internal", {
2294
2294
  ...t,
2295
2295
  metadata: {
2296
2296
  ...t?.metadata,
@@ -2687,7 +2687,7 @@ var Bn = class {
2687
2687
  detach() {
2688
2688
  this._cleanup?.(), super.detach();
2689
2689
  }
2690
- }, Or = {
2690
+ }, Nr = {
2691
2691
  worker: (e, t, n) => new $n(e, t, n),
2692
2692
  messagePort: (e, t, n) => new Fn(e, t, n),
2693
2693
  broadcast: (e, t, n) => new Un(e, t, n),
@@ -2699,7 +2699,7 @@ var Bn = class {
2699
2699
  serviceWorker: (e, t, n) => new Vn(e, t, n),
2700
2700
  self: (e, t) => new Kn(e, t)
2701
2701
  };
2702
- function Dr(e) {
2702
+ function Or(e) {
2703
2703
  const t = [], n = new _({ bufferSize: 100 });
2704
2704
  for (const s of e) s.subscribeIncoming((r) => {
2705
2705
  t.push(r), n.next(r);
@@ -3124,7 +3124,7 @@ var Yn = "uniform_channels", Jn = 1, f = {
3124
3124
  function Rt(e) {
3125
3125
  return J.has(e) || J.set(e, new Xn(e)), J.get(e);
3126
3126
  }
3127
- function Lr() {
3127
+ function Dr() {
3128
3128
  for (const e of J.values()) e.close();
3129
3129
  J.clear();
3130
3130
  }
@@ -3645,14 +3645,14 @@ function ns(e, t = {}) {
3645
3645
  name: e
3646
3646
  });
3647
3647
  }
3648
- function Br(e) {
3648
+ function Lr(e) {
3649
3649
  return q.get(e);
3650
3650
  }
3651
- function Wr(e) {
3651
+ function Br(e) {
3652
3652
  const t = q.get(e);
3653
3653
  return t ? (t.close(), q.delete(e)) : !1;
3654
3654
  }
3655
- function $r() {
3655
+ function Wr() {
3656
3656
  return [...q.keys()];
3657
3657
  }
3658
3658
  function ss(e, t = {}) {
@@ -3672,28 +3672,28 @@ async function rs(e, t, n = {}) {
3672
3672
  })
3673
3673
  };
3674
3674
  }
3675
- async function Fr(e, t, n = {}) {
3675
+ async function $r(e, t, n = {}) {
3676
3676
  return N().addWorker(e, t, n);
3677
3677
  }
3678
- async function Ur(e, t, n = {}) {
3678
+ async function Fr(e, t, n = {}) {
3679
3679
  return N().addPort(e, t, n);
3680
3680
  }
3681
- async function jr(e, t, n = {}) {
3681
+ async function Ur(e, t, n = {}) {
3682
3682
  return N().addBroadcast(e, t, n);
3683
3683
  }
3684
- function zr(e, t = {}) {
3684
+ function jr(e, t = {}) {
3685
3685
  return N().addSelfChannel(e, t);
3686
3686
  }
3687
- function Hr(e, t) {
3687
+ function zr(e, t) {
3688
3688
  N().defer(e, t);
3689
3689
  }
3690
- async function Gr(e) {
3690
+ async function Hr(e) {
3691
3691
  return N().initDeferred(e);
3692
3692
  }
3693
- async function Qr(e) {
3693
+ async function Gr(e) {
3694
3694
  return N().getChannelAsync(e);
3695
3695
  }
3696
- function Vr(e, t, n = {}) {
3696
+ function Qr(e, t, n = {}) {
3697
3697
  return N().createChannelPair(e, t, n);
3698
3698
  }
3699
3699
  var I = class {
@@ -3891,7 +3891,7 @@ var I = class {
3891
3891
  _activate() {
3892
3892
  this._listening || (this._cleanup = m("self", (e) => this._dispatch(e)), this._listening = !0);
3893
3893
  }
3894
- }, Kr = {
3894
+ }, Vr = {
3895
3895
  worker: (e) => new Ze(e),
3896
3896
  workerFromUrl: (e, t) => new Ze(new Worker(typeof e == "string" ? e : e.href, {
3897
3897
  type: "module",
@@ -3914,7 +3914,7 @@ var I = class {
3914
3914
  serviceWorkerHost: () => new us(),
3915
3915
  self: () => new ds()
3916
3916
  };
3917
- function Yr(e, t) {
3917
+ function Kr(e, t) {
3918
3918
  return {
3919
3919
  send: (n, s) => e.next(n, s),
3920
3920
  subscribe: (n) => t.subscribe({ next: n }),
@@ -4116,13 +4116,13 @@ var Bt = class {
4116
4116
  function Be(e) {
4117
4117
  return j || (j = new Bt(e)), j;
4118
4118
  }
4119
- function Jr(e) {
4119
+ function Yr(e) {
4120
4120
  return j?.close(), j = new Bt(e), j;
4121
4121
  }
4122
- function Xr(e) {
4122
+ function Jr(e) {
4123
4123
  return Be().subscribeConnections(e);
4124
4124
  }
4125
- function Zr(e) {
4125
+ function Xr(e) {
4126
4126
  return Be().subscribeChannelCreated(e);
4127
4127
  }
4128
4128
  var ae = null, ce = null;
@@ -4132,19 +4132,19 @@ function Wt(e) {
4132
4132
  function $t(e) {
4133
4133
  return ce || (ce = qe(e ?? "worker"), ce.connect(self)), ce;
4134
4134
  }
4135
- function ei(e, t) {
4135
+ function Zr(e, t) {
4136
4136
  Wt().expose(e, t);
4137
4137
  }
4138
- function ti(e) {
4138
+ function ei(e) {
4139
4139
  return Wt().subscribeInvocations(e);
4140
4140
  }
4141
- function ni(e = "host", t = []) {
4141
+ function ti(e = "host", t = []) {
4142
4142
  return $t().createProxy(e, t);
4143
4143
  }
4144
- function si(e, t = "host") {
4144
+ function ni(e, t = "host") {
4145
4145
  return $t().importModule(t, e);
4146
4146
  }
4147
- var ri = Be({ name: "worker" }), pe = class {
4147
+ var si = Be({ name: "worker" }), pe = class {
4148
4148
  _subs = /* @__PURE__ */ new Set();
4149
4149
  _listening = !1;
4150
4150
  _cleanup = null;
@@ -4320,7 +4320,7 @@ var ri = Be({ name: "worker" }), pe = class {
4320
4320
  chrome.runtime.onMessageExternal.addListener(e), this._cleanup = () => chrome.runtime.onMessageExternal.removeListener(e), this._listening = !0;
4321
4321
  }
4322
4322
  };
4323
- function ii(e, t) {
4323
+ function ri(e, t) {
4324
4324
  return async (n, s, r) => {
4325
4325
  if (n.type !== "request") {
4326
4326
  r.next(n);
@@ -4352,7 +4352,7 @@ function ii(e, t) {
4352
4352
  else r.next(n);
4353
4353
  };
4354
4354
  }
4355
- var oi = {
4355
+ var ii = {
4356
4356
  runtime: (e, t) => new We(e, t),
4357
4357
  tabs: (e, t) => new $e(e, t),
4358
4358
  port: (e, t) => new Fe(e, t),
@@ -4493,7 +4493,7 @@ var oi = {
4493
4493
  return this._roomName;
4494
4494
  }
4495
4495
  };
4496
- function ai(e, t) {
4496
+ function oi(e, t) {
4497
4497
  return async (n) => {
4498
4498
  if (n.type !== "request" || !n.ack) return;
4499
4499
  const s = n.payload?.action;
@@ -4521,11 +4521,11 @@ function ai(e, t) {
4521
4521
  }
4522
4522
  };
4523
4523
  }
4524
- var ci = {
4524
+ var ai = {
4525
4525
  create: (e, t, n) => new _e(e, t, n),
4526
4526
  room: (e, t) => new fs(e, t)
4527
4527
  };
4528
- function li(e, t, n) {
4528
+ function ci(e, t, n) {
4529
4529
  return new _e(e, t, n);
4530
4530
  }
4531
4531
  var me = class {
@@ -4779,13 +4779,13 @@ var me = class {
4779
4779
  return this._channelName;
4780
4780
  }
4781
4781
  };
4782
- function hi(e, t, n) {
4782
+ function li(e, t, n) {
4783
4783
  return new me(e, t, n);
4784
4784
  }
4785
- function ui(e) {
4785
+ function hi(e) {
4786
4786
  return new Ue(e);
4787
4787
  }
4788
- var di = {
4788
+ var ui = {
4789
4789
  client: (e, t, n) => new me(e, t, n),
4790
4790
  host: (e) => new Ue(e)
4791
4791
  }, V = null;
@@ -4983,7 +4983,7 @@ function zt(e, t = {}) {
4983
4983
  }
4984
4984
  };
4985
4985
  }
4986
- function fi(e, t, n, s = {}) {
4986
+ function di(e, t, n, s = {}) {
4987
4987
  return new se(e, t, n, s);
4988
4988
  }
4989
4989
  var Ht = class b {
@@ -5041,7 +5041,7 @@ var Ht = class b {
5041
5041
  get overflow() {
5042
5042
  return Atomics.load(this._meta, b.OVERFLOW);
5043
5043
  }
5044
- }, pi = {
5044
+ }, fi = {
5045
5045
  create: (e, t, n, s) => new se(e, t, n, s),
5046
5046
  createPair: (e, t) => zt(e, t),
5047
5047
  createBuffer: (e, t) => new F(e, t),
@@ -5357,7 +5357,7 @@ function Gt(e) {
5357
5357
  }
5358
5358
  };
5359
5359
  }
5360
- var _i = {
5360
+ var pi = {
5361
5361
  createPeer: (e, t) => new ge(e, t),
5362
5362
  createManager: (e, t) => new je(e, t),
5363
5363
  createSignaling: (e) => Gt(e)
@@ -5488,7 +5488,7 @@ function be(e, t) {
5488
5488
  transfer: () => n.port2
5489
5489
  };
5490
5490
  }
5491
- function mi(e, t, n) {
5491
+ function _i(e, t, n) {
5492
5492
  return new B(e, t, n);
5493
5493
  }
5494
5494
  var Qt = class {
@@ -5643,7 +5643,7 @@ function vs(e, t) {
5643
5643
  });
5644
5644
  } });
5645
5645
  }
5646
- var gi = {
5646
+ var mi = {
5647
5647
  create: (e, t, n) => new B(e, t, n),
5648
5648
  createPair: (e, t) => be(e, t),
5649
5649
  createPool: (e) => new Qt(e),
@@ -5928,7 +5928,7 @@ var gi = {
5928
5928
  async getPendingCount(e) {
5929
5929
  return (await this.query({ filter: (t) => t.data.channel === e && t.data.status === "pending" })).length;
5930
5930
  }
5931
- }, bi = {
5931
+ }, gi = {
5932
5932
  create: (e) => new ze(e),
5933
5933
  createMessageQueue: (e) => new Vt(e)
5934
5934
  }, He = class {
@@ -6266,10 +6266,10 @@ var gi = {
6266
6266
  });
6267
6267
  };
6268
6268
  };
6269
- function yi(e) {
6269
+ function bi(e) {
6270
6270
  return new He(e);
6271
6271
  }
6272
- function wi(e) {
6272
+ function yi(e) {
6273
6273
  return new Ge(e);
6274
6274
  }
6275
6275
  function Cs(e, t = self) {
@@ -6633,7 +6633,7 @@ var ks = class {
6633
6633
  function Ss() {
6634
6634
  return Se || (Se = new ks()), Se;
6635
6635
  }
6636
- var vi = {
6636
+ var wi = {
6637
6637
  create: $,
6638
6638
  registry: Ss,
6639
6639
  fromWorker: (e, t, n) => $(t, { worker: { existing: e } }, n),
@@ -6741,7 +6741,7 @@ var vi = {
6741
6741
  if (e.length === 0) throw new Error("No active tab found");
6742
6742
  if (!e[0].id) throw new Error("Active tab has no ID");
6743
6743
  return e[0].id;
6744
- }, Ci = async () => {
6744
+ }, vi = async () => {
6745
6745
  try {
6746
6746
  return await Is();
6747
6747
  } catch {
@@ -6749,7 +6749,7 @@ var vi = {
6749
6749
  if (!e?.id) throw new Error("No visible tab found");
6750
6750
  return e.id;
6751
6751
  }
6752
- }, xi = (e, t = "worker") => {
6752
+ }, Ci = (e, t = "worker") => {
6753
6753
  const n = Oe(t ?? "worker");
6754
6754
  return Object.keys(e).forEach((s) => {
6755
6755
  e[s];
@@ -7054,7 +7054,7 @@ function Ts(e) {
7054
7054
  const t = e?.dbName ?? "default";
7055
7055
  return Ee.has(t) || Ee.set(t, new Yt(e)), Ee.get(t);
7056
7056
  }
7057
- function ki(e) {
7057
+ function xi(e) {
7058
7058
  return new Yt(e);
7059
7059
  }
7060
7060
  var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
@@ -7209,7 +7209,7 @@ var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
7209
7209
  for (const e of this.wrappedListeners) T.get(this.channelName)?.delete(e);
7210
7210
  this.wrappedListeners.clear(), this.wrappedByOriginal.clear();
7211
7211
  }
7212
- }, Si = class {
7212
+ }, ki = class {
7213
7213
  port;
7214
7214
  channelName;
7215
7215
  listeners = /* @__PURE__ */ new Set();
@@ -7244,7 +7244,7 @@ var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
7244
7244
  close() {
7245
7245
  this.listeners.clear(), this.port?.disconnect?.();
7246
7246
  }
7247
- }, Ei = async (e) => {
7247
+ }, Si = async (e) => {
7248
7248
  let t;
7249
7249
  try {
7250
7250
  if (typeof e.script != "string") throw new Error("Chrome extension worker channel requires config.script to be a string path");
@@ -7254,13 +7254,13 @@ var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
7254
7254
  }
7255
7255
  const n = await G(e.name, {}, t);
7256
7256
  return n?.remote ?? n;
7257
- }, Ii = (e) => new Zt(e), Ti = (e) => {
7257
+ }, Ei = (e) => new Zt(e), Ii = (e) => {
7258
7258
  const t = new Zt(e), n = G(e, {}, t);
7259
7259
  return n?.remote ?? n;
7260
7260
  }, Ms = (e, t) => {
7261
7261
  const n = new Ps(e, t), s = G(e, {}, n);
7262
7262
  return s?.remote ?? s;
7263
- }, Pi = (e, t) => Ms(e, t), Mi = (e = "$host$") => Oe(e ?? "$host$"), Ai = (e, t) => new Es(e, t), As = async (e) => ({
7263
+ }, Ti = (e, t) => Ms(e, t), Pi = (e = "$host$") => Oe(e ?? "$host$"), Mi = (e, t) => new Es(e, t), As = async (e) => ({
7264
7264
  async request(t, n = []) {
7265
7265
  return new Promise((s, r) => {
7266
7266
  const i = new BroadcastChannel(`${e.name}-sw-channel`), o = h(), a = setTimeout(() => {
@@ -7292,7 +7292,7 @@ var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
7292
7292
  }
7293
7293
  else n = new Worker(P(e.script), e.options);
7294
7294
  return await G(e.name, {}, n);
7295
- }, Ri = async (e, t) => {
7295
+ }, Ai = async (e, t) => {
7296
7296
  const n = await en(e);
7297
7297
  return new Kt(n, t);
7298
7298
  }, Rs = (e, t, n) => {
@@ -7308,54 +7308,47 @@ var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
7308
7308
  "attach",
7309
7309
  "deliver",
7310
7310
  "defer"
7311
- ]), Ns = /* @__PURE__ */ new Set([
7312
- "request",
7313
- "response",
7314
- "invoke",
7315
- "ack",
7316
- "act",
7317
- "ask"
7318
- ]), rt = "mail", k = (e) => String(e ?? "").trim(), Os = (e) => {
7311
+ ]), rt = "mail", k = (e) => String(e ?? "").trim(), Ns = (e) => {
7319
7312
  if (!e) return;
7320
7313
  const t = (Array.isArray(e) ? e : [e]).map(k).filter(Boolean);
7321
7314
  return t.length > 0 ? t : void 0;
7322
- }, Ds = (e) => {
7315
+ }, Os = (e) => {
7323
7316
  if (e != null)
7324
7317
  return Array.isArray(e) ? e : [e];
7325
- }, Ls = (e) => {
7318
+ }, Ds = (e) => {
7326
7319
  if (e != null)
7327
7320
  return Array.isArray(e) ? e : [e];
7328
- }, Bs = (e) => {
7321
+ }, Ls = (e) => {
7329
7322
  const t = Array.isArray(e) ? e : e ? [e] : [rt], n = [];
7330
7323
  for (const s of t) qs.has(s) && !n.includes(s) && n.push(s);
7331
7324
  return n.length > 0 ? n : [rt];
7332
- }, Ws = (e) => {
7325
+ }, Bs = (e) => {
7333
7326
  const t = k(e.type);
7334
- if (Ns.has(t)) return t;
7327
+ if (t) return t;
7335
7328
  const n = k(e.op);
7336
7329
  return n === "get" || n === "set" || n === "apply" || n === "import" ? "invoke" : e.error ? "response" : "request";
7337
- }, $s = (e, t) => e.op ? e.op : t === "invoke" ? "invoke" : t === "act" ? "deliver" : "mail", Fs = (e) => {
7330
+ }, Ws = (e, t) => e.op ? e.op : t === "invoke" ? "invoke" : t === "act" ? "deliver" : "mail", $s = (e) => {
7338
7331
  const t = k(e).toLowerCase();
7339
7332
  return t || "unknown";
7340
- }, Us = () => typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : `uniform_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`, Pe = (e) => {
7341
- const t = Number.isFinite(e.timestamp) ? Number(e.timestamp) : Date.now(), n = k(e.srcChannel ?? e.source) || "uniform", s = k(e.destination), r = e.dstChannel ?? (s || void 0), i = k(e.uuid ?? e.id) || Us(), o = Ws(e), a = e.payload ?? e.data, c = { ...e.metadata ?? {} };
7333
+ }, Fs = () => typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : `uniform_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`, Pe = (e) => {
7334
+ const t = Number.isFinite(e.timestamp) ? Number(e.timestamp) : Date.now(), n = k(e.srcChannel ?? e.source) || "uniform", s = k(e.destination), r = e.dstChannel ?? (s || void 0), i = k(e.uuid ?? e.id) || Fs(), o = Bs(e), a = e.payload ?? e.data, c = { ...e.metadata ?? {} };
7342
7335
  return {
7343
- purpose: Bs(e.purpose),
7344
- protocol: Fs(e.protocol),
7336
+ purpose: Ls(e.purpose),
7337
+ protocol: $s(e.protocol),
7345
7338
  redirect: !!e.redirect,
7346
7339
  flags: { ...e.flags ?? {} },
7347
7340
  type: o,
7348
- path: Os(e.path),
7341
+ path: Ns(e.path),
7349
7342
  result: e.result,
7350
- args: Ds(e.args),
7351
- op: $s(e, o),
7343
+ args: Os(e.args),
7344
+ op: Ws(e, o),
7352
7345
  error: e.error ? String(e.error) : void 0,
7353
7346
  timestamp: t,
7354
7347
  where: k(e.where) || void 0,
7355
7348
  uuid: i,
7356
7349
  bridges: Array.isArray(e.bridges) ? e.bridges.map(k).filter(Boolean) : [],
7357
7350
  payload: a,
7358
- transfer: Ls(e.transfer),
7351
+ transfer: Ds(e.transfer),
7359
7352
  extension: e.extension,
7360
7353
  defer: e.defer,
7361
7354
  srcChannel: n,
@@ -7367,11 +7360,11 @@ var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
7367
7360
  contentType: k(e.contentType) || void 0,
7368
7361
  metadata: c
7369
7362
  };
7370
- }, js = (e) => {
7363
+ }, Us = (e) => {
7371
7364
  if (!e || typeof e != "object") return !1;
7372
7365
  const t = e;
7373
7366
  return typeof t.uuid == "string" && typeof t.srcChannel == "string" && Array.isArray(t.purpose) && typeof t.type == "string";
7374
- }, it = (e) => (js(e), Pe(e)), zs = class {
7367
+ }, it = (e) => (Us(e), Pe(e)), js = class {
7375
7368
  seen = /* @__PURE__ */ new Map();
7376
7369
  windowMs;
7377
7370
  constructor(e = 300) {
@@ -7384,7 +7377,7 @@ var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
7384
7377
  prune(e) {
7385
7378
  for (const [t, n] of this.seen.entries()) e - n > this.windowMs && this.seen.delete(t);
7386
7379
  }
7387
- }, Hs = class {
7380
+ }, zs = class {
7388
7381
  storageKey;
7389
7382
  maxMessages;
7390
7383
  defaultTTLMs;
@@ -7448,10 +7441,10 @@ var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
7448
7441
  executionContext;
7449
7442
  channelMappings;
7450
7443
  componentRegistry = /* @__PURE__ */ new Map();
7451
- replayGuard = new zs(300);
7444
+ replayGuard = new js(300);
7452
7445
  localChannelId = "";
7453
7446
  constructor(e = {}) {
7454
- this.executionContext = Ne(), this.localChannelId = `${this.executionContext}:${Math.random().toString(36).slice(2, 10)}`, this.channelMappings = e.channelMappings ?? {}, this.messageQueue = Ts(e.queueOptions), this.pendingStore = new Hs(e.pendingStoreOptions), this.setupGlobalListeners();
7447
+ this.executionContext = Ne(), this.localChannelId = `${this.executionContext}:${Math.random().toString(36).slice(2, 10)}`, this.channelMappings = e.channelMappings ?? {}, this.messageQueue = Ts(e.queueOptions), this.pendingStore = new zs(e.pendingStoreOptions), this.setupGlobalListeners();
7455
7448
  }
7456
7449
  registerHandler(e, t) {
7457
7450
  this.handlers.has(e) || this.handlers.set(e, []), this.handlers.get(e).push(t);
@@ -7696,19 +7689,19 @@ var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
7696
7689
  function Qe(e) {
7697
7690
  return z || (z = new tn(e)), z;
7698
7691
  }
7699
- function qi(e) {
7692
+ function Ri(e) {
7700
7693
  return new tn(e);
7701
7694
  }
7702
- function Ni() {
7695
+ function qi() {
7703
7696
  z && (z.destroy(), z = null);
7704
7697
  }
7705
- function Oi(e) {
7698
+ function Ni(e) {
7706
7699
  return Qe().sendMessage(e);
7707
7700
  }
7708
- function Di(e, t) {
7701
+ function Oi(e, t) {
7709
7702
  Qe().registerHandler(e, t);
7710
7703
  }
7711
- function Li(e) {
7704
+ function Di(e) {
7712
7705
  return Qe().getBroadcastChannel(e);
7713
7706
  }
7714
7707
  var nn = class {
@@ -7827,17 +7820,17 @@ var nn = class {
7827
7820
  return this.executionContext;
7828
7821
  }
7829
7822
  };
7830
- function Bi(e) {
7823
+ function Li(e) {
7831
7824
  return new nn(e);
7832
7825
  }
7833
7826
  var O = null;
7834
- function Wi(e) {
7827
+ function Bi(e) {
7835
7828
  return O ? e?.channels && O.registerConfigs(e.channels) : O = new nn(e), O;
7836
7829
  }
7837
- function $i() {
7830
+ function Wi() {
7838
7831
  O && (O.closeAll(), O = null);
7839
7832
  }
7840
- function Fi(e, t, n) {
7833
+ function $i(e, t, n) {
7841
7834
  const s = /* @__PURE__ */ new Map(), r = g(e);
7842
7835
  return (i) => {
7843
7836
  const o = (l) => l.type === "response" && l.reqId ? (u) => {
@@ -7870,7 +7863,7 @@ function Fi(e, t, n) {
7870
7863
  }, c;
7871
7864
  };
7872
7865
  }
7873
- var Ui = class {
7866
+ var Fi = class {
7874
7867
  _transport;
7875
7868
  _channelName;
7876
7869
  _pending = /* @__PURE__ */ new Map();
@@ -7919,7 +7912,7 @@ var Ui = class {
7919
7912
  this._cleanup?.(), this._cleanup = null, this._active = !1;
7920
7913
  }
7921
7914
  };
7922
- function ji(e, t = {}) {
7915
+ function Ui(e, t = {}) {
7923
7916
  return async (n, s) => {
7924
7917
  if (n.type !== "request" || n.channel !== e) return;
7925
7918
  t.onRequest?.(n.payload);
@@ -7931,7 +7924,7 @@ function ji(e, t = {}) {
7931
7924
  }, r.transfer));
7932
7925
  };
7933
7926
  }
7934
- var zi = class {
7927
+ var ji = class {
7935
7928
  _channelName;
7936
7929
  _targetChannel;
7937
7930
  _pending = /* @__PURE__ */ new Map();
@@ -7975,10 +7968,10 @@ var zi = class {
7975
7968
  }));
7976
7969
  return this._subscriber.next(r), i;
7977
7970
  }
7978
- }, Hi = async (e, t = {}, n = null) => G(e, t, n ?? (typeof self < "u" ? self : null)), Gi = async (e, t, n = {}, s = typeof self < "u" ? self : null) => (await G(e, n?.channelOptions, s))?.doImportModule?.(t, n?.importOptions), Qi = ne, Vi = ns, Ki = ss, Yi = rs, Ji = async (e, t = {}, n = typeof self < "u" ? self : null, s = "$host$") => {
7971
+ }, zi = async (e, t = {}, n = null) => G(e, t, n ?? (typeof self < "u" ? self : null)), Hi = async (e, t, n = {}, s = typeof self < "u" ? self : null) => (await G(e, n?.channelOptions, s))?.doImportModule?.(t, n?.importOptions), Gi = ne, Qi = ns, Vi = ss, Ki = rs, Yi = async (e, t = {}, n = typeof self < "u" ? self : null, s = "$host$") => {
7979
7972
  const r = St(s ?? "$host$");
7980
7973
  return await r?.createRemoteChannel(e, t, n), wt(e, r ?? w?.instance);
7981
- }, Xi = (e, t = {}) => {
7974
+ }, Ji = (e, t = {}) => {
7982
7975
  const n = Ne();
7983
7976
  return n !== "chrome-extension" ? {
7984
7977
  async request(s) {
@@ -8013,14 +8006,14 @@ var zi = class {
8013
8006
  };
8014
8007
  };
8015
8008
  export {
8016
- Rr as $createOrUseExistingChannel,
8009
+ Ar as $createOrUseExistingChannel,
8017
8010
  Q as $descriptor,
8018
8011
  qn as $requestHandler,
8019
8012
  xs as AbstractTransport,
8020
8013
  F as AtomicsBuffer,
8021
8014
  Ht as AtomicsRingBuffer,
8022
8015
  se as AtomicsTransport,
8023
- pi as AtomicsTransportFactory,
8016
+ fi as AtomicsTransportFactory,
8024
8017
  wn as BidirectionalInvoker,
8025
8018
  is as BroadcastChannelObservable,
8026
8019
  Un as BroadcastChannelTransport,
@@ -8028,18 +8021,18 @@ export {
8028
8021
  Bn as ChannelConnection,
8029
8022
  Nt as ChannelContext,
8030
8023
  An as ChannelHandler,
8031
- Ui as ChannelMessageObservable,
8024
+ Fi as ChannelMessageObservable,
8032
8025
  v as ChannelNativeObservable,
8033
8026
  ln as ChannelObservable,
8034
8027
  Xn as ChannelStorage,
8035
8028
  _ as ChannelSubject,
8036
8029
  Zn as ChannelTransaction,
8037
8030
  Zt as ChromeExtensionBroadcastChannel,
8038
- Si as ChromeExtensionPortChannel,
8031
+ ki as ChromeExtensionPortChannel,
8039
8032
  Ps as ChromeExtensionTabsChannel,
8040
8033
  Ft as ChromeExternalObservable,
8041
8034
  Qn as ChromeExternalTransport,
8042
- oi as ChromeObservableFactory,
8035
+ ii as ChromeObservableFactory,
8043
8036
  Fe as ChromePortObservable,
8044
8037
  Gn as ChromePortTransport,
8045
8038
  We as ChromeRuntimeObservable,
@@ -8048,35 +8041,35 @@ export {
8048
8041
  Hn as ChromeTabsTransport,
8049
8042
  Wn as ConnectionPool,
8050
8043
  yn as DefaultReflect,
8051
- mr as DispatchHandler,
8052
- mr as DispatchProxyHandler,
8053
- Js as MessageObservable,
8044
+ _r as DispatchHandler,
8045
+ _r as DispatchProxyHandler,
8046
+ Ys as MessageObservable,
8054
8047
  Ce as MessagePortObservable,
8055
8048
  Fn as MessagePortTransport,
8056
8049
  Yt as MessageQueue,
8057
8050
  Vt as MessageQueueStorage,
8058
8051
  v as Observable,
8059
8052
  An as ObservableChannelHandler,
8060
- dr as ObservableFactory,
8061
- zi as ObservableRequestDispatcher,
8053
+ ur as ObservableFactory,
8054
+ ji as ObservableRequestDispatcher,
8062
8055
  Kt as OptimizedWorkerChannel,
8063
8056
  _t as PROXY_INTERNALS,
8064
8057
  pt as PROXY_MARKER,
8065
- Hs as PendingMessageStore,
8058
+ zs as PendingMessageStore,
8066
8059
  Qt as PortPool,
8067
8060
  B as PortTransport,
8068
- gi as PortTransportFactory,
8069
- zs as ProtocolReplayGuard,
8061
+ mi as PortTransportFactory,
8062
+ js as ProtocolReplayGuard,
8070
8063
  Sn as ProxyBuilder,
8071
8064
  Es as QueuedWorkerChannel,
8072
- qr as READ,
8065
+ Rr as READ,
8073
8066
  je as RTCPeerManager,
8074
8067
  ge as RTCPeerTransport,
8075
- _i as RTCTransportFactory,
8068
+ pi as RTCTransportFactory,
8076
8069
  kt as RemoteChannelHelper,
8077
8070
  ye as RemoteChannels,
8078
8071
  Cn as RemoteProxyHandler,
8079
- Ys as ReplayChannelSubject,
8072
+ Ks as ReplayChannelSubject,
8080
8073
  dt as Requestor,
8081
8074
  ft as Responder,
8082
8075
  w as SELF_CHANNEL,
@@ -8090,105 +8083,105 @@ export {
8090
8083
  Vn as ServiceWorkerTransport,
8091
8084
  me as SharedWorkerClient,
8092
8085
  Ue as SharedWorkerHost,
8093
- di as SharedWorkerObservableFactory,
8086
+ ui as SharedWorkerObservableFactory,
8094
8087
  _e as SocketIOObservable,
8095
- ci as SocketIOObservableFactory,
8088
+ ai as SocketIOObservableFactory,
8096
8089
  fs as SocketIORoomObservable,
8097
8090
  ze as TransferableStorage,
8098
- bi as TransferableStorageFactory,
8091
+ gi as TransferableStorageFactory,
8099
8092
  E as TransportAdapter,
8100
8093
  ls as TransportChromePortObservable,
8101
8094
  as as TransportChromeRuntimeObservable,
8102
8095
  cs as TransportChromeTabsObservable,
8103
- Ks as TransportCoreFactory,
8104
- Or as TransportFactory,
8096
+ Vs as TransportCoreFactory,
8097
+ Nr as TransportFactory,
8105
8098
  I as TransportObservable,
8106
- Kr as TransportObservableFactory,
8099
+ Vr as TransportObservableFactory,
8107
8100
  yt as UnifiedChannel,
8108
8101
  tn as UnifiedMessagingManager,
8109
- vi as UnifiedTransportFactory,
8102
+ wi as UnifiedTransportFactory,
8110
8103
  d as WReflectAction,
8111
- Qs as WStatus,
8112
- Vs as WType,
8104
+ Gs as WStatus,
8105
+ Qs as WType,
8113
8106
  os as WebSocketObservable,
8114
8107
  jn as WebSocketTransport,
8115
8108
  Te as WindowPortConnector,
8116
8109
  Bt as WorkerContext,
8117
8110
  Ze as WorkerObservable,
8118
8111
  $n as WorkerTransport,
8119
- jr as addBroadcastChannel,
8120
- Ur as addPortChannel,
8121
- zr as addSelfChannelToDefault,
8122
- Fr as addWorkerChannel,
8123
- _r as autoInvoker,
8112
+ Ur as addBroadcastChannel,
8113
+ Fr as addPortChannel,
8114
+ jr as addSelfChannelToDefault,
8115
+ $r as addWorkerChannel,
8116
+ pr as autoInvoker,
8124
8117
  Cs as bindServiceWorkerHostBridge,
8125
8118
  Mt as buildResponse,
8126
- Lr as closeAllStorage,
8127
- kr as closeUnifiedChannel,
8128
- Ji as connectToChannelAsModule,
8119
+ Dr as closeAllStorage,
8120
+ xr as closeUnifiedChannel,
8121
+ Yi as connectToChannelAsModule,
8129
8122
  zt as createAtomicsChannelPair,
8130
8123
  mn as createBidirectionalChannel,
8131
- Yr as createBidirectionalTransport,
8124
+ Kr as createBidirectionalTransport,
8132
8125
  Gt as createBroadcastSignaling,
8133
8126
  ht as createBroadcastTransport,
8134
8127
  ne as createChannelContext,
8135
8128
  be as createChannelPair,
8136
- ji as createChannelRequestHandler,
8129
+ Ui as createChannelRequestHandler,
8137
8130
  ss as createChannelsInContext,
8138
- Ii as createChromeExtensionBroadcast,
8139
- Ti as createChromeExtensionBroadcastChannel,
8140
- Ei as createChromeExtensionChannel,
8141
- Xi as createChromeExtensionRuntimeChannel,
8131
+ Ei as createChromeExtensionBroadcast,
8132
+ Ii as createChromeExtensionBroadcastChannel,
8133
+ Si as createChromeExtensionChannel,
8134
+ Ji as createChromeExtensionRuntimeChannel,
8142
8135
  Ms as createChromeExtensionTabsChannel,
8143
- Pi as createChromeExtensionTabsMessagingChannel,
8136
+ Ti as createChromeExtensionTabsMessagingChannel,
8144
8137
  cn as createChromeListener,
8145
- ii as createChromeRequestHandler,
8138
+ ri as createChromeRequestHandler,
8146
8139
  ct as createChromeTabsListener,
8147
- Dr as createConnectionObserver,
8148
- Qi as createContext,
8149
- Vr as createDefaultChannelPair,
8140
+ Or as createConnectionObserver,
8141
+ Gi as createContext,
8142
+ Qr as createDefaultChannelPair,
8150
8143
  xn as createExposeHandler,
8151
- mi as createFromPort,
8144
+ _i as createFromPort,
8152
8145
  St as createHostChannel,
8153
- ni as createHostProxy,
8146
+ ti as createHostProxy,
8154
8147
  qe as createInvoker,
8155
8148
  Ve as createInvokerObservable,
8156
- sr as createMessageId,
8157
- ki as createMessageQueue,
8158
- Ki as createMultiChannel,
8159
- Pr as createObservableChannel,
8160
- Ri as createOptimizedWorkerChannel,
8149
+ nr as createMessageId,
8150
+ xi as createMessageQueue,
8151
+ Vi as createMultiChannel,
8152
+ Tr as createObservableChannel,
8153
+ Ai as createOptimizedWorkerChannel,
8161
8154
  G as createOrUseExistingChannel,
8162
8155
  ws as createPortProxy,
8163
8156
  Pe as createProtocolEnvelope,
8164
8157
  Rs as createQueuedOptimizedWorkerChannel,
8165
- Ai as createQueuedWorkerChannel,
8158
+ Mi as createQueuedWorkerChannel,
8166
8159
  hn as createReflectHandler,
8167
8160
  ee as createRemoteProxy,
8168
- fr as createRequestor,
8161
+ dr as createRequestor,
8169
8162
  vn as createResponder,
8170
8163
  kn as createSenderProxy,
8171
- Bi as createServiceChannelManager,
8164
+ Li as createServiceChannelManager,
8172
8165
  As as createServiceWorkerChannel,
8173
- wi as createServiceWorkerClient,
8174
- yi as createServiceWorkerHost,
8175
- ui as createSharedWorkerHostObservable,
8176
- hi as createSharedWorkerObservable,
8177
- li as createSocketObservable,
8178
- ai as createSocketRequestHandler,
8166
+ yi as createServiceWorkerClient,
8167
+ bi as createServiceWorkerHost,
8168
+ hi as createSharedWorkerHostObservable,
8169
+ li as createSharedWorkerObservable,
8170
+ ci as createSocketObservable,
8171
+ oi as createSocketRequestHandler,
8179
8172
  $ as createTransport,
8180
8173
  m as createTransportListener,
8181
8174
  g as createTransportSender,
8182
8175
  S as createUnifiedChannel,
8183
- vr as createUnifiedChannelPair,
8184
- qi as createUnifiedMessaging,
8176
+ wr as createUnifiedChannelPair,
8177
+ Ri as createUnifiedMessaging,
8185
8178
  lt as createWebSocketTransport,
8186
- fi as createWorkerAtomicsTransport,
8179
+ di as createWorkerAtomicsTransport,
8187
8180
  en as createWorkerChannel,
8188
- tr as debounce,
8189
- Hr as deferChannel,
8181
+ er as debounce,
8182
+ zr as deferChannel,
8190
8183
  fn as delay,
8191
- Wr as deleteContext,
8184
+ Br as deleteContext,
8192
8185
  Ye as descMap,
8193
8186
  H as detectContextType,
8194
8187
  Ne as detectExecutionContext,
@@ -8196,34 +8189,34 @@ export {
8196
8189
  Ke as detectTransport,
8197
8190
  Z as detectTransportType,
8198
8191
  Pt as executeAction,
8199
- Sr as exposeFromUnified,
8200
- ei as exposeFromWorker,
8192
+ kr as exposeFromUnified,
8193
+ Zr as exposeFromWorker,
8201
8194
  vs as exposeOverPort,
8202
8195
  ut as filter,
8203
8196
  un as fromEvent,
8204
8197
  dn as fromPromise,
8205
- Li as getBroadcastChannel,
8206
- Qr as getChannelFromDefault,
8198
+ Di as getBroadcastChannel,
8199
+ Gr as getChannelFromDefault,
8207
8200
  Rt as getChannelStorage,
8208
8201
  At as getConnection,
8209
8202
  Le as getConnectionPool,
8210
- Br as getContext,
8211
- $r as getContextNames,
8203
+ Lr as getContext,
8204
+ Wr as getContextNames,
8212
8205
  Is as getCurrentTabId,
8213
8206
  N as getDefaultContext,
8214
- Nr as getHostConnection,
8207
+ qr as getHostConnection,
8215
8208
  Ts as getMessageQueue,
8216
8209
  ns as getOrCreateContext,
8217
- gr as getProxyDescriptor,
8218
- br as getProxyInternals,
8219
- Wi as getServiceChannelManager,
8220
- Vi as getSharedContext,
8210
+ mr as getProxyDescriptor,
8211
+ gr as getProxyInternals,
8212
+ Bi as getServiceChannelManager,
8213
+ Qi as getSharedContext,
8221
8214
  at as getTransportMeta,
8222
8215
  Ss as getTransportRegistry,
8223
- Cr as getUnifiedChannel,
8224
- xr as getUnifiedChannelNames,
8216
+ vr as getUnifiedChannel,
8217
+ Cr as getUnifiedChannelNames,
8225
8218
  Qe as getUnifiedMessaging,
8226
- Ci as getVisibleTabId,
8219
+ vi as getVisibleTabId,
8227
8220
  te as getWorkerChannel,
8228
8221
  Be as getWorkerContext,
8229
8222
  $t as getWorkerInvoker,
@@ -8232,68 +8225,68 @@ export {
8232
8225
  ue as handMap,
8233
8226
  De as handleRequest,
8234
8227
  Dn as hasNoPath,
8235
- si as importInHost,
8236
- Yi as importIsolatedModule,
8237
- Gi as importModuleInChannel,
8228
+ ni as importInHost,
8229
+ Ki as importIsolatedModule,
8230
+ Hi as importModuleInChannel,
8238
8231
  rs as importModuleInContext,
8239
8232
  Oe as initChannelHandler,
8240
- Gr as initDeferredChannel,
8241
- Mi as initMainChannel,
8242
- Jr as initWorkerContext,
8233
+ Hr as initDeferredChannel,
8234
+ Pi as initMainChannel,
8235
+ Yr as initWorkerContext,
8243
8236
  pn as interval,
8244
8237
  Pn as isChromeExtensionContext,
8245
- js as isProtocolEnvelope,
8238
+ Us as isProtocolEnvelope,
8246
8239
  gt as isRemoteProxy,
8247
8240
  vt as isServiceWorkerContext,
8248
- Ar as loadWorker,
8249
- or as makeBroadcastInvoker,
8250
- Fi as makeChannelMessageHandler,
8251
- cr as makeChromeRuntimeInvoker,
8252
- ir as makeMessagePortInvoker,
8253
- Tr as makeObservableRequestProxy,
8241
+ Mr as loadWorker,
8242
+ ir as makeBroadcastInvoker,
8243
+ $i as makeChannelMessageHandler,
8244
+ ar as makeChromeRuntimeInvoker,
8245
+ rr as makeMessagePortInvoker,
8246
+ Ir as makeObservableRequestProxy,
8254
8247
  En as makeRequestProxy,
8255
- ur as makeSelfInvoker,
8256
- lr as makeServiceWorkerClientInvoker,
8257
- hr as makeServiceWorkerHostInvoker,
8258
- ar as makeWebSocketInvoker,
8259
- rr as makeWorkerInvoker,
8260
- Xs as map,
8248
+ hr as makeSelfInvoker,
8249
+ cr as makeServiceWorkerClientInvoker,
8250
+ lr as makeServiceWorkerHostInvoker,
8251
+ or as makeWebSocketInvoker,
8252
+ sr as makeWorkerInvoker,
8253
+ Js as map,
8261
8254
  _n as merge,
8262
8255
  it as normalizeProtocolEnvelope,
8263
8256
  ve as normalizeRef,
8264
8257
  Rn as objectToRef,
8265
- Zr as onWorkerChannelCreated,
8266
- Xr as onWorkerConnection,
8267
- ti as onWorkerInvocation,
8268
- yr as proxyBuilder,
8258
+ Xr as onWorkerChannelCreated,
8259
+ Jr as onWorkerConnection,
8260
+ ei as onWorkerInvocation,
8261
+ br as proxyBuilder,
8269
8262
  L as readByPath,
8270
- Di as registerHandler,
8271
- xi as registerWorkerAPI,
8263
+ Oi as registerHandler,
8264
+ Ci as registerWorkerAPI,
8272
8265
  D as registeredInPath,
8273
- Er as remoteFromUnified,
8266
+ Sr as remoteFromUnified,
8274
8267
  On as removeByData,
8275
8268
  It as removeByPath,
8276
- $i as resetServiceChannelManager,
8277
- Ni as resetUnifiedMessaging,
8269
+ Wi as resetServiceChannelManager,
8270
+ qi as resetUnifiedMessaging,
8278
8271
  P as resolveWorkerSpecifierHref,
8279
- Oi as sendMessage,
8280
- pr as setupInvoker,
8281
- wr as setupUnifiedChannel,
8272
+ Ni as sendMessage,
8273
+ fr as setupInvoker,
8274
+ yr as setupUnifiedChannel,
8282
8275
  X as storedData,
8283
8276
  Mn as supportsDedicatedWorkers,
8284
- Hi as sync,
8285
- Zs as take,
8286
- er as takeUntil,
8287
- nr as throttle,
8277
+ zi as sync,
8278
+ Xs as take,
8279
+ Zs as takeUntil,
8280
+ tr as throttle,
8288
8281
  Et as traverseByPath,
8289
8282
  Nn as unwrapDescriptorFromProxy,
8290
8283
  ie as unwrapDescriptorFromProxyRecursive,
8291
8284
  gn as when,
8292
- ri as workerContext,
8285
+ si as workerContext,
8293
8286
  wt as wrapChannel,
8294
8287
  mt as wrapDescriptor,
8295
8288
  de as wrapMap,
8296
- Ir as wrapObservableChannel,
8289
+ Er as wrapObservableChannel,
8297
8290
  fe as writeByPath
8298
8291
  };
8299
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidW5pZm9ybS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgUHJvbWlzZWQsIFVVSUR2NCwgZGVlcE9wZXJhdGVBbmRDbG9uZSwgaXNDYW5KdXN0UmV0dXJuLCBpc0NhblRyYW5zZmVyLCBpc05vdENvbXBsZXhBcnJheSwgaXNQcmltaXRpdmUgfSBmcm9tIFwiQGZlc3QtbGliL2NvcmVcIjtcblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3R5cGVzL0ludGVyZmFjZS50c1xudmFyIFdTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oV1N0YXR1cykge1xuXHRXU3RhdHVzW1wiU1VDQ0VTU1wiXSA9IFwic3VjY2Vzc1wiO1xuXHRXU3RhdHVzW1wiRVJST1JcIl0gPSBcImVycm9yXCI7XG5cdHJldHVybiBXU3RhdHVzO1xufSh7fSk7XG52YXIgV1R5cGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oV1R5cGUpIHtcblx0V1R5cGVbXCJQUklNSVRJVkVcIl0gPSBcInByaW1pdGl2ZVwiO1xuXHRXVHlwZVtcIk5VTUJFUlwiXSA9IFwibnVtYmVyXCI7XG5cdFdUeXBlW1wiU1RSSU5HXCJdID0gXCJzdHJpbmdcIjtcblx0V1R5cGVbXCJCT09MRUFOXCJdID0gXCJib29sZWFuXCI7XG5cdFdUeXBlW1wiQklHSU5UXCJdID0gXCJiaWdpbnRcIjtcblx0V1R5cGVbXCJVTkRFRklORURcIl0gPSBcInVuZGVmaW5lZFwiO1xuXHRXVHlwZVtcIk5VTExcIl0gPSBcIm51bGxcIjtcblx0V1R5cGVbXCJPQkpFQ1RcIl0gPSBcIm9iamVjdFwiO1xuXHRXVHlwZVtcIkZVTkNUSU9OXCJdID0gXCJmdW5jdGlvblwiO1xuXHRXVHlwZVtcIkFSUkFZXCJdID0gXCJhcnJheVwiO1xuXHRXVHlwZVtcIk1BUFwiXSA9IFwibWFwXCI7XG5cdFdUeXBlW1wiU0VUXCJdID0gXCJzZXRcIjtcblx0V1R5cGVbXCJTWU1CT0xcIl0gPSBcInN5bWJvbFwiO1xuXHRXVHlwZVtcIldFQUtfUkVGXCJdID0gXCJ3ZWFrUmVmXCI7XG5cdFdUeXBlW1wiUFJPTUlTRVwiXSA9IFwicHJvbWlzZVwiO1xuXHRXVHlwZVtcIlVOS05PV05cIl0gPSBcInVua25vd25cIjtcblx0cmV0dXJuIFdUeXBlO1xufSh7fSk7XG52YXIgV1JlZmxlY3RBY3Rpb24gPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oV1JlZmxlY3RBY3Rpb24pIHtcblx0V1JlZmxlY3RBY3Rpb25bXCJHRVRcIl0gPSBcImdldFwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIlNFVFwiXSA9IFwic2V0XCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiQ0FMTFwiXSA9IFwiY2FsbFwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIkFQUExZXCJdID0gXCJhcHBseVwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIkNPTlNUUlVDVFwiXSA9IFwiY29uc3RydWN0XCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiREVMRVRFXCJdID0gXCJkZWxldGVcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJERUxFVEVfUFJPUEVSVFlcIl0gPSBcImRlbGV0ZVByb3BlcnR5XCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiSEFTXCJdID0gXCJoYXNcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJPV05fS0VZU1wiXSA9IFwib3duS2V5c1wiO1xuXHRXUmVmbGVjdEFjdGlvbltcIkdFVF9PV05fUFJPUEVSVFlfREVTQ1JJUFRPUlwiXSA9IFwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiR0VUX1BST1BFUlRZX0RFU0NSSVBUT1JcIl0gPSBcImdldFByb3BlcnR5RGVzY3JpcHRvclwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIkdFVF9QUk9UT1RZUEVfT0ZcIl0gPSBcImdldFByb3RvdHlwZU9mXCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiU0VUX1BST1RPVFlQRV9PRlwiXSA9IFwic2V0UHJvdG90eXBlT2ZcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJJU19FWFRFTlNJQkxFXCJdID0gXCJpc0V4dGVuc2libGVcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJQUkVWRU5UX0VYVEVOU0lPTlNcIl0gPSBcInByZXZlbnRFeHRlbnNpb25zXCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiVFJBTlNGRVJcIl0gPSBcInRyYW5zZmVyXCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiSU1QT1JUXCJdID0gXCJpbXBvcnRcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJESVNQT1NFXCJdID0gXCJkaXNwb3NlXCI7XG5cdHJldHVybiBXUmVmbGVjdEFjdGlvbjtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvY29yZS9UcmFuc3BvcnRDb3JlLnRzXG52YXIgVFJBTlNQT1JUX1RZUEVfQUxJQVNFUyA9IHtcblx0XCJ3c1wiOiBcIndlYnNvY2tldFwiLFxuXHRcInNvY2tldFwiOiBcIndlYnNvY2tldFwiLFxuXHRcInNvY2tldGlvXCI6IFwic29ja2V0LWlvXCIsXG5cdFwic2VydmljZVwiOiBcInNlcnZpY2Utd29ya2VyXCIsXG5cdFwic3dcIjogXCJzZXJ2aWNlLXdvcmtlclwiLFxuXHRcInNlcnZpY2Utd29ya2VyLWNsaWVudFwiOiBcInNlcnZpY2Utd29ya2VyXCIsXG5cdFwic2VydmljZS13b3JrZXItaG9zdFwiOiBcInNlcnZpY2Utd29ya2VyXCIsXG5cdFwicmluZy1idWZmZXJcIjogXCJhdG9taWNzXCJcbn07XG5mdW5jdGlvbiBub3JtYWxpemVUcmFuc3BvcnRUeXBlQWxpYXModHJhbnNwb3J0KSB7XG5cdGNvbnN0IHJhdyA9IFN0cmluZyh0cmFuc3BvcnQgPz8gXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cdGlmICghcmF3KSByZXR1cm4gXCJpbnRlcm5hbFwiO1xuXHRyZXR1cm4gVFJBTlNQT1JUX1RZUEVfQUxJQVNFU1tyYXddID8/IHJhdztcbn1cbmZ1bmN0aW9uIGRldGVjdFRyYW5zcG9ydFR5cGUkMSh0cmFuc3BvcnQpIHtcblx0aWYgKHR5cGVvZiB0cmFuc3BvcnQgPT09IFwic3RyaW5nXCIpIHJldHVybiBub3JtYWxpemVUcmFuc3BvcnRUeXBlQWxpYXModHJhbnNwb3J0KTtcblx0aWYgKHR5cGVvZiBXb3JrZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgV29ya2VyKSByZXR1cm4gXCJ3b3JrZXJcIjtcblx0aWYgKHR5cGVvZiBTaGFyZWRXb3JrZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgU2hhcmVkV29ya2VyKSByZXR1cm4gXCJzaGFyZWQtd29ya2VyXCI7XG5cdGlmICh0eXBlb2YgTWVzc2FnZVBvcnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgTWVzc2FnZVBvcnQpIHJldHVybiBcIm1lc3NhZ2UtcG9ydFwiO1xuXHRpZiAodHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgQnJvYWRjYXN0Q2hhbm5lbCkgcmV0dXJuIFwiYnJvYWRjYXN0XCI7XG5cdGlmICh0eXBlb2YgV2ViU29ja2V0ICE9PSBcInVuZGVmaW5lZFwiICYmIHRyYW5zcG9ydCBpbnN0YW5jZW9mIFdlYlNvY2tldCkgcmV0dXJuIFwid2Vic29ja2V0XCI7XG5cdGlmICh0eXBlb2YgUlRDRGF0YUNoYW5uZWwgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgUlRDRGF0YUNoYW5uZWwpIHJldHVybiBcInJ0Yy1kYXRhXCI7XG5cdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIHRyYW5zcG9ydCAmJiB0eXBlb2YgdHJhbnNwb3J0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB0cmFuc3BvcnQucG9zdE1lc3NhZ2UgPT09IFwiZnVuY3Rpb25cIiAmJiB0cmFuc3BvcnQub25NZXNzYWdlPy5hZGRMaXN0ZW5lcikgcmV0dXJuIFwiY2hyb21lLXBvcnRcIjtcblx0cmV0dXJuIFwiaW50ZXJuYWxcIjtcbn1cbmZ1bmN0aW9uIGdldFRyYW5zcG9ydE1ldGEodHJhbnNwb3J0KSB7XG5cdGNvbnN0IHR5cGUgPSBkZXRlY3RUcmFuc3BvcnRUeXBlJDEodHJhbnNwb3J0KTtcblx0cmV0dXJuIHtcblx0XHR0eXBlLFxuXHRcdHN1cHBvcnRzOiB7XG5cdFx0XHRcIndvcmtlclwiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiB0cnVlLFxuXHRcdFx0XHRiaW5hcnk6IHRydWUsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcInNoYXJlZC13b3JrZXJcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogdHJ1ZSxcblx0XHRcdFx0YmluYXJ5OiB0cnVlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IHRydWUsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcInNlcnZpY2Utd29ya2VyXCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IHRydWUsXG5cdFx0XHRcdGJpbmFyeTogdHJ1ZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiB0cnVlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0XCJicm9hZGNhc3RcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogZmFsc2UsXG5cdFx0XHRcdGJpbmFyeTogZmFsc2UsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IGZhbHNlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IHRydWUsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0XCJtZXNzYWdlLXBvcnRcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogdHJ1ZSxcblx0XHRcdFx0YmluYXJ5OiB0cnVlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IGZhbHNlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdFwid2Vic29ja2V0XCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IGZhbHNlLFxuXHRcdFx0XHRiaW5hcnk6IHRydWUsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcImNocm9tZS1ydW50aW1lXCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IGZhbHNlLFxuXHRcdFx0XHRiaW5hcnk6IGZhbHNlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IHRydWUsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0XCJjaHJvbWUtdGFic1wiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiBmYWxzZSxcblx0XHRcdFx0YmluYXJ5OiBmYWxzZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiBmYWxzZSxcblx0XHRcdFx0cGVyc2lzdGVudDogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRcImNocm9tZS1wb3J0XCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IGZhbHNlLFxuXHRcdFx0XHRiaW5hcnk6IGZhbHNlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IGZhbHNlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0XCJjaHJvbWUtZXh0ZXJuYWxcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogZmFsc2UsXG5cdFx0XHRcdGJpbmFyeTogZmFsc2UsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0XCJzb2NrZXQtaW9cIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogZmFsc2UsXG5cdFx0XHRcdGJpbmFyeTogdHJ1ZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiB0cnVlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0XCJydGMtZGF0YVwiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiBmYWxzZSxcblx0XHRcdFx0YmluYXJ5OiB0cnVlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IGZhbHNlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0XCJhdG9taWNzXCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IGZhbHNlLFxuXHRcdFx0XHRiaW5hcnk6IHRydWUsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcInNlbGZcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogdHJ1ZSxcblx0XHRcdFx0YmluYXJ5OiB0cnVlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IGZhbHNlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0XCJpbnRlcm5hbFwiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiBmYWxzZSxcblx0XHRcdFx0YmluYXJ5OiBmYWxzZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiBmYWxzZSxcblx0XHRcdFx0cGVyc2lzdGVudDogZmFsc2Vcblx0XHRcdH1cblx0XHR9W3R5cGVdXG5cdH07XG59XG5mdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnRTZW5kZXIodHJhbnNwb3J0LCBvcHRpb25zKSB7XG5cdHJldHVybiAobXNnLCB0cmFuc2ZlcikgPT4ge1xuXHRcdGNvbnN0IHRyYW5zZmVyYWJsZSA9IHRyYW5zZmVyID8/IG1zZz8udHJhbnNmZXJhYmxlID8/IFtdO1xuXHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlOiBfLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0aWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIFdvcmtlcikge1xuXHRcdFx0dHJhbnNwb3J0LnBvc3RNZXNzYWdlKGRhdGEsIHsgdHJhbnNmZXI6IHRyYW5zZmVyYWJsZSB9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBTaGFyZWRXb3JrZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgU2hhcmVkV29ya2VyKSB7XG5cdFx0XHR0cmFuc3BvcnQucG9ydC5wb3N0TWVzc2FnZShkYXRhLCB7IHRyYW5zZmVyOiB0cmFuc2ZlcmFibGUgfSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0cmFuc3BvcnQgaW5zdGFuY2VvZiBNZXNzYWdlUG9ydCkge1xuXHRcdFx0dHJhbnNwb3J0LnBvc3RNZXNzYWdlKGRhdGEsIHsgdHJhbnNmZXI6IHRyYW5zZmVyYWJsZSB9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIEJyb2FkY2FzdENoYW5uZWwpIHtcblx0XHRcdHRyYW5zcG9ydC5wb3N0TWVzc2FnZShkYXRhKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIFdlYlNvY2tldCkge1xuXHRcdFx0aWYgKHRyYW5zcG9ydC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xuXHRcdFx0XHRpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkgdHJhbnNwb3J0LnNlbmQoZGF0YSk7XG5cdFx0XHRcdGVsc2UgdHJhbnNwb3J0LnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS1ydW50aW1lXCIpIHtcblx0XHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lKSBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZShkYXRhKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRyYW5zcG9ydCA9PT0gXCJjaHJvbWUtdGFic1wiKSB7XG5cdFx0XHRpZiAodHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjaHJvbWUudGFicykge1xuXHRcdFx0XHRjb25zdCB0YWJJZCA9IG9wdGlvbnM/LnRhYklkID8/IG1zZz8uX3RhYklkO1xuXHRcdFx0XHRpZiAodGFiSWQgIT0gbnVsbCkgY2hyb21lLnRhYnMuc2VuZE1lc3NhZ2UodGFiSWQsIGRhdGEpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS1wb3J0XCIpIHtcblx0XHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lKSB7XG5cdFx0XHRcdGNvbnN0IHBvcnROYW1lID0gb3B0aW9ucz8ucG9ydE5hbWUgPz8gbXNnPy5fcG9ydE5hbWU7XG5cdFx0XHRcdGlmIChwb3J0TmFtZSkge1xuXHRcdFx0XHRcdGNvbnN0IHRhYklkID0gb3B0aW9ucz8udGFiSWQgPz8gbXNnPy5fdGFiSWQ7XG5cdFx0XHRcdFx0KHRhYklkICE9IG51bGwgJiYgY2hyb21lLnRhYnM/LmNvbm5lY3QgPyBjaHJvbWUudGFicy5jb25uZWN0KHRhYklkLCB7IG5hbWU6IHBvcnROYW1lIH0pIDogY2hyb21lLnJ1bnRpbWUuY29ubmVjdCh7IG5hbWU6IHBvcnROYW1lIH0pKS5wb3N0TWVzc2FnZShkYXRhKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS1leHRlcm5hbFwiKSB7XG5cdFx0XHRpZiAodHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjaHJvbWUucnVudGltZSkge1xuXHRcdFx0XHRjb25zdCBleHRlcm5hbElkID0gb3B0aW9ucz8uZXh0ZXJuYWxJZCA/PyBtc2c/Ll9leHRlcm5hbElkO1xuXHRcdFx0XHRpZiAoZXh0ZXJuYWxJZCkgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoZXh0ZXJuYWxJZCwgZGF0YSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0cmFuc3BvcnQgPT09IFwic2VydmljZS13b3JrZXItY2xpZW50XCIpIHtcblx0XHRcdGlmIChcInNlcnZpY2VXb3JrZXJcIiBpbiBuYXZpZ2F0b3IpIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5LnRoZW4oKHJlZykgPT4ge1xuXHRcdFx0XHRyZWcuYWN0aXZlPy5wb3N0TWVzc2FnZShkYXRhLCB0cmFuc2ZlcmFibGUpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0cmFuc3BvcnQgPT09IFwic2VydmljZS13b3JrZXItaG9zdFwiKSB7XG5cdFx0XHRpZiAodHlwZW9mIGNsaWVudHMgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0Y29uc3QgY2xpZW50SWQgPSBvcHRpb25zPy5jbGllbnRJZCA/PyBtc2c/Ll9jbGllbnRJZDtcblx0XHRcdFx0aWYgKGNsaWVudElkKSBjbGllbnRzLmdldChjbGllbnRJZCkudGhlbigoYykgPT4gYz8ucG9zdE1lc3NhZ2UoZGF0YSwgdHJhbnNmZXJhYmxlKSk7XG5cdFx0XHRcdGVsc2UgY2xpZW50cy5tYXRjaEFsbCh7IGluY2x1ZGVVbmNvbnRyb2xsZWQ6IHRydWUgfSkudGhlbigoYWxsKSA9PiB7XG5cdFx0XHRcdFx0YWxsLmZvckVhY2goKGMpID0+IGMucG9zdE1lc3NhZ2UoZGF0YSwgdHJhbnNmZXJhYmxlKSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHJhbnNwb3J0ID09PSBcInNlbGZcIikge1xuXHRcdFx0aWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIFwicG9zdE1lc3NhZ2VcIiBpbiBzZWxmKSBzZWxmLnBvc3RNZXNzYWdlKGRhdGEsIHsgdHJhbnNmZXI6IHRyYW5zZmVyYWJsZSB9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH07XG59XG5mdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0cmFuc3BvcnQsIG9uTWVzc2FnZSwgb25FcnJvciwgb25DbG9zZSwgb3B0aW9ucykge1xuXHRjb25zdCBtc2dIYW5kbGVyID0gKGUpID0+IHtcblx0XHRpZiAodHJhbnNwb3J0IGluc3RhbmNlb2YgV2ViU29ja2V0ICYmIHR5cGVvZiBlLmRhdGEgPT09IFwic3RyaW5nXCIpIHRyeSB7XG5cdFx0XHRvbk1lc3NhZ2UoSlNPTi5wYXJzZShlLmRhdGEpKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdG9uRXJyb3I/LihlcnIpO1xuXHRcdH1cblx0XHRlbHNlIGlmICh0cmFuc3BvcnQgaW5zdGFuY2VvZiBXZWJTb2NrZXQgJiYgZS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIG9uTWVzc2FnZShlLmRhdGEpO1xuXHRcdGVsc2Ugb25NZXNzYWdlKGUuZGF0YSk7XG5cdH07XG5cdGNvbnN0IGVyckhhbmRsZXIgPSAoZSkgPT4ge1xuXHRcdG9uRXJyb3I/LihuZXcgRXJyb3IoZS5tZXNzYWdlID8/IFwiVHJhbnNwb3J0IGVycm9yXCIpKTtcblx0fTtcblx0Y29uc3QgY2xvc2VIYW5kbGVyID0gKCkgPT4gb25DbG9zZT8uKCk7XG5cdGlmICh0cmFuc3BvcnQgaW5zdGFuY2VvZiBXb3JrZXIpIHtcblx0XHR0cmFuc3BvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0dHJhbnNwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBlcnJIYW5kbGVyKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dHJhbnNwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0dHJhbnNwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBlcnJIYW5kbGVyKTtcblx0XHR9O1xuXHR9XG5cdGlmICh0eXBlb2YgU2hhcmVkV29ya2VyICE9PSBcInVuZGVmaW5lZFwiICYmIHRyYW5zcG9ydCBpbnN0YW5jZW9mIFNoYXJlZFdvcmtlcikge1xuXHRcdHRyYW5zcG9ydC5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdHRyYW5zcG9ydC5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlZXJyb3JcIiwgZXJySGFuZGxlcik7XG5cdFx0dHJhbnNwb3J0LnBvcnQuc3RhcnQoKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dHJhbnNwb3J0LnBvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0XHR0cmFuc3BvcnQucG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZWVycm9yXCIsIGVyckhhbmRsZXIpO1xuXHRcdFx0dHJhbnNwb3J0LnBvcnQuY2xvc2UoKTtcblx0XHR9O1xuXHR9XG5cdGlmICh0cmFuc3BvcnQgaW5zdGFuY2VvZiBNZXNzYWdlUG9ydCkge1xuXHRcdHRyYW5zcG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtc2dIYW5kbGVyKTtcblx0XHR0cmFuc3BvcnQuc3RhcnQoKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dHJhbnNwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0dHJhbnNwb3J0LmNsb3NlKCk7XG5cdFx0fTtcblx0fVxuXHRpZiAodHJhbnNwb3J0IGluc3RhbmNlb2YgQnJvYWRjYXN0Q2hhbm5lbCkge1xuXHRcdHRyYW5zcG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtc2dIYW5kbGVyKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dHJhbnNwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0dHJhbnNwb3J0LmNsb3NlKCk7XG5cdFx0fTtcblx0fVxuXHRpZiAodHJhbnNwb3J0IGluc3RhbmNlb2YgV2ViU29ja2V0KSB7XG5cdFx0dHJhbnNwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdHRyYW5zcG9ydC5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgZXJySGFuZGxlcik7XG5cdFx0dHJhbnNwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbG9zZVwiLCBjbG9zZUhhbmRsZXIpO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHR0cmFuc3BvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0XHR0cmFuc3BvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIGVyckhhbmRsZXIpO1xuXHRcdFx0dHJhbnNwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbG9zZVwiLCBjbG9zZUhhbmRsZXIpO1xuXHRcdFx0aWYgKHRyYW5zcG9ydC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikgdHJhbnNwb3J0LmNsb3NlKCk7XG5cdFx0fTtcblx0fVxuXHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS1ydW50aW1lXCIpIHtcblx0XHRpZiAodHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjaHJvbWUucnVudGltZSkge1xuXHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdG9uTWVzc2FnZShtc2cpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHRcdHJldHVybiAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdH1cblx0fVxuXHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS10YWJzXCIpIHtcblx0XHRpZiAodHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjaHJvbWUucnVudGltZSkge1xuXHRcdFx0Y29uc3QgdGFiSWQgPSBvcHRpb25zPy50YWJJZDtcblx0XHRcdGlmICh0YWJJZCAhPSBudWxsKSByZXR1cm4gY3JlYXRlQ2hyb21lVGFic0xpc3RlbmVyKHRhYklkLCAobXNnKSA9PiBvbk1lc3NhZ2UobXNnKSk7XG5cdFx0XHRjb25zdCBsaXN0ZW5lciA9IChtc2cpID0+IHtcblx0XHRcdFx0b25NZXNzYWdlKG1zZyk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdFx0cmV0dXJuICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0fVxuXHR9XG5cdGlmICh0cmFuc3BvcnQgPT09IFwiY2hyb21lLXBvcnRcIikge1xuXHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lKSB7XG5cdFx0XHRjb25zdCBwb3J0TmFtZSA9IG9wdGlvbnM/LnBvcnROYW1lO1xuXHRcdFx0aWYgKHBvcnROYW1lKSB7XG5cdFx0XHRcdGNvbnN0IHBvcnQgPSBjaHJvbWUucnVudGltZS5jb25uZWN0KHsgbmFtZTogcG9ydE5hbWUgfSk7XG5cdFx0XHRcdHBvcnQub25NZXNzYWdlLmFkZExpc3RlbmVyKG9uTWVzc2FnZSk7XG5cdFx0XHRcdHBvcnQub25EaXNjb25uZWN0LmFkZExpc3RlbmVyKGNsb3NlSGFuZGxlcik7XG5cdFx0XHRcdHJldHVybiAoKSA9PiBwb3J0LmRpc2Nvbm5lY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKHRyYW5zcG9ydCA9PT0gXCJjaHJvbWUtZXh0ZXJuYWxcIikge1xuXHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lPy5vbk1lc3NhZ2VFeHRlcm5hbCkge1xuXHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdG9uTWVzc2FnZShtc2cpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlRXh0ZXJuYWwuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdFx0cmV0dXJuICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHR9XG5cdH1cblx0aWYgKHRyYW5zcG9ydCA9PT0gXCJzZXJ2aWNlLXdvcmtlci1jbGllbnRcIikge1xuXHRcdGlmIChcInNlcnZpY2VXb3JrZXJcIiBpbiBuYXZpZ2F0b3IpIHtcblx0XHRcdG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0cmV0dXJuICgpID0+IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdH1cblx0fVxuXHRpZiAodHJhbnNwb3J0ID09PSBcInNlcnZpY2Utd29ya2VyLWhvc3RcIiB8fCB0cmFuc3BvcnQgPT09IFwic2VsZlwiKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHRjb25zdCBjbGllbnRJZCA9IHRyYW5zcG9ydCA9PT0gXCJzZXJ2aWNlLXdvcmtlci1ob3N0XCIgPyBlLnNvdXJjZT8uaWQgOiB2b2lkIDA7XG5cdFx0XHRvbk1lc3NhZ2UoY2xpZW50SWQgPyB7XG5cdFx0XHRcdC4uLmUuZGF0YSxcblx0XHRcdFx0X2NsaWVudElkOiBjbGllbnRJZFxuXHRcdFx0fSA6IGUuZGF0YSk7XG5cdFx0fTtcblx0XHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuXHRcdHJldHVybiAoKSA9PiBzZWxmLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuXHR9XG5cdHJldHVybiAoKSA9PiB7fTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNocm9tZUxpc3RlbmVyKG9uTWVzc2FnZSwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybiAoKSA9PiB7fTtcblx0Y29uc3QgbGlzdGVuZXIgPSAobWVzc2FnZSwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpID0+IG9uTWVzc2FnZShtZXNzYWdlLCBzZW5kUmVzcG9uc2UsIHNlbmRlcik7XG5cdGlmIChvcHRpb25zPy5leHRlcm5hbCAmJiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbCkge1xuXHRcdGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHRyZXR1cm4gKCkgPT4gY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlRXh0ZXJuYWwucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuXHR9XG5cdGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5hZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdHJldHVybiAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xufVxuZnVuY3Rpb24gY3JlYXRlQ2hyb21lVGFic0xpc3RlbmVyKHRhYklkLCBvbk1lc3NhZ2UpIHtcblx0aWYgKHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS5ydW50aW1lKSByZXR1cm4gKCkgPT4ge307XG5cdGNvbnN0IGxpc3RlbmVyID0gKG1zZywgc2VuZGVyKSA9PiB7XG5cdFx0aWYgKHNlbmRlci50YWI/LmlkID09PSB0YWJJZCkgb25NZXNzYWdlKG1zZywgc2VuZGVyKTtcblx0fTtcblx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0cmV0dXJuICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG59XG5mdW5jdGlvbiBjcmVhdGVXZWJTb2NrZXRUcmFuc3BvcnQodXJsLCBvcHRpb25zID0ge30pIHtcblx0bGV0IHNvY2tldCA9IG5ldyBXZWJTb2NrZXQodXJsLCBvcHRpb25zLnByb3RvY29scyk7XG5cdGlmIChvcHRpb25zLmJpbmFyeVR5cGUpIHNvY2tldC5iaW5hcnlUeXBlID0gb3B0aW9ucy5iaW5hcnlUeXBlO1xuXHRsZXQgcmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuXHRsZXQgcmVjb25uZWN0VGltZXIgPSBudWxsO1xuXHRjb25zdCBzZW5kID0gKG1zZywgdHJhbnNmZXIpID0+IHtcblx0XHRpZiAoc29ja2V0LnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5PUEVOKSByZXR1cm47XG5cdFx0aWYgKG1zZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhtc2cpKSBzb2NrZXQuc2VuZChtc2cpO1xuXHRcdGVsc2Ugc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkobXNnKSk7XG5cdH07XG5cdGNvbnN0IHJlY29ubmVjdCA9ICgpID0+IHtcblx0XHRpZiAocmVjb25uZWN0QXR0ZW1wdHMgPj0gKG9wdGlvbnMubWF4UmVjb25uZWN0QXR0ZW1wdHMgPz8gNSkpIHJldHVybjtcblx0XHRyZWNvbm5lY3RBdHRlbXB0cysrO1xuXHRcdHNvY2tldCA9IG5ldyBXZWJTb2NrZXQodXJsLCBvcHRpb25zLnByb3RvY29scyk7XG5cdFx0aWYgKG9wdGlvbnMuYmluYXJ5VHlwZSkgc29ja2V0LmJpbmFyeVR5cGUgPSBvcHRpb25zLmJpbmFyeVR5cGU7XG5cdH07XG5cdGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuXHRcdGlmIChyZWNvbm5lY3RUaW1lcikgY2xlYXJUaW1lb3V0KHJlY29ubmVjdFRpbWVyKTtcblx0XHRzb2NrZXQuY2xvc2UoKTtcblx0fTtcblx0aWYgKG9wdGlvbnMucmVjb25uZWN0KSBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcihcImNsb3NlXCIsICgpID0+IHtcblx0XHRyZWNvbm5lY3RUaW1lciA9IHNldFRpbWVvdXQocmVjb25uZWN0LCBvcHRpb25zLnJlY29ubmVjdEludGVydmFsID8/IDNlMyk7XG5cdH0pO1xuXHRyZXR1cm4ge1xuXHRcdHNvY2tldCxcblx0XHRzZW5kLFxuXHRcdGxpc3RlbjogKGhhbmRsZXIpID0+IHtcblx0XHRcdGNvbnN0IGggPSAoZSkgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIGUuZGF0YSA9PT0gXCJzdHJpbmdcIikgdHJ5IHtcblx0XHRcdFx0XHRoYW5kbGVyKEpTT04ucGFyc2UoZS5kYXRhKSk7XG5cdFx0XHRcdH0gY2F0Y2gge31cblx0XHRcdFx0ZWxzZSBoYW5kbGVyKGUuZGF0YSk7XG5cdFx0XHR9O1xuXHRcdFx0c29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGgpO1xuXHRcdFx0cmV0dXJuICgpID0+IHNvY2tldC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoKTtcblx0XHR9LFxuXHRcdHJlY29ubmVjdCxcblx0XHRjbG9zZVxuXHR9O1xufVxuZnVuY3Rpb24gY3JlYXRlQnJvYWRjYXN0VHJhbnNwb3J0KGNoYW5uZWxOYW1lKSB7XG5cdGNvbnN0IGNoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbChjaGFubmVsTmFtZSk7XG5cdHJldHVybiB7XG5cdFx0Y2hhbm5lbCxcblx0XHRzZW5kOiAobXNnKSA9PiBjaGFubmVsLnBvc3RNZXNzYWdlKG1zZyksXG5cdFx0bGlzdGVuOiAoaGFuZGxlcikgPT4ge1xuXHRcdFx0Y29uc3QgaCA9IChlKSA9PiBoYW5kbGVyKGUuZGF0YSk7XG5cdFx0XHRjaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGgpO1xuXHRcdFx0cmV0dXJuICgpID0+IGNoYW5uZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaCk7XG5cdFx0fSxcblx0XHRjbG9zZTogKCkgPT4gY2hhbm5lbC5jbG9zZSgpXG5cdH07XG59XG52YXIgVHJhbnNwb3J0Q29yZUZhY3RvcnkgPSB7XG5cdGNyZWF0ZVNlbmRlcjogY3JlYXRlVHJhbnNwb3J0U2VuZGVyLFxuXHRjcmVhdGVMaXN0ZW5lcjogY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIsXG5cdGRldGVjdFR5cGU6IGRldGVjdFRyYW5zcG9ydFR5cGUkMSxcblx0Z2V0TWV0YTogZ2V0VHJhbnNwb3J0TWV0YSxcblx0Y2hyb21lOiB7XG5cdFx0Y3JlYXRlTGlzdGVuZXI6IGNyZWF0ZUNocm9tZUxpc3RlbmVyLFxuXHRcdGNyZWF0ZVRhYnNMaXN0ZW5lcjogY3JlYXRlQ2hyb21lVGFic0xpc3RlbmVyXG5cdH0sXG5cdHdlYnNvY2tldDogY3JlYXRlV2ViU29ja2V0VHJhbnNwb3J0LFxuXHRicm9hZGNhc3Q6IGNyZWF0ZUJyb2FkY2FzdFRyYW5zcG9ydFxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvb2JzZXJ2YWJsZS9PYnNlcnZhYmxlLnRzXG52YXIgQmFzZVN1YnNjcmlwdGlvbiA9IGNsYXNzIHtcblx0X3Vuc3Vic2NyaWJlO1xuXHRfY2xvc2VkID0gZmFsc2U7XG5cdGNvbnN0cnVjdG9yKF91bnN1YnNjcmliZSkge1xuXHRcdHRoaXMuX3Vuc3Vic2NyaWJlID0gX3Vuc3Vic2NyaWJlO1xuXHR9XG5cdGdldCBjbG9zZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nsb3NlZDtcblx0fVxuXHR1bnN1YnNjcmliZSgpIHtcblx0XHRpZiAoIXRoaXMuX2Nsb3NlZCkge1xuXHRcdFx0dGhpcy5fY2xvc2VkID0gdHJ1ZTtcblx0XHRcdHRoaXMuX3Vuc3Vic2NyaWJlKCk7XG5cdFx0fVxuXHR9XG59O1xudmFyIE9ic2VydmFibGUgPSBjbGFzcyB7XG5cdF9wcm9kdWNlcjtcblx0Y29uc3RydWN0b3IoX3Byb2R1Y2VyKSB7XG5cdFx0dGhpcy5fcHJvZHVjZXIgPSBfcHJvZHVjZXI7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyT3JOZXh0LCBvcHRzKSB7XG5cdFx0Y29uc3Qgb2JzZXJ2ZXIgPSB0eXBlb2Ygb2JzZXJ2ZXJPck5leHQgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXJPck5leHQgfSA6IG9ic2VydmVyT3JOZXh0ID8/IHt9O1xuXHRcdGNvbnN0IGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cdFx0b3B0cz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gY3RybC5hYm9ydCgpKTtcblx0XHRsZXQgYWN0aXZlID0gdHJ1ZTtcblx0XHRsZXQgY2xlYW51cDtcblx0XHRjb25zdCBkb0NsZWFudXAgPSAoKSA9PiB7XG5cdFx0XHRhY3RpdmUgPSBmYWxzZTtcblx0XHRcdGN0cmwuYWJvcnQoKTtcblx0XHRcdGNsZWFudXA/LigpO1xuXHRcdH07XG5cdFx0Y29uc3Qgc3Vic2NyaWJlciA9IHtcblx0XHRcdG5leHQ6ICh2KSA9PiBhY3RpdmUgJiYgb2JzZXJ2ZXIubmV4dD8uKHYpLFxuXHRcdFx0ZXJyb3I6IChlKSA9PiB7XG5cdFx0XHRcdGlmIChhY3RpdmUpIHtcblx0XHRcdFx0XHRvYnNlcnZlci5lcnJvcj8uKGUpO1xuXHRcdFx0XHRcdGRvQ2xlYW51cCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Y29tcGxldGU6ICgpID0+IHtcblx0XHRcdFx0aWYgKGFjdGl2ZSkge1xuXHRcdFx0XHRcdG9ic2VydmVyLmNvbXBsZXRlPy4oKTtcblx0XHRcdFx0XHRkb0NsZWFudXAoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHNpZ25hbDogY3RybC5zaWduYWwsXG5cdFx0XHRnZXQgYWN0aXZlKCkge1xuXHRcdFx0XHRyZXR1cm4gYWN0aXZlICYmICFjdHJsLnNpZ25hbC5hYm9ydGVkO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dHJ5IHtcblx0XHRcdGNsZWFudXAgPSB0aGlzLl9wcm9kdWNlcihzdWJzY3JpYmVyKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRzdWJzY3JpYmVyLmVycm9yKGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IEJhc2VTdWJzY3JpcHRpb24oZG9DbGVhbnVwKTtcblx0fVxuXHRwaXBlKC4uLm9wcykge1xuXHRcdHJldHVybiBvcHMucmVkdWNlKChzLCBvcCkgPT4gb3AocyksIHRoaXMpO1xuXHR9XG59O1xudmFyIENoYW5uZWxTdWJqZWN0ID0gY2xhc3Mge1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9idWZmZXIgPSBbXTtcblx0X21heEJ1ZmZlcjtcblx0X3JlcGxheTtcblx0Y29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG5cdFx0dGhpcy5fbWF4QnVmZmVyID0gb3B0aW9ucy5idWZmZXJTaXplID8/IDA7XG5cdFx0dGhpcy5fcmVwbGF5ID0gb3B0aW9ucy5yZXBsYXlPblN1YnNjcmliZSA/PyBmYWxzZTtcblx0fVxuXHRuZXh0KHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuX21heEJ1ZmZlciA+IDApIHtcblx0XHRcdHRoaXMuX2J1ZmZlci5wdXNoKHZhbHVlKTtcblx0XHRcdGlmICh0aGlzLl9idWZmZXIubGVuZ3RoID4gdGhpcy5fbWF4QnVmZmVyKSB0aGlzLl9idWZmZXIuc2hpZnQoKTtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRzLm5leHQ/Lih2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdH1cblx0fVxuXHRlcnJvcihlcnIpIHtcblx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5lcnJvcj8uKGVycik7XG5cdH1cblx0Y29tcGxldGUoKSB7XG5cdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuY29tcGxldGU/LigpO1xuXHRcdHRoaXMuX3N1YnMuY2xlYXIoKTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXJPck5leHQpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXJPck5leHQgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXJPck5leHQgfSA6IG9ic2VydmVyT3JOZXh0O1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0aWYgKHRoaXMuX3JlcGxheSkgZm9yIChjb25zdCB2IG9mIHRoaXMuX2J1ZmZlcikgdHJ5IHtcblx0XHRcdG9icy5uZXh0Py4odik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0b2JzLmVycm9yPy4oZSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgQmFzZVN1YnNjcmlwdGlvbigoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdH0pO1xuXHR9XG5cdGdldFZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLl9idWZmZXIuYXQoLTEpO1xuXHR9XG5cdGdldEJ1ZmZlcigpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2J1ZmZlcl07XG5cdH1cblx0Z2V0IHN1YnNjcmliZXJDb3VudCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3Vicy5zaXplO1xuXHR9XG59O1xudmFyIFJlcGxheUNoYW5uZWxTdWJqZWN0ID0gY2xhc3MgZXh0ZW5kcyBDaGFubmVsU3ViamVjdCB7XG5cdGNvbnN0cnVjdG9yKGJ1ZmZlclNpemUgPSAxKSB7XG5cdFx0c3VwZXIoe1xuXHRcdFx0YnVmZmVyU2l6ZSxcblx0XHRcdHJlcGxheU9uU3Vic2NyaWJlOiB0cnVlXG5cdFx0fSk7XG5cdH1cbn07XG52YXIgQ2hhbm5lbE9ic2VydmFibGUgPSBjbGFzcyB7XG5cdF90cmFuc3BvcnQ7XG5cdF9jaGFubmVsTmFtZTtcblx0X3NlbmQ7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9saXN0ZW5pbmcgPSBmYWxzZTtcblx0Y29uc3RydWN0b3IoX3RyYW5zcG9ydCwgX2NoYW5uZWxOYW1lKSB7XG5cdFx0dGhpcy5fdHJhbnNwb3J0ID0gX3RyYW5zcG9ydDtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKF90cmFuc3BvcnQpO1xuXHR9XG5cdG5leHQobXNnLCB0cmFuc2Zlcikge1xuXHRcdHRoaXMuX3NlbmQobXNnLCB0cmFuc2Zlcik7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdGlmICghdGhpcy5fbGlzdGVuaW5nKSB0aGlzLl9hY3RpdmF0ZSgpO1xuXHRcdHJldHVybiBuZXcgQmFzZVN1YnNjcmlwdGlvbigoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCkgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHRcdH0pO1xuXHR9XG5cdHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdCxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMubmV4dCh7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWRcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdF9oYW5kbGUoZGF0YSkge1xuXHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRpZiAocCkge1xuXHRcdFx0XHRwLnJlc29sdmUoZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUoZGF0YS5yZXFJZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0cy5uZXh0Py4oZGF0YSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdH1cblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0aGlzLl90cmFuc3BvcnQsIChkKSA9PiB0aGlzLl9oYW5kbGUoZCksIChlKSA9PiB0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuZXJyb3I/LihlKSksICgpID0+IHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG5cdF9kZWFjdGl2YXRlKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBudWxsO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IGZhbHNlO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpO1xuXHRcdHRoaXMuX3N1YnMuY2xlYXIoKTtcblx0XHR0aGlzLl9kZWFjdGl2YXRlKCk7XG5cdH1cblx0Z2V0IGNoYW5uZWxOYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsTmFtZTtcblx0fVxuXHRnZXQgaXNMaXN0ZW5pbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xpc3RlbmluZztcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUludm9rZXJPYnNlcnZhYmxlKHRyYW5zcG9ydCwgY2hhbm5lbE5hbWUsIGhhbmRsZXIpIHtcblx0Y29uc3Qgc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0cmFuc3BvcnQpO1xuXHRyZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcblx0XHRjb25zdCBvbk1lc3NhZ2UgPSAoZGF0YSkgPT4ge1xuXHRcdFx0aWYgKCFzdWJzY3JpYmVyLmFjdGl2ZSkgcmV0dXJuO1xuXHRcdFx0Y29uc3QgcmVzcG9uZCA9IChyZXN1bHQsIHRyYW5zZmVyKSA9PiB7XG5cdFx0XHRcdHNlbmQoe1xuXHRcdFx0XHRcdC4uLnJlc3VsdCxcblx0XHRcdFx0XHRjaGFubmVsOiBkYXRhLnNlbmRlcixcblx0XHRcdFx0XHRzZW5kZXI6IGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdFx0XHRyZXFJZDogZGF0YS5yZXFJZFxuXHRcdFx0XHR9LCB0cmFuc2Zlcik7XG5cdFx0XHR9O1xuXHRcdFx0aGFuZGxlciA/IGhhbmRsZXIoZGF0YSwgcmVzcG9uZCwgc3Vic2NyaWJlcikgOiBzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG5cdFx0fTtcblx0XHRyZXR1cm4gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodHJhbnNwb3J0LCBvbk1lc3NhZ2UsIChlKSA9PiBzdWJzY3JpYmVyLmVycm9yKGUpLCAoKSA9PiBzdWJzY3JpYmVyLmNvbXBsZXRlKCkpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJlZmxlY3RIYW5kbGVyKGNoYW5uZWxOYW1lKSB7XG5cdHJldHVybiBhc3luYyAoZGF0YSwgcmVzcG9uZCwgc3Vic2NyaWJlcikgPT4ge1xuXHRcdGlmIChkYXRhLnR5cGUgIT09IFwicmVxdWVzdFwiKSB7XG5cdFx0XHRzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVJlcXVlc3QoZGF0YS5wYXlsb2FkLCBkYXRhLnJlcUlkLCBjaGFubmVsTmFtZSk7XG5cdFx0aWYgKHJlc3VsdCkgcmVzcG9uZChyZXN1bHQucmVzcG9uc2UsIHJlc3VsdC50cmFuc2Zlcik7XG5cdFx0c3Vic2NyaWJlci5uZXh0KGRhdGEpO1xuXHR9O1xufVxudmFyIE1lc3NhZ2VPYnNlcnZhYmxlID0gY2xhc3MgZXh0ZW5kcyBDaGFubmVsU3ViamVjdCB7XG5cdGNvbnN0cnVjdG9yKHNvdXJjZSwgbWVzc2FnZVR5cGUpIHtcblx0XHRzdXBlcigpO1xuXHRcdHNvdXJjZS5zdWJzY3JpYmUoe1xuXHRcdFx0bmV4dDogKG1zZykgPT4ge1xuXHRcdFx0XHRpZiAoIW1lc3NhZ2VUeXBlIHx8IG1zZy50eXBlID09PSBtZXNzYWdlVHlwZSkgdGhpcy5uZXh0KG1zZyk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3I6IChlKSA9PiB0aGlzLmVycm9yKGUpLFxuXHRcdFx0Y29tcGxldGU6ICgpID0+IHRoaXMuY29tcGxldGUoKVxuXHRcdH0pO1xuXHR9XG59O1xudmFyIGZpbHRlciA9IChwcmVkKSA9PiAoc3JjKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdGNvbnN0IHMgPSBzcmMuc3Vic2NyaWJlKHtcblx0XHRuZXh0OiAodikgPT4gcHJlZCh2KSAmJiBzdWIubmV4dCh2KSxcblx0XHRlcnJvcjogKGUpID0+IHN1Yi5lcnJvcihlKSxcblx0XHRjb21wbGV0ZTogKCkgPT4gc3ViLmNvbXBsZXRlKClcblx0fSk7XG5cdHJldHVybiAoKSA9PiBzLnVuc3Vic2NyaWJlKCk7XG59KTtcbnZhciBtYXAgPSAoZm4pID0+IChzcmMpID0+IG5ldyBPYnNlcnZhYmxlKChzdWIpID0+IHtcblx0Y29uc3QgcyA9IHNyYy5zdWJzY3JpYmUoe1xuXHRcdG5leHQ6ICh2KSA9PiBzdWIubmV4dChmbih2KSksXG5cdFx0ZXJyb3I6IChlKSA9PiBzdWIuZXJyb3IoZSksXG5cdFx0Y29tcGxldGU6ICgpID0+IHN1Yi5jb21wbGV0ZSgpXG5cdH0pO1xuXHRyZXR1cm4gKCkgPT4gcy51bnN1YnNjcmliZSgpO1xufSk7XG52YXIgdGFrZSA9IChuKSA9PiAoc3JjKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdGxldCBjID0gMDtcblx0Y29uc3QgcyA9IHNyYy5zdWJzY3JpYmUoe1xuXHRcdG5leHQ6ICh2KSA9PiB7XG5cdFx0XHRpZiAoYysrIDwgbikge1xuXHRcdFx0XHRzdWIubmV4dCh2KTtcblx0XHRcdFx0aWYgKGMgPj0gbikgc3ViLmNvbXBsZXRlKCk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRlcnJvcjogKGUpID0+IHN1Yi5lcnJvcihlKSxcblx0XHRjb21wbGV0ZTogKCkgPT4gc3ViLmNvbXBsZXRlKClcblx0fSk7XG5cdHJldHVybiAoKSA9PiBzLnVuc3Vic2NyaWJlKCk7XG59KTtcbnZhciB0YWtlVW50aWwgPSAoc2lnbmFsKSA9PiAoc3JjKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdGNvbnN0IHNzID0gc3JjLnN1YnNjcmliZSh7XG5cdFx0bmV4dDogKHYpID0+IHN1Yi5uZXh0KHYpLFxuXHRcdGVycm9yOiAoZSkgPT4gc3ViLmVycm9yKGUpLFxuXHRcdGNvbXBsZXRlOiAoKSA9PiBzdWIuY29tcGxldGUoKVxuXHR9KTtcblx0Y29uc3Qgc2lnID0gc2lnbmFsLnN1YnNjcmliZSh7IG5leHQ6ICgpID0+IHN1Yi5jb21wbGV0ZSgpIH0pO1xuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdHNzLnVuc3Vic2NyaWJlKCk7XG5cdFx0c2lnLnVuc3Vic2NyaWJlKCk7XG5cdH07XG59KTtcbnZhciBkZWJvdW5jZSA9IChtcykgPT4gKHNyYykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRsZXQgdDtcblx0Y29uc3QgcyA9IHNyYy5zdWJzY3JpYmUoe1xuXHRcdG5leHQ6ICh2KSA9PiB7XG5cdFx0XHRjbGVhclRpbWVvdXQodCk7XG5cdFx0XHR0ID0gc2V0VGltZW91dCgoKSA9PiBzdWIubmV4dCh2KSwgbXMpO1xuXHRcdH0sXG5cdFx0ZXJyb3I6IChlKSA9PiBzdWIuZXJyb3IoZSksXG5cdFx0Y29tcGxldGU6ICgpID0+IHN1Yi5jb21wbGV0ZSgpXG5cdH0pO1xuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGNsZWFyVGltZW91dCh0KTtcblx0XHRzLnVuc3Vic2NyaWJlKCk7XG5cdH07XG59KTtcbnZhciB0aHJvdHRsZSA9IChtcykgPT4gKHNyYykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRsZXQgbGFzdCA9IDA7XG5cdGNvbnN0IHMgPSBzcmMuc3Vic2NyaWJlKHtcblx0XHRuZXh0OiAodikgPT4ge1xuXHRcdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRcdGlmIChub3cgLSBsYXN0ID49IG1zKSB7XG5cdFx0XHRcdGxhc3QgPSBub3c7XG5cdFx0XHRcdHN1Yi5uZXh0KHYpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZXJyb3I6IChlKSA9PiBzdWIuZXJyb3IoZSksXG5cdFx0Y29tcGxldGU6ICgpID0+IHN1Yi5jb21wbGV0ZSgpXG5cdH0pO1xuXHRyZXR1cm4gKCkgPT4gcy51bnN1YnNjcmliZSgpO1xufSk7XG52YXIgZnJvbUV2ZW50ID0gKHRhcmdldCwgZXZlbnQpID0+IG5ldyBPYnNlcnZhYmxlKChzdWIpID0+IHtcblx0Y29uc3QgaCA9IChlKSA9PiBzdWIuYWN0aXZlICYmIHN1Yi5uZXh0KGUpO1xuXHR0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaCk7XG5cdHJldHVybiAoKSA9PiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaCk7XG59KTtcbnZhciBmcm9tUHJvbWlzZSA9IChwcm9taXNlKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdHByb21pc2UudGhlbigodikgPT4ge1xuXHRcdHN1Yi5uZXh0KHYpO1xuXHRcdHN1Yi5jb21wbGV0ZSgpO1xuXHR9KS5jYXRjaCgoZSkgPT4gc3ViLmVycm9yKGUpKTtcbn0pO1xudmFyIGRlbGF5ID0gKHZhbHVlLCBtcykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRjb25zdCB0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0c3ViLm5leHQodmFsdWUpO1xuXHRcdHN1Yi5jb21wbGV0ZSgpO1xuXHR9LCBtcyk7XG5cdHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodCk7XG59KTtcbnZhciBpbnRlcnZhbCA9IChtcykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRsZXQgbiA9IDA7XG5cdGNvbnN0IHQgPSBzZXRJbnRlcnZhbCgoKSA9PiBzdWIubmV4dChuKyspLCBtcyk7XG5cdHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKHQpO1xufSk7XG52YXIgbWVyZ2UgPSAoLi4uc291cmNlcykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRjb25zdCBzdWJzID0gc291cmNlcy5tYXAoKHMpID0+IHMuc3Vic2NyaWJlKHtcblx0XHRuZXh0OiAodikgPT4gc3ViLm5leHQodiksXG5cdFx0ZXJyb3I6IChlKSA9PiBzdWIuZXJyb3IoZSlcblx0fSkpO1xuXHRyZXR1cm4gKCkgPT4gc3Vicy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xufSk7XG52YXIgY3JlYXRlTWVzc2FnZUlkID0gKCkgPT4gVVVJRHY0KCk7XG52YXIgbWFrZUludm9rZXIgPSAodHJhbnNwb3J0LCBoYW5kbGVyKSA9PiAoc3Vic2NyaWJlcikgPT4ge1xuXHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRyYW5zcG9ydCk7XG5cdGNvbnN0IHJlc3BvbmQgPSAocmVzdWx0LCB0cmFuc2ZlcikgPT4gc2VuZChyZXN1bHQsIHRyYW5zZmVyKTtcblx0cmV0dXJuIGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRyYW5zcG9ydCwgKGRhdGEpID0+IHtcblx0XHRpZiAoIXN1YnNjcmliZXIuYWN0aXZlKSByZXR1cm47XG5cdFx0aGFuZGxlciA/IGhhbmRsZXIoZGF0YSwgcmVzcG9uZCwgc3Vic2NyaWJlcikgOiBzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG5cdH0sIChlcnIpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyKSwgKCkgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpKTtcbn07XG52YXIgbWFrZVdvcmtlckludm9rZXIgPSAod29ya2VyLCBoYW5kbGVyKSA9PiBtYWtlSW52b2tlcih3b3JrZXIsIGhhbmRsZXIpO1xudmFyIG1ha2VNZXNzYWdlUG9ydEludm9rZXIgPSAocG9ydCwgaGFuZGxlcikgPT4gbWFrZUludm9rZXIocG9ydCwgaGFuZGxlcik7XG52YXIgbWFrZUJyb2FkY2FzdEludm9rZXIgPSAobmFtZSwgaGFuZGxlcikgPT4gbWFrZUludm9rZXIobmV3IEJyb2FkY2FzdENoYW5uZWwobmFtZSksIGhhbmRsZXIpO1xudmFyIG1ha2VXZWJTb2NrZXRJbnZva2VyID0gKHVybCwgcHJvdG9jb2xzLCBoYW5kbGVyKSA9PiBtYWtlSW52b2tlcihuZXcgV2ViU29ja2V0KHR5cGVvZiB1cmwgPT09IFwic3RyaW5nXCIgPyB1cmwgOiB1cmwuaHJlZiwgcHJvdG9jb2xzKSwgaGFuZGxlcik7XG52YXIgbWFrZUNocm9tZVJ1bnRpbWVJbnZva2VyID0gKGhhbmRsZXIpID0+IG1ha2VJbnZva2VyKFwiY2hyb21lLXJ1bnRpbWVcIiwgaGFuZGxlcik7XG52YXIgbWFrZVNlcnZpY2VXb3JrZXJDbGllbnRJbnZva2VyID0gKGhhbmRsZXIpID0+IG1ha2VJbnZva2VyKFwic2VydmljZS13b3JrZXItY2xpZW50XCIsIGhhbmRsZXIpO1xudmFyIG1ha2VTZXJ2aWNlV29ya2VySG9zdEludm9rZXIgPSAoaGFuZGxlcikgPT4gbWFrZUludm9rZXIoXCJzZXJ2aWNlLXdvcmtlci1ob3N0XCIsIGhhbmRsZXIpO1xudmFyIG1ha2VTZWxmSW52b2tlciA9IChoYW5kbGVyKSA9PiBtYWtlSW52b2tlcihcInNlbGZcIiwgaGFuZGxlcik7XG5mdW5jdGlvbiBjcmVhdGVCaWRpcmVjdGlvbmFsQ2hhbm5lbCh0cmFuc3BvcnQsIGNoYW5uZWxOYW1lLCBoYW5kbGVyKSB7XG5cdGNvbnN0IHNlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIodHJhbnNwb3J0KTtcblx0Y29uc3QgaW5ib3VuZCA9IG5ldyBPYnNlcnZhYmxlKChzdWIpID0+IG1ha2VJbnZva2VyKHRyYW5zcG9ydCwgaGFuZGxlcikoc3ViKSk7XG5cdHJldHVybiB7XG5cdFx0aW5ib3VuZCxcblx0XHRvdXRib3VuZDogeyBuZXh0OiBzZW5kIH0sXG5cdFx0c3Vic2NyaWJlOiAob2JzKSA9PiBpbmJvdW5kLnN1YnNjcmliZShvYnMpLFxuXHRcdHNlbmQ6ICh2YWx1ZSwgdHJhbnNmZXIpID0+IHNlbmQodmFsdWUsIHRyYW5zZmVyKVxuXHR9O1xufVxuZnVuY3Rpb24gd2hlbih0YXJnZXQsIGV2ZW50TmFtZSkge1xuXHRyZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRcdGNvbnN0IGggPSAoZSkgPT4gc3ViLmFjdGl2ZSAmJiBzdWIubmV4dChlKTtcblx0XHR0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGgpO1xuXHRcdHJldHVybiAoKSA9PiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGgpO1xuXHR9KTtcbn1cbnZhciBPYnNlcnZhYmxlRmFjdG9yeSA9IHtcblx0Y2hhbm5lbDogKHRyYW5zcG9ydCwgbmFtZSkgPT4gbmV3IENoYW5uZWxPYnNlcnZhYmxlKHRyYW5zcG9ydCwgbmFtZSksXG5cdGludm9rZXI6ICh0cmFuc3BvcnQsIG5hbWUsIGhhbmRsZXIpID0+IGNyZWF0ZUludm9rZXJPYnNlcnZhYmxlKHRyYW5zcG9ydCwgbmFtZSwgaGFuZGxlciksXG5cdGhhbmRsZXI6ICh0cmFuc3BvcnQsIG5hbWUpID0+IGNyZWF0ZUludm9rZXJPYnNlcnZhYmxlKHRyYW5zcG9ydCwgbmFtZSwgY3JlYXRlUmVmbGVjdEhhbmRsZXIobmFtZSkpLFxuXHRiaWRpcmVjdGlvbmFsOiBjcmVhdGVCaWRpcmVjdGlvbmFsQ2hhbm5lbCxcblx0ZnJvbUV2ZW50LFxuXHRmcm9tUHJvbWlzZSxcblx0ZGVsYXksXG5cdGludGVydmFsLFxuXHRtZXJnZSxcblx0d2hlblxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvcHJveHkvSW52b2tlci50c1xuZnVuY3Rpb24gZGV0ZWN0Q29udGV4dFR5cGUoKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5EZW5vICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJkZW5vXCI7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbFRoaXMucHJvY2Vzcz8udmVyc2lvbnM/Lm5vZGUpIHJldHVybiBcIm5vZGVcIjtcblx0Y29uc3Qgc2VydmljZVdvcmtlclNjb3BlID0gZ2xvYmFsVGhpcy5TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU7XG5cdGNvbnN0IHNoYXJlZFdvcmtlclNjb3BlID0gZ2xvYmFsVGhpcy5TaGFyZWRXb3JrZXJHbG9iYWxTY29wZTtcblx0Y29uc3QgZGVkaWNhdGVkV29ya2VyU2NvcGUgPSBnbG9iYWxUaGlzLkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlO1xuXHRpZiAoc2VydmljZVdvcmtlclNjb3BlICYmIHNlbGYgaW5zdGFuY2VvZiBzZXJ2aWNlV29ya2VyU2NvcGUpIHJldHVybiBcInNlcnZpY2Utd29ya2VyXCI7XG5cdGlmIChzaGFyZWRXb3JrZXJTY29wZSAmJiBzZWxmIGluc3RhbmNlb2Ygc2hhcmVkV29ya2VyU2NvcGUpIHJldHVybiBcInNoYXJlZC13b3JrZXJcIjtcblx0aWYgKGRlZGljYXRlZFdvcmtlclNjb3BlICYmIHNlbGYgaW5zdGFuY2VvZiBkZWRpY2F0ZWRXb3JrZXJTY29wZSkgcmV0dXJuIFwid29ya2VyXCI7XG5cdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lPy5pZCkge1xuXHRcdGlmICh0eXBlb2YgY2hyb21lLnJ1bnRpbWUuZ2V0QmFja2dyb3VuZFBhZ2UgPT09IFwiZnVuY3Rpb25cIiB8fCAoY2hyb21lLnJ1bnRpbWUuZ2V0TWFuaWZlc3Q/LigpPy5iYWNrZ3JvdW5kKT8uc2VydmljZV93b3JrZXIpIHJldHVybiBcImNocm9tZS1iYWNrZ3JvdW5kXCI7XG5cdFx0aWYgKHR5cGVvZiBjaHJvbWUuZGV2dG9vbHMgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcImNocm9tZS1kZXZ0b29sc1wiO1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsVGhpcz8ubG9jYXRpb24/LnByb3RvY29sID09PSBcImNocm9tZS1leHRlbnNpb246XCIpIHtcblx0XHRcdGlmICgoY2hyb21lLmV4dGVuc2lvbj8uZ2V0Vmlld3M/Lih7IHR5cGU6IFwicG9wdXBcIiB9KSA/PyBbXSkuaW5jbHVkZXMoZ2xvYmFsVGhpcykpIHJldHVybiBcImNocm9tZS1wb3B1cFwiO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbFRoaXM/LmxvY2F0aW9uPy5wcm90b2NvbCAhPT0gXCJjaHJvbWUtZXh0ZW5zaW9uOlwiKSByZXR1cm4gXCJjaHJvbWUtY29udGVudFwiO1xuXHR9XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcIndpbmRvd1wiO1xuXHRyZXR1cm4gXCJ1bmtub3duXCI7XG59XG5mdW5jdGlvbiBkZXRlY3RUcmFuc3BvcnRUeXBlKHNvdXJjZSkge1xuXHRpZiAodHlwZW9mIFJUQ0RhdGFDaGFubmVsICE9PSBcInVuZGVmaW5lZFwiICYmIHNvdXJjZSBpbnN0YW5jZW9mIFJUQ0RhdGFDaGFubmVsKSByZXR1cm4gXCJydGMtZGF0YVwiO1xuXHRjb25zdCBkZXRlY3RlZCA9IGRldGVjdFRyYW5zcG9ydFR5cGUkMShzb3VyY2UpO1xuXHRpZiAoZGV0ZWN0ZWQgJiYgZGV0ZWN0ZWQgIT09IFwiaW50ZXJuYWxcIikgcmV0dXJuIGRldGVjdGVkO1xuXHRpZiAoc291cmNlID09PSBzZWxmIHx8IHNvdXJjZSA9PT0gZ2xvYmFsVGhpcyB8fCBzb3VyY2UgPT09IFwic2VsZlwiKSByZXR1cm4gXCJzZWxmXCI7XG5cdHJldHVybiBcImludGVybmFsXCI7XG59XG5mdW5jdGlvbiBkZXRlY3RJbmNvbWluZ0NvbnRleHRUeXBlKGRhdGEpIHtcblx0aWYgKCFkYXRhKSByZXR1cm4gXCJ1bmtub3duXCI7XG5cdGlmIChkYXRhLmNvbnRleHRUeXBlKSByZXR1cm4gZGF0YS5jb250ZXh0VHlwZTtcblx0Y29uc3Qgc2VuZGVyID0gZGF0YS5zZW5kZXIgPz8gXCJcIjtcblx0aWYgKHNlbmRlci5pbmNsdWRlcyhcIndvcmtlclwiKSkgcmV0dXJuIFwid29ya2VyXCI7XG5cdGlmIChzZW5kZXIuaW5jbHVkZXMoXCJzd1wiKSB8fCBzZW5kZXIuaW5jbHVkZXMoXCJzZXJ2aWNlXCIpKSByZXR1cm4gXCJzZXJ2aWNlLXdvcmtlclwiO1xuXHRpZiAoc2VuZGVyLmluY2x1ZGVzKFwiY2hyb21lXCIpIHx8IHNlbmRlci5pbmNsdWRlcyhcImNyeFwiKSkgcmV0dXJuIFwiY2hyb21lLWNvbnRlbnRcIjtcblx0aWYgKHNlbmRlci5pbmNsdWRlcyhcImJhY2tncm91bmRcIikpIHJldHVybiBcImNocm9tZS1iYWNrZ3JvdW5kXCI7XG5cdHJldHVybiBcInVua25vd25cIjtcbn1cbnZhciBEZWZhdWx0UmVmbGVjdCA9IHtcblx0Z2V0OiAodGFyZ2V0LCBwcm9wKSA9PiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3ApLFxuXHRzZXQ6ICh0YXJnZXQsIHByb3AsIHZhbHVlKSA9PiBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3AsIHZhbHVlKSxcblx0aGFzOiAodGFyZ2V0LCBwcm9wKSA9PiBSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3ApLFxuXHRhcHBseTogKHRhcmdldCwgdGhpc0FyZywgYXJncykgPT4gUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmcsIGFyZ3MpLFxuXHRjb25zdHJ1Y3Q6ICh0YXJnZXQsIGFyZ3MpID0+IFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJncyksXG5cdGRlbGV0ZVByb3BlcnR5OiAodGFyZ2V0LCBwcm9wKSA9PiBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCksXG5cdG93bktleXM6ICh0YXJnZXQpID0+IFJlZmxlY3Qub3duS2V5cyh0YXJnZXQpLFxuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICh0YXJnZXQsIHByb3ApID0+IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcCksXG5cdGdldFByb3RvdHlwZU9mOiAodGFyZ2V0KSA9PiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCksXG5cdHNldFByb3RvdHlwZU9mOiAodGFyZ2V0LCBwcm90bykgPT4gUmVmbGVjdC5zZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSxcblx0aXNFeHRlbnNpYmxlOiAodGFyZ2V0KSA9PiBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpLFxuXHRwcmV2ZW50RXh0ZW5zaW9uczogKHRhcmdldCkgPT4gUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG59O1xudmFyIFJlcXVlc3RvciA9IGNsYXNzIHtcblx0X2NoYW5uZWw7XG5cdF9jb250ZXh0VHlwZTtcblx0Y29uc3RydWN0b3IoY29uZmlnKSB7XG5cdFx0dGhpcy5fY29udGV4dFR5cGUgPSBjb25maWcuYXV0b0RldGVjdCAhPT0gZmFsc2UgPyBkZXRlY3RDb250ZXh0VHlwZSgpIDogXCJ1bmtub3duXCI7XG5cdFx0dGhpcy5fY2hhbm5lbCA9IGNyZWF0ZVVuaWZpZWRDaGFubmVsKHtcblx0XHRcdG5hbWU6IGNvbmZpZy5jaGFubmVsLFxuXHRcdFx0dGltZW91dDogY29uZmlnLnRpbWVvdXQsXG5cdFx0XHRhdXRvTGlzdGVuOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cdGNvbm5lY3QodGFyZ2V0LCBvcHRpb25zKSB7XG5cdFx0dGhpcy5fY2hhbm5lbC5jb25uZWN0KHRhcmdldCwgb3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0aW52b2tlKHRhcmdldENoYW5uZWwsIGFjdGlvbiwgcGF0aCwgYXJncyA9IFtdKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuaW52b2tlKHRhcmdldENoYW5uZWwsIGFjdGlvbiwgcGF0aCwgYXJncyk7XG5cdH1cblx0Z2V0KHRhcmdldENoYW5uZWwsIHBhdGgsIHByb3ApIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbC5nZXQodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgcHJvcCk7XG5cdH1cblx0c2V0KHRhcmdldENoYW5uZWwsIHBhdGgsIHByb3AsIHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuc2V0KHRhcmdldENoYW5uZWwsIHBhdGgsIHByb3AsIHZhbHVlKTtcblx0fVxuXHRjYWxsKHRhcmdldENoYW5uZWwsIHBhdGgsIGFyZ3MgPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsLmNhbGwodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgYXJncyk7XG5cdH1cblx0Y29uc3RydWN0KHRhcmdldENoYW5uZWwsIHBhdGgsIGFyZ3MgPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsLmNvbnN0cnVjdCh0YXJnZXRDaGFubmVsLCBwYXRoLCBhcmdzKTtcblx0fVxuXHRpbXBvcnRNb2R1bGUodGFyZ2V0Q2hhbm5lbCwgdXJsKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuaW1wb3J0KHVybCwgdGFyZ2V0Q2hhbm5lbCk7XG5cdH1cblx0Y3JlYXRlUHJveHkodGFyZ2V0Q2hhbm5lbCwgYmFzZVBhdGggPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsLnByb3h5KHRhcmdldENoYW5uZWwsIGJhc2VQYXRoKTtcblx0fVxuXHRnZXQgb25SZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbC5vblJlc3BvbnNlO1xuXHR9XG5cdGdldCBjb250ZXh0VHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dFR5cGU7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fY2hhbm5lbC5jbG9zZSgpO1xuXHR9XG59O1xudmFyIFJlc3BvbmRlciA9IGNsYXNzIHtcblx0X2NoYW5uZWw7XG5cdF9jb250ZXh0VHlwZTtcblx0Y29uc3RydWN0b3IoY29uZmlnKSB7XG5cdFx0dGhpcy5fY29udGV4dFR5cGUgPSBjb25maWcuYXV0b0RldGVjdCAhPT0gZmFsc2UgPyBkZXRlY3RDb250ZXh0VHlwZSgpIDogXCJ1bmtub3duXCI7XG5cdFx0dGhpcy5fY2hhbm5lbCA9IGNyZWF0ZVVuaWZpZWRDaGFubmVsKHtcblx0XHRcdG5hbWU6IGNvbmZpZy5jaGFubmVsLFxuXHRcdFx0dGltZW91dDogY29uZmlnLnRpbWVvdXQsXG5cdFx0XHRhdXRvTGlzdGVuOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cdGxpc3Rlbihzb3VyY2UsIG9wdGlvbnMpIHtcblx0XHR0aGlzLl9jaGFubmVsLmxpc3Rlbihzb3VyY2UsIG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGV4cG9zZShuYW1lLCBvYmopIHtcblx0XHR0aGlzLl9jaGFubmVsLmV4cG9zZShuYW1lLCBvYmopO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGdldCBvbkludm9jYXRpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwub25JbnZvY2F0aW9uO1xuXHR9XG5cdHN1YnNjcmliZUludm9jYXRpb25zKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbC5vbkludm9jYXRpb24uc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdGdldCBjb250ZXh0VHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dFR5cGU7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fY2hhbm5lbC5jbG9zZSgpO1xuXHR9XG59O1xudmFyIEJpZGlyZWN0aW9uYWxJbnZva2VyID0gY2xhc3Mge1xuXHRyZXF1ZXN0b3I7XG5cdHJlc3BvbmRlcjtcblx0X2NvbnRleHRUeXBlO1xuXHRjb25zdHJ1Y3Rvcihjb25maWcpIHtcblx0XHR0aGlzLl9jb250ZXh0VHlwZSA9IGNvbmZpZy5hdXRvRGV0ZWN0ICE9PSBmYWxzZSA/IGRldGVjdENvbnRleHRUeXBlKCkgOiBcInVua25vd25cIjtcblx0XHR0aGlzLnJlcXVlc3RvciA9IG5ldyBSZXF1ZXN0b3IoY29uZmlnKTtcblx0XHR0aGlzLnJlc3BvbmRlciA9IG5ldyBSZXNwb25kZXIoY29uZmlnKTtcblx0fVxuXHRjb25uZWN0KHRhcmdldCkge1xuXHRcdHRoaXMucmVxdWVzdG9yLmNvbm5lY3QodGFyZ2V0KTtcblx0XHR0aGlzLnJlc3BvbmRlci5saXN0ZW4odGFyZ2V0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRleHBvc2UobmFtZSwgb2JqKSB7XG5cdFx0dGhpcy5yZXNwb25kZXIuZXhwb3NlKG5hbWUsIG9iaik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0Y3JlYXRlUHJveHkodGFyZ2V0Q2hhbm5lbCwgYmFzZVBhdGggPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLnJlcXVlc3Rvci5jcmVhdGVQcm94eSh0YXJnZXRDaGFubmVsLCBiYXNlUGF0aCk7XG5cdH1cblx0aW1wb3J0TW9kdWxlKHRhcmdldENoYW5uZWwsIHVybCkge1xuXHRcdHJldHVybiB0aGlzLnJlcXVlc3Rvci5pbXBvcnRNb2R1bGUodGFyZ2V0Q2hhbm5lbCwgdXJsKTtcblx0fVxuXHRnZXQgY29udGV4dFR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHRUeXBlO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMucmVxdWVzdG9yLmNsb3NlKCk7XG5cdFx0dGhpcy5yZXNwb25kZXIuY2xvc2UoKTtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RvcihjaGFubmVsLCBjb25maWcpIHtcblx0cmV0dXJuIG5ldyBSZXF1ZXN0b3Ioe1xuXHRcdGNoYW5uZWwsXG5cdFx0Li4uY29uZmlnXG5cdH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlUmVzcG9uZGVyKGNoYW5uZWwsIGNvbmZpZykge1xuXHRyZXR1cm4gbmV3IFJlc3BvbmRlcih7XG5cdFx0Y2hhbm5lbCxcblx0XHQuLi5jb25maWdcblx0fSk7XG59XG5mdW5jdGlvbiBjcmVhdGVJbnZva2VyKGNoYW5uZWwsIGNvbmZpZykge1xuXHRyZXR1cm4gbmV3IEJpZGlyZWN0aW9uYWxJbnZva2VyKHtcblx0XHRjaGFubmVsLFxuXHRcdC4uLmNvbmZpZ1xuXHR9KTtcbn1cbmZ1bmN0aW9uIHNldHVwSW52b2tlcihjaGFubmVsLCB0YXJnZXQsIGNvbmZpZykge1xuXHRyZXR1cm4gY3JlYXRlSW52b2tlcihjaGFubmVsLCBjb25maWcpLmNvbm5lY3QodGFyZ2V0KTtcbn1cbmZ1bmN0aW9uIGF1dG9JbnZva2VyKGNoYW5uZWwsIGNvbmZpZykge1xuXHRjb25zdCBpbnZva2VyID0gY3JlYXRlSW52b2tlcihjaGFubmVsLCB7XG5cdFx0YXV0b0RldGVjdDogdHJ1ZSxcblx0XHQuLi5jb25maWdcblx0fSk7XG5cdHN3aXRjaCAoZGV0ZWN0Q29udGV4dFR5cGUoKSkge1xuXHRcdGNhc2UgXCJ3b3JrZXJcIjpcblx0XHRjYXNlIFwic2VydmljZS13b3JrZXJcIjpcblx0XHRjYXNlIFwic2hhcmVkLXdvcmtlclwiOlxuXHRcdFx0aW52b2tlci5jb25uZWN0KHNlbGYpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImNocm9tZS1jb250ZW50XCI6XG5cdFx0Y2FzZSBcImNocm9tZS1iYWNrZ3JvdW5kXCI6XG5cdFx0Y2FzZSBcImNocm9tZS1wb3B1cFwiOiBpbnZva2VyLmNvbm5lY3QoXCJjaHJvbWUtcnVudGltZVwiKTtcblx0fVxuXHRyZXR1cm4gaW52b2tlcjtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvcHJveHkvUHJveHkudHNcbnZhciBQUk9YWV9NQVJLRVIgPSBTeW1ib2wuZm9yKFwidW5pZm9ybS5wcm94eVwiKTtcbnZhciBQUk9YWV9JTlRFUk5BTFMgPSBTeW1ib2wuZm9yKFwidW5pZm9ybS5wcm94eS5pbnRlcm5hbHNcIik7XG52YXIgUmVtb3RlUHJveHlIYW5kbGVyID0gY2xhc3Mge1xuXHRfaW52b2tlcjtcblx0X2NvbmZpZztcblx0X2NoaWxkQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjb25zdHJ1Y3RvcihfaW52b2tlciwgY29uZmlnKSB7XG5cdFx0dGhpcy5faW52b2tlciA9IF9pbnZva2VyO1xuXHRcdHRoaXMuX2NvbmZpZyA9IHtcblx0XHRcdGNoYW5uZWw6IGNvbmZpZy5jaGFubmVsLFxuXHRcdFx0YmFzZVBhdGg6IGNvbmZpZy5iYXNlUGF0aCA/PyBbXSxcblx0XHRcdGludm9rZXI6IF9pbnZva2VyLFxuXHRcdFx0Y2FjaGU6IGNvbmZpZy5jYWNoZSA/PyB0cnVlLFxuXHRcdFx0dGltZW91dDogY29uZmlnLnRpbWVvdXQgPz8gM2U0XG5cdFx0fTtcblx0fVxuXHRnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuXHRcdGNvbnN0IHByb3BTdHIgPSBTdHJpbmcocHJvcCk7XG5cdFx0aWYgKHByb3AgPT09IFBST1hZX01BUktFUikgcmV0dXJuIHRydWU7XG5cdFx0aWYgKHByb3AgPT09IFBST1hZX0lOVEVSTkFMUykgcmV0dXJuIHRoaXMuX2NvbmZpZztcblx0XHRpZiAocHJvcCA9PT0gJHJlcXVlc3RIYW5kbGVyKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAocHJvcCA9PT0gJGRlc2NyaXB0b3IpIHJldHVybiB0aGlzLl9nZXREZXNjcmlwdG9yKCk7XG5cdFx0aWYgKHByb3AgPT09IFwidGhlblwiIHx8IHByb3AgPT09IFwiY2F0Y2hcIiB8fCBwcm9wID09PSBcImZpbmFsbHlcIikgcmV0dXJuIHZvaWQgMDtcblx0XHRpZiAodHlwZW9mIHByb3AgPT09IFwic3ltYm9sXCIpIHJldHVybiB2b2lkIDA7XG5cdFx0aWYgKHByb3AgPT09IFwiJHBhdGhcIikgcmV0dXJuIHRoaXMuX2NvbmZpZy5iYXNlUGF0aDtcblx0XHRpZiAocHJvcCA9PT0gXCIkY2hhbm5lbFwiKSByZXR1cm4gdGhpcy5fY29uZmlnLmNoYW5uZWw7XG5cdFx0aWYgKHByb3AgPT09IFwiJGRlc2NyaXB0b3JcIikgcmV0dXJuIHRoaXMuX2dldERlc2NyaXB0b3IoKTtcblx0XHRpZiAocHJvcCA9PT0gXCIkaW52b2tlXCIpIHJldHVybiB0aGlzLl9pbnZva2VyO1xuXHRcdGNvbnN0IGNoaWxkUGF0aCA9IFsuLi50aGlzLl9jb25maWcuYmFzZVBhdGgsIHByb3BTdHJdO1xuXHRcdGlmICh0aGlzLl9jb25maWcuY2FjaGUgJiYgdGhpcy5fY2hpbGRDYWNoZS5oYXMocHJvcFN0cikpIHJldHVybiB0aGlzLl9jaGlsZENhY2hlLmdldChwcm9wU3RyKTtcblx0XHRjb25zdCBjaGlsZFByb3h5ID0gY3JlYXRlUmVtb3RlUHJveHkodGhpcy5faW52b2tlciwge1xuXHRcdFx0Li4udGhpcy5fY29uZmlnLFxuXHRcdFx0YmFzZVBhdGg6IGNoaWxkUGF0aFxuXHRcdH0pO1xuXHRcdGlmICh0aGlzLl9jb25maWcuY2FjaGUpIHRoaXMuX2NoaWxkQ2FjaGUuc2V0KHByb3BTdHIsIGNoaWxkUHJveHkpO1xuXHRcdHJldHVybiBjaGlsZFByb3h5O1xuXHR9XG5cdHNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcikge1xuXHRcdGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIHRydWU7XG5cdFx0dGhpcy5faW52b2tlcihXUmVmbGVjdEFjdGlvbi5TRVQsIFsuLi50aGlzLl9jb25maWcuYmFzZVBhdGgsIFN0cmluZyhwcm9wKV0sIFt2YWx1ZV0pO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGFwcGx5KHRhcmdldCwgdGhpc0FyZywgYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9pbnZva2VyKFdSZWZsZWN0QWN0aW9uLkFQUExZLCB0aGlzLl9jb25maWcuYmFzZVBhdGgsIFthcmdzXSk7XG5cdH1cblx0Y29uc3RydWN0KHRhcmdldCwgYXJncywgbmV3VGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ludm9rZXIoV1JlZmxlY3RBY3Rpb24uQ09OU1RSVUNULCB0aGlzLl9jb25maWcuYmFzZVBhdGgsIFthcmdzXSk7XG5cdH1cblx0aGFzKHRhcmdldCwgcHJvcCkge1xuXHRcdGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0aGlzLl9pbnZva2VyKFdSZWZsZWN0QWN0aW9uLkhBUywgdGhpcy5fY29uZmlnLmJhc2VQYXRoLCBbcHJvcF0pO1xuXHR9XG5cdGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCkge1xuXHRcdGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIHRydWU7XG5cdFx0cmV0dXJuIHRoaXMuX2ludm9rZXIoV1JlZmxlY3RBY3Rpb24uREVMRVRFX1BST1BFUlRZLCBbLi4udGhpcy5fY29uZmlnLmJhc2VQYXRoLCBTdHJpbmcocHJvcCldLCBbXSk7XG5cdH1cblx0b3duS2V5cyh0YXJnZXQpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9O1xuXHR9XG5cdGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuXHRcdHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGU7XG5cdH1cblx0c2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuXHRcdHJldHVybiB0aGlzLl9pbnZva2VyKFdSZWZsZWN0QWN0aW9uLlNFVF9QUk9UT1RZUEVfT0YsIHRoaXMuX2NvbmZpZy5iYXNlUGF0aCwgW3Byb3RvXSk7XG5cdH1cblx0aXNFeHRlbnNpYmxlKHRhcmdldCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnZva2VyKFdSZWZsZWN0QWN0aW9uLlBSRVZFTlRfRVhURU5TSU9OUywgdGhpcy5fY29uZmlnLmJhc2VQYXRoLCBbXSk7XG5cdH1cblx0X2dldERlc2NyaXB0b3IoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhdGg6IHRoaXMuX2NvbmZpZy5iYXNlUGF0aCxcblx0XHRcdGNoYW5uZWw6IHRoaXMuX2NvbmZpZy5jaGFubmVsLFxuXHRcdFx0cHJpbWl0aXZlOiBmYWxzZVxuXHRcdH07XG5cdH1cbn07XG52YXIgRGlzcGF0Y2hQcm94eUhhbmRsZXIgPSBjbGFzcyB7XG5cdF9kaXNwYXRjaDtcblx0Y29uc3RydWN0b3IoX2Rpc3BhdGNoKSB7XG5cdFx0dGhpcy5fZGlzcGF0Y2ggPSBfZGlzcGF0Y2g7XG5cdH1cblx0Z2V0KC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uR0VULCBhcmdzKTtcblx0fVxuXHRzZXQoLi4uYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9kaXNwYXRjaChXUmVmbGVjdEFjdGlvbi5TRVQsIGFyZ3MpO1xuXHR9XG5cdGhhcyguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLkhBUywgYXJncyk7XG5cdH1cblx0ZGVsZXRlUHJvcGVydHkoLi4uYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9kaXNwYXRjaChXUmVmbGVjdEFjdGlvbi5ERUxFVEVfUFJPUEVSVFksIGFyZ3MpO1xuXHR9XG5cdGdldE93blByb3BlcnR5RGVzY3JpcHRvciguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLkdFVF9PV05fUFJPUEVSVFlfREVTQ1JJUFRPUiwgYXJncyk7XG5cdH1cblx0Z2V0UHJvdG90eXBlT2YoLi4uYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9kaXNwYXRjaChXUmVmbGVjdEFjdGlvbi5HRVRfUFJPVE9UWVBFX09GLCBhcmdzKTtcblx0fVxuXHRzZXRQcm90b3R5cGVPZiguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLlNFVF9QUk9UT1RZUEVfT0YsIGFyZ3MpO1xuXHR9XG5cdGlzRXh0ZW5zaWJsZSguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLklTX0VYVEVOU0lCTEUsIGFyZ3MpO1xuXHR9XG5cdHByZXZlbnRFeHRlbnNpb25zKC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uUFJFVkVOVF9FWFRFTlNJT05TLCBhcmdzKTtcblx0fVxuXHRvd25LZXlzKC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uT1dOX0tFWVMsIGFyZ3MpID8/IFtdO1xuXHR9XG5cdGFwcGx5KC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uQVBQTFksIGFyZ3MpO1xuXHR9XG5cdGNvbnN0cnVjdCguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLkNPTlNUUlVDVCwgYXJncyk7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVSZW1vdGVQcm94eShpbnZva2VyLCBjb25maWcpIHtcblx0Y29uc3QgZm4gPSBmdW5jdGlvbigpIHt9O1xuXHRjb25zdCBoYW5kbGVyID0gbmV3IFJlbW90ZVByb3h5SGFuZGxlcihpbnZva2VyLCBjb25maWcpO1xuXHRyZXR1cm4gbmV3IFByb3h5KGZuLCBoYW5kbGVyKTtcbn1cbmZ1bmN0aW9uIHdyYXBEZXNjcmlwdG9yKGRlc2NyaXB0b3IsIGludm9rZXIsIHRhcmdldENoYW5uZWwpIHtcblx0aWYgKCFkZXNjcmlwdG9yIHx8IHR5cGVvZiBkZXNjcmlwdG9yICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZGVzY3JpcHRvcjtcblx0aWYgKGRlc2NyaXB0b3IucHJpbWl0aXZlKSByZXR1cm4gZGVzY3JpcHRvcjtcblx0Y29uc3QgY2FjaGVkID0gZGVzY01hcC5nZXQoZGVzY3JpcHRvcik7XG5cdGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cdGNvbnN0IHByb3h5ID0gY3JlYXRlUmVtb3RlUHJveHkoaW52b2tlciwge1xuXHRcdGNoYW5uZWw6IHRhcmdldENoYW5uZWwgPz8gZGVzY3JpcHRvci5jaGFubmVsID8/IFwidW5rbm93blwiLFxuXHRcdGJhc2VQYXRoOiBkZXNjcmlwdG9yLnBhdGggPz8gW11cblx0fSk7XG5cdGRlc2NNYXAuc2V0KGRlc2NyaXB0b3IsIHByb3h5KTtcblx0d3JhcE1hcC5zZXQocHJveHksIGRlc2NyaXB0b3IpO1xuXHRyZXR1cm4gcHJveHk7XG59XG5mdW5jdGlvbiBpc1JlbW90ZVByb3h5KHZhbHVlKSB7XG5cdGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGZhbHNlO1xuXHR0cnkge1xuXHRcdHJldHVybiBSZWZsZWN0LmdldCh2YWx1ZSwgUFJPWFlfTUFSS0VSKSA9PT0gdHJ1ZTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5mdW5jdGlvbiBnZXRQcm94eURlc2NyaXB0b3IodmFsdWUpIHtcblx0aWYgKCFpc1JlbW90ZVByb3h5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG5cdHJldHVybiB2YWx1ZS4kZGVzY3JpcHRvciA/PyBudWxsO1xufVxuZnVuY3Rpb24gZ2V0UHJveHlJbnRlcm5hbHModmFsdWUpIHtcblx0aWYgKCFpc1JlbW90ZVByb3h5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG5cdHRyeSB7XG5cdFx0Y29uc3QgaW50ZXJuYWxzID0gUmVmbGVjdC5nZXQodmFsdWUsIFBST1hZX0lOVEVSTkFMUyk7XG5cdFx0aWYgKCFpbnRlcm5hbHMgfHwgdHlwZW9mIGludGVybmFscyAhPT0gXCJvYmplY3RcIikgcmV0dXJuIG51bGw7XG5cdFx0cmV0dXJuIGludGVybmFscztcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUV4cG9zZUhhbmRsZXIodGFyZ2V0LCByZWZsZWN0KSB7XG5cdHJldHVybiBjcmVhdGVPYmplY3RIYW5kbGVyKHRhcmdldCwgcmVmbGVjdCk7XG59XG5mdW5jdGlvbiBjcmVhdGVTZW5kZXJQcm94eShzZW5kZXIsIGJhc2VQYXRoID0gW10pIHtcblx0Y29uc3QgaW52b2tlciA9IChhY3Rpb24sIHBhdGgsIGFyZ3MpID0+IHtcblx0XHRyZXR1cm4gc2VuZGVyLnJlcXVlc3Qoe1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogc2VuZGVyLmNoYW5uZWxOYW1lLFxuXHRcdFx0c2VuZGVyOiBzZW5kZXIuc2VuZGVySWQgPz8gXCJwcm94eVwiLFxuXHRcdFx0dHlwZTogXCJyZXF1ZXN0XCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdGFjdGlvbixcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0YXJnc1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9O1xuXHRyZXR1cm4gY3JlYXRlUmVtb3RlUHJveHkoaW52b2tlciwge1xuXHRcdGNoYW5uZWw6IHNlbmRlci5jaGFubmVsTmFtZSxcblx0XHRiYXNlUGF0aFxuXHR9KTtcbn1cbnZhciBQcm94eUJ1aWxkZXIgPSBjbGFzcyB7XG5cdF9jb25maWcgPSB7fTtcblx0X2ludm9rZXIgPSBudWxsO1xuXHRjaGFubmVsKG5hbWUpIHtcblx0XHR0aGlzLl9jb25maWcuY2hhbm5lbCA9IG5hbWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0cGF0aChiYXNlUGF0aCkge1xuXHRcdHRoaXMuX2NvbmZpZy5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGludm9rZXIoZm4pIHtcblx0XHR0aGlzLl9pbnZva2VyID0gZm47XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0dGltZW91dChtcykge1xuXHRcdHRoaXMuX2NvbmZpZy50aW1lb3V0ID0gbXM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0Y2FjaGUoZW5hYmxlZCkge1xuXHRcdHRoaXMuX2NvbmZpZy5jYWNoZSA9IGVuYWJsZWQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0YnVpbGQoKSB7XG5cdFx0aWYgKCF0aGlzLl9pbnZva2VyKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZva2VyIGlzIHJlcXVpcmVkLiBDYWxsIC5pbnZva2VyKCkgYmVmb3JlIC5idWlsZCgpXCIpO1xuXHRcdGlmICghdGhpcy5fY29uZmlnLmNoYW5uZWwpIHRocm93IG5ldyBFcnJvcihcIkNoYW5uZWwgaXMgcmVxdWlyZWQuIENhbGwgLmNoYW5uZWwoKSBiZWZvcmUgLmJ1aWxkKClcIik7XG5cdFx0cmV0dXJuIGNyZWF0ZVJlbW90ZVByb3h5KHRoaXMuX2ludm9rZXIsIHRoaXMuX2NvbmZpZyk7XG5cdH1cbn07XG5mdW5jdGlvbiBwcm94eUJ1aWxkZXIoKSB7XG5cdHJldHVybiBuZXcgUHJveHlCdWlsZGVyKCk7XG59XG52YXIgbWFrZVJlcXVlc3RQcm94eSA9IHdyYXBEZXNjcmlwdG9yO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9jaGFubmVsL2ludGVybmFsL0Nvbm5lY3Rpb25Nb2RlbC50c1xuZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGlvbktleShwYXJhbXMpIHtcblx0cmV0dXJuIFtcblx0XHRwYXJhbXMubG9jYWxDaGFubmVsLFxuXHRcdHBhcmFtcy5yZW1vdGVDaGFubmVsLFxuXHRcdHBhcmFtcy5zZW5kZXIsXG5cdFx0cGFyYW1zLnRyYW5zcG9ydFR5cGUsXG5cdFx0cGFyYW1zLmRpcmVjdGlvblxuXHRdLmpvaW4oXCI6OlwiKTtcbn1cbmZ1bmN0aW9uIHF1ZXJ5Q29ubmVjdGlvbnMoY29ubmVjdGlvbnMsIHF1ZXJ5ID0ge30pIHtcblx0Y29uc3QgaW5jbHVkZUNsb3NlZCA9IHF1ZXJ5LmluY2x1ZGVDbG9zZWQgPz8gZmFsc2U7XG5cdGNvbnN0IGRlc2lyZWRTdGF0dXMgPSBxdWVyeS5zdGF0dXMgPz8gKGluY2x1ZGVDbG9zZWQgPyB2b2lkIDAgOiBcImFjdGl2ZVwiKTtcblx0cmV0dXJuIFsuLi5jb25uZWN0aW9uc10uZmlsdGVyKChjb25uZWN0aW9uKSA9PiB7XG5cdFx0aWYgKGRlc2lyZWRTdGF0dXMgJiYgY29ubmVjdGlvbi5zdGF0dXMgIT09IGRlc2lyZWRTdGF0dXMpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkuY2hhbm5lbCAmJiBjb25uZWN0aW9uLmxvY2FsQ2hhbm5lbCAhPT0gcXVlcnkuY2hhbm5lbCAmJiBjb25uZWN0aW9uLnJlbW90ZUNoYW5uZWwgIT09IHF1ZXJ5LmNoYW5uZWwpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkubG9jYWxDaGFubmVsICYmIGNvbm5lY3Rpb24ubG9jYWxDaGFubmVsICE9PSBxdWVyeS5sb2NhbENoYW5uZWwpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkucmVtb3RlQ2hhbm5lbCAmJiBjb25uZWN0aW9uLnJlbW90ZUNoYW5uZWwgIT09IHF1ZXJ5LnJlbW90ZUNoYW5uZWwpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkuc2VuZGVyICYmIGNvbm5lY3Rpb24uc2VuZGVyICE9PSBxdWVyeS5zZW5kZXIpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkudHJhbnNwb3J0VHlwZSAmJiBjb25uZWN0aW9uLnRyYW5zcG9ydFR5cGUgIT09IHF1ZXJ5LnRyYW5zcG9ydFR5cGUpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkuZGlyZWN0aW9uICYmIGNvbm5lY3Rpb24uZGlyZWN0aW9uICE9PSBxdWVyeS5kaXJlY3Rpb24pIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSkuc29ydCgoYSwgYikgPT4gYi51cGRhdGVkQXQgLSBhLnVwZGF0ZWRBdCk7XG59XG52YXIgQ29ubmVjdGlvblJlZ2lzdHJ5ID0gY2xhc3Mge1xuXHRfY3JlYXRlSWQ7XG5cdF9lbWl0RXZlbnQ7XG5cdF9jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0cnVjdG9yKF9jcmVhdGVJZCwgX2VtaXRFdmVudCkge1xuXHRcdHRoaXMuX2NyZWF0ZUlkID0gX2NyZWF0ZUlkO1xuXHRcdHRoaXMuX2VtaXRFdmVudCA9IF9lbWl0RXZlbnQ7XG5cdH1cblx0cmVnaXN0ZXIocGFyYW1zKSB7XG5cdFx0Y29uc3Qga2V5ID0gY3JlYXRlQ29ubmVjdGlvbktleShwYXJhbXMpO1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0Y29uc3QgZXhpc3RpbmcgPSB0aGlzLl9jb25uZWN0aW9ucy5nZXQoa2V5KTtcblx0XHRpZiAoZXhpc3RpbmcpIHtcblx0XHRcdGV4aXN0aW5nLnVwZGF0ZWRBdCA9IG5vdztcblx0XHRcdGV4aXN0aW5nLnN0YXR1cyA9IFwiYWN0aXZlXCI7XG5cdFx0XHRleGlzdGluZy5tZXRhZGF0YSA9IHtcblx0XHRcdFx0Li4uZXhpc3RpbmcubWV0YWRhdGEsXG5cdFx0XHRcdC4uLnBhcmFtcy5tZXRhZGF0YVxuXHRcdFx0fTtcblx0XHRcdHJldHVybiBleGlzdGluZztcblx0XHR9XG5cdFx0Y29uc3QgY29ubmVjdGlvbiA9IHtcblx0XHRcdGlkOiB0aGlzLl9jcmVhdGVJZCgpLFxuXHRcdFx0bG9jYWxDaGFubmVsOiBwYXJhbXMubG9jYWxDaGFubmVsLFxuXHRcdFx0cmVtb3RlQ2hhbm5lbDogcGFyYW1zLnJlbW90ZUNoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHBhcmFtcy5zZW5kZXIsXG5cdFx0XHR0cmFuc3BvcnRUeXBlOiBwYXJhbXMudHJhbnNwb3J0VHlwZSxcblx0XHRcdGRpcmVjdGlvbjogcGFyYW1zLmRpcmVjdGlvbixcblx0XHRcdHN0YXR1czogXCJhY3RpdmVcIixcblx0XHRcdGNyZWF0ZWRBdDogbm93LFxuXHRcdFx0dXBkYXRlZEF0OiBub3csXG5cdFx0XHRtZXRhZGF0YTogcGFyYW1zLm1ldGFkYXRhXG5cdFx0fTtcblx0XHR0aGlzLl9jb25uZWN0aW9ucy5zZXQoa2V5LCBjb25uZWN0aW9uKTtcblx0XHR0aGlzLl9lbWl0RXZlbnQ/Lih7XG5cdFx0XHR0eXBlOiBcImNvbm5lY3RlZFwiLFxuXHRcdFx0Y29ubmVjdGlvbixcblx0XHRcdHRpbWVzdGFtcDogbm93XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGNvbm5lY3Rpb247XG5cdH1cblx0bWFya05vdGlmaWVkKGNvbm5lY3Rpb24sIHBheWxvYWQpIHtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGNvbm5lY3Rpb24ubGFzdE5vdGlmeUF0ID0gbm93O1xuXHRcdGNvbm5lY3Rpb24udXBkYXRlZEF0ID0gbm93O1xuXHRcdHRoaXMuX2VtaXRFdmVudD8uKHtcblx0XHRcdHR5cGU6IFwibm90aWZpZWRcIixcblx0XHRcdGNvbm5lY3Rpb24sXG5cdFx0XHR0aW1lc3RhbXA6IG5vdyxcblx0XHRcdHBheWxvYWRcblx0XHR9KTtcblx0fVxuXHRjbG9zZUJ5Q2hhbm5lbChjaGFubmVsKSB7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgdGhpcy5fY29ubmVjdGlvbnMudmFsdWVzKCkpIHtcblx0XHRcdGlmIChjb25uZWN0aW9uLmxvY2FsQ2hhbm5lbCAhPT0gY2hhbm5lbCAmJiBjb25uZWN0aW9uLnJlbW90ZUNoYW5uZWwgIT09IGNoYW5uZWwpIGNvbnRpbnVlO1xuXHRcdFx0aWYgKGNvbm5lY3Rpb24uc3RhdHVzID09PSBcImNsb3NlZFwiKSBjb250aW51ZTtcblx0XHRcdGNvbm5lY3Rpb24uc3RhdHVzID0gXCJjbG9zZWRcIjtcblx0XHRcdGNvbm5lY3Rpb24udXBkYXRlZEF0ID0gbm93O1xuXHRcdFx0dGhpcy5fZW1pdEV2ZW50Py4oe1xuXHRcdFx0XHR0eXBlOiBcImRpc2Nvbm5lY3RlZFwiLFxuXHRcdFx0XHRjb25uZWN0aW9uLFxuXHRcdFx0XHR0aW1lc3RhbXA6IG5vd1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdGNsb3NlQWxsKCkge1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0Zm9yIChjb25zdCBjb25uZWN0aW9uIG9mIHRoaXMuX2Nvbm5lY3Rpb25zLnZhbHVlcygpKSB7XG5cdFx0XHRpZiAoY29ubmVjdGlvbi5zdGF0dXMgPT09IFwiY2xvc2VkXCIpIGNvbnRpbnVlO1xuXHRcdFx0Y29ubmVjdGlvbi5zdGF0dXMgPSBcImNsb3NlZFwiO1xuXHRcdFx0Y29ubmVjdGlvbi51cGRhdGVkQXQgPSBub3c7XG5cdFx0XHR0aGlzLl9lbWl0RXZlbnQ/Lih7XG5cdFx0XHRcdHR5cGU6IFwiZGlzY29ubmVjdGVkXCIsXG5cdFx0XHRcdGNvbm5lY3Rpb24sXG5cdFx0XHRcdHRpbWVzdGFtcDogbm93XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cXVlcnkocXVlcnkgPSB7fSkge1xuXHRcdHJldHVybiBxdWVyeUNvbm5lY3Rpb25zKHRoaXMuX2Nvbm5lY3Rpb25zLnZhbHVlcygpLCBxdWVyeSk7XG5cdH1cblx0dmFsdWVzKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5fY29ubmVjdGlvbnMudmFsdWVzKCldO1xuXHR9XG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25zLmNsZWFyKCk7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L2NoYW5uZWwvVW5pZmllZENoYW5uZWwudHNcbnZhciBVbmlmaWVkQ2hhbm5lbCA9IGNsYXNzIHtcblx0X25hbWU7XG5cdF9jb250ZXh0VHlwZTtcblx0X2NvbmZpZztcblx0X3RyYW5zcG9ydHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfZGVmYXVsdFRyYW5zcG9ydCA9IG51bGw7XG5cdF9jb25uZWN0aW9uRXZlbnRzID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogMjAwIH0pO1xuXHRfY29ubmVjdGlvblJlZ2lzdHJ5ID0gbmV3IENvbm5lY3Rpb25SZWdpc3RyeSgoKSA9PiBVVUlEdjQoKSwgKGV2ZW50KSA9PiB0aGlzLl9jb25uZWN0aW9uRXZlbnRzLm5leHQoZXZlbnQpKTtcblx0X3BlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3Vic2NyaXB0aW9ucyA9IFtdO1xuXHRfaW5ib3VuZCA9IG5ldyBDaGFubmVsU3ViamVjdCh7IGJ1ZmZlclNpemU6IDEwMCB9KTtcblx0X291dGJvdW5kID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogMTAwIH0pO1xuXHRfaW52b2NhdGlvbnMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdF9yZXNwb25zZXMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdF9leHBvc2VkID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3Byb3h5Q2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcblx0X19nZXRQcml2YXRlKGtleSkge1xuXHRcdHJldHVybiB0aGlzW2tleV07XG5cdH1cblx0X19zZXRQcml2YXRlKGtleSwgdmFsdWUpIHtcblx0XHR0aGlzW2tleV0gPSB2YWx1ZTtcblx0fVxuXHRjb25zdHJ1Y3Rvcihjb25maWcpIHtcblx0XHRjb25zdCBjZmcgPSB0eXBlb2YgY29uZmlnID09PSBcInN0cmluZ1wiID8geyBuYW1lOiBjb25maWcgfSA6IGNvbmZpZztcblx0XHR0aGlzLl9uYW1lID0gY2ZnLm5hbWU7XG5cdFx0dGhpcy5fY29udGV4dFR5cGUgPSBjZmcuYXV0b0RldGVjdCAhPT0gZmFsc2UgPyBkZXRlY3RDb250ZXh0VHlwZSgpIDogXCJ1bmtub3duXCI7XG5cdFx0dGhpcy5fY29uZmlnID0ge1xuXHRcdFx0bmFtZTogY2ZnLm5hbWUsXG5cdFx0XHRhdXRvRGV0ZWN0OiBjZmcuYXV0b0RldGVjdCA/PyB0cnVlLFxuXHRcdFx0dGltZW91dDogY2ZnLnRpbWVvdXQgPz8gM2U0LFxuXHRcdFx0cmVmbGVjdDogY2ZnLnJlZmxlY3QgPz8gRGVmYXVsdFJlZmxlY3QsXG5cdFx0XHRidWZmZXJTaXplOiBjZmcuYnVmZmVyU2l6ZSA/PyAxMDAsXG5cdFx0XHRhdXRvTGlzdGVuOiBjZmcuYXV0b0xpc3RlbiA/PyB0cnVlXG5cdFx0fTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmF1dG9MaXN0ZW4gJiYgdGhpcy5faXNXb3JrZXJDb250ZXh0KCkpIHRoaXMubGlzdGVuKHNlbGYpO1xuXHR9XG5cdGNvbm5lY3QodGFyZ2V0LCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCB0cmFuc3BvcnRUeXBlID0gZGV0ZWN0VHJhbnNwb3J0VHlwZSh0YXJnZXQpO1xuXHRcdGNvbnN0IHRhcmdldENoYW5uZWwgPSBvcHRpb25zLnRhcmdldENoYW5uZWwgPz8gdGhpcy5faW5mZXJUYXJnZXRDaGFubmVsKHRhcmdldCwgdHJhbnNwb3J0VHlwZSk7XG5cdFx0Y29uc3QgYmluZGluZyA9IHRoaXMuX2NyZWF0ZVRyYW5zcG9ydEJpbmRpbmcodGFyZ2V0LCB0cmFuc3BvcnRUeXBlLCB0YXJnZXRDaGFubmVsLCBvcHRpb25zKTtcblx0XHR0aGlzLl90cmFuc3BvcnRzLnNldCh0YXJnZXRDaGFubmVsLCBiaW5kaW5nKTtcblx0XHRpZiAoIXRoaXMuX2RlZmF1bHRUcmFuc3BvcnQpIHRoaXMuX2RlZmF1bHRUcmFuc3BvcnQgPSBiaW5kaW5nO1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9yZWdpc3RlckNvbm5lY3Rpb24oe1xuXHRcdFx0bG9jYWxDaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0cmVtb3RlQ2hhbm5lbDogdGFyZ2V0Q2hhbm5lbCxcblx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdHRyYW5zcG9ydFR5cGUsXG5cdFx0XHRkaXJlY3Rpb246IFwib3V0Z29pbmdcIixcblx0XHRcdG1ldGFkYXRhOiB7IHBoYXNlOiBcImNvbm5lY3RcIiB9XG5cdFx0fSk7XG5cdFx0dGhpcy5fZW1pdENvbm5lY3Rpb25TaWduYWwoYmluZGluZywgXCJjb25uZWN0XCIsIHtcblx0XHRcdGNvbm5lY3Rpb25JZDogY29ubmVjdGlvbi5pZCxcblx0XHRcdGZyb206IHRoaXMuX25hbWUsXG5cdFx0XHR0bzogdGFyZ2V0Q2hhbm5lbFxuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGxpc3Rlbihzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IHRyYW5zcG9ydFR5cGUgPSBkZXRlY3RUcmFuc3BvcnRUeXBlKHNvdXJjZSk7XG5cdFx0Y29uc3Qgc291cmNlQ2hhbm5lbCA9IG9wdGlvbnMudGFyZ2V0Q2hhbm5lbCA/PyB0aGlzLl9pbmZlclRhcmdldENoYW5uZWwoc291cmNlLCB0cmFuc3BvcnRUeXBlKTtcblx0XHRjb25zdCBoYW5kbGVyID0gKGRhdGEpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKGRhdGEpO1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9yZWdpc3RlckNvbm5lY3Rpb24oe1xuXHRcdFx0bG9jYWxDaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0cmVtb3RlQ2hhbm5lbDogc291cmNlQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogc291cmNlQ2hhbm5lbCxcblx0XHRcdHRyYW5zcG9ydFR5cGUsXG5cdFx0XHRkaXJlY3Rpb246IFwiaW5jb21pbmdcIixcblx0XHRcdG1ldGFkYXRhOiB7IHBoYXNlOiBcImxpc3RlblwiIH1cblx0XHR9KTtcblx0XHRzd2l0Y2ggKHRyYW5zcG9ydFR5cGUpIHtcblx0XHRcdGNhc2UgXCJ3b3JrZXJcIjpcblx0XHRcdGNhc2UgXCJtZXNzYWdlLXBvcnRcIjpcblx0XHRcdGNhc2UgXCJicm9hZGNhc3RcIjpcblx0XHRcdFx0aWYgKG9wdGlvbnMuYXV0b1N0YXJ0ICE9PSBmYWxzZSAmJiBzb3VyY2Uuc3RhcnQpIHNvdXJjZS5zdGFydCgpO1xuXHRcdFx0XHRzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcj8uKFwibWVzc2FnZVwiLCAoKGUpID0+IGhhbmRsZXIoZS5kYXRhKSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ3ZWJzb2NrZXRcIjpcblx0XHRcdFx0c291cmNlLmFkZEV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgKChlKSA9PiB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGhhbmRsZXIoSlNPTi5wYXJzZShlLmRhdGEpKTtcblx0XHRcdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2hyb21lLXJ1bnRpbWVcIjpcblx0XHRcdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlPy5hZGRMaXN0ZW5lcj8uKChtc2csIHNlbmRlciwgc2VuZFJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdFx0aGFuZGxlcihtc2cpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2hyb21lLXRhYnNcIjpcblx0XHRcdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlPy5hZGRMaXN0ZW5lcj8uKChtc2csIHNlbmRlcikgPT4ge1xuXHRcdFx0XHRcdGlmIChvcHRpb25zLnRhYklkICE9IG51bGwgJiYgc2VuZGVyPy50YWI/LmlkICE9PSBvcHRpb25zLnRhYklkKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0aGFuZGxlcihtc2cpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2hyb21lLXBvcnRcIjpcblx0XHRcdFx0c291cmNlPy5vbk1lc3NhZ2U/LmFkZExpc3RlbmVyPy4oKG1zZykgPT4ge1xuXHRcdFx0XHRcdGhhbmRsZXIobXNnKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNocm9tZS1leHRlcm5hbFwiOlxuXHRcdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbD8uYWRkTGlzdGVuZXI/LigobXNnKSA9PiB7XG5cdFx0XHRcdFx0aGFuZGxlcihtc2cpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2VsZlwiOlxuXHRcdFx0XHRhZGRFdmVudExpc3RlbmVyPy4oXCJtZXNzYWdlXCIsICgoZSkgPT4gaGFuZGxlcihlLmRhdGEpKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogaWYgKG9wdGlvbnMub25NZXNzYWdlKSBvcHRpb25zLm9uTWVzc2FnZShoYW5kbGVyKTtcblx0XHR9XG5cdFx0dGhpcy5fc2VuZFNpZ25hbFRvVGFyZ2V0KHNvdXJjZSwgdHJhbnNwb3J0VHlwZSwge1xuXHRcdFx0Y29ubmVjdGlvbklkOiBjb25uZWN0aW9uLmlkLFxuXHRcdFx0ZnJvbTogdGhpcy5fbmFtZSxcblx0XHRcdHRvOiBzb3VyY2VDaGFubmVsLFxuXHRcdFx0dGFiSWQ6IG9wdGlvbnMudGFiSWQsXG5cdFx0XHRleHRlcm5hbElkOiBvcHRpb25zLmV4dGVybmFsSWRcblx0XHR9LCBcIm5vdGlmeVwiKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRhdHRhY2godGFyZ2V0LCBvcHRpb25zID0ge30pIHtcblx0XHRyZXR1cm4gdGhpcy5jb25uZWN0KHRhcmdldCwgb3B0aW9ucyk7XG5cdH1cblx0ZXhwb3NlKG5hbWUsIG9iaikge1xuXHRcdGNvbnN0IHBhdGggPSBbbmFtZV07XG5cdFx0d3JpdGVCeVBhdGgocGF0aCwgb2JqKTtcblx0XHR0aGlzLl9leHBvc2VkLnNldChuYW1lLCB7XG5cdFx0XHRuYW1lLFxuXHRcdFx0b2JqLFxuXHRcdFx0cGF0aFxuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGV4cG9zZUFsbChlbnRyaWVzKSB7XG5cdFx0Zm9yIChjb25zdCBbbmFtZSwgb2JqXSBvZiBPYmplY3QuZW50cmllcyhlbnRyaWVzKSkgdGhpcy5leHBvc2UobmFtZSwgb2JqKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRhc3luYyBpbXBvcnQodXJsLCB0YXJnZXRDaGFubmVsKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW52b2tlKHRhcmdldENoYW5uZWwgPz8gdGhpcy5fZ2V0RGVmYXVsdFRhcmdldCgpLCBXUmVmbGVjdEFjdGlvbi5JTVBPUlQsIFtdLCBbdXJsXSk7XG5cdH1cblx0aW52b2tlKHRhcmdldENoYW5uZWwsIGFjdGlvbiwgcGF0aCwgYXJncyA9IFtdKSB7XG5cdFx0Y29uc3QgaWQgPSBVVUlEdjQoKTtcblx0XHRjb25zdCByZXNvbHZlcnMgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTtcblx0XHR0aGlzLl9wZW5kaW5nLnNldChpZCwgcmVzb2x2ZXJzKTtcblx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fcGVuZGluZy5oYXMoaWQpKSB7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGlkKTtcblx0XHRcdFx0cmVzb2x2ZXJzLnJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBSZXF1ZXN0IHRpbWVvdXQ6ICR7YWN0aW9ufSBvbiAke3BhdGguam9pbihcIi5cIil9YCkpO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMuX2NvbmZpZy50aW1lb3V0KTtcblx0XHRjb25zdCBtZXNzYWdlID0ge1xuXHRcdFx0aWQsXG5cdFx0XHRjaGFubmVsOiB0YXJnZXRDaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9uYW1lLFxuXHRcdFx0dHlwZTogXCJyZXF1ZXN0XCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdGNoYW5uZWw6IHRhcmdldENoYW5uZWwsXG5cdFx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRhcmdzXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHR0aGlzLl9zZW5kKHRhcmdldENoYW5uZWwsIG1lc3NhZ2UpO1xuXHRcdHRoaXMuX291dGJvdW5kLm5leHQobWVzc2FnZSk7XG5cdFx0cmV0dXJuIHJlc29sdmVycy5wcm9taXNlLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpKTtcblx0fVxuXHRnZXQodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgcHJvcCkge1xuXHRcdHJldHVybiB0aGlzLmludm9rZSh0YXJnZXRDaGFubmVsLCBXUmVmbGVjdEFjdGlvbi5HRVQsIHBhdGgsIFtwcm9wXSk7XG5cdH1cblx0c2V0KHRhcmdldENoYW5uZWwsIHBhdGgsIHByb3AsIHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW52b2tlKHRhcmdldENoYW5uZWwsIFdSZWZsZWN0QWN0aW9uLlNFVCwgcGF0aCwgW3Byb3AsIHZhbHVlXSk7XG5cdH1cblx0Y2FsbCh0YXJnZXRDaGFubmVsLCBwYXRoLCBhcmdzID0gW10pIHtcblx0XHRyZXR1cm4gdGhpcy5pbnZva2UodGFyZ2V0Q2hhbm5lbCwgV1JlZmxlY3RBY3Rpb24uQVBQTFksIHBhdGgsIFthcmdzXSk7XG5cdH1cblx0Y29uc3RydWN0KHRhcmdldENoYW5uZWwsIHBhdGgsIGFyZ3MgPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLmludm9rZSh0YXJnZXRDaGFubmVsLCBXUmVmbGVjdEFjdGlvbi5DT05TVFJVQ1QsIHBhdGgsIFthcmdzXSk7XG5cdH1cblx0cHJveHkodGFyZ2V0Q2hhbm5lbCwgYmFzZVBhdGggPSBbXSkge1xuXHRcdGNvbnN0IHRhcmdldCA9IHRhcmdldENoYW5uZWwgPz8gdGhpcy5fZ2V0RGVmYXVsdFRhcmdldCgpO1xuXHRcdHJldHVybiB0aGlzLl9jcmVhdGVQcm94eSh0YXJnZXQsIGJhc2VQYXRoKTtcblx0fVxuXHRyZW1vdGUobW9kdWxlTmFtZSwgdGFyZ2V0Q2hhbm5lbCkge1xuXHRcdHJldHVybiB0aGlzLnByb3h5KHRhcmdldENoYW5uZWwsIFttb2R1bGVOYW1lXSk7XG5cdH1cblx0d3JhcERlc2NyaXB0b3IoZGVzY3JpcHRvciwgdGFyZ2V0Q2hhbm5lbCkge1xuXHRcdGNvbnN0IGludm9rZXIgPSAoYWN0aW9uLCBwYXRoLCBhcmdzKSA9PiB7XG5cdFx0XHRjb25zdCBjaGFubmVsID0gdGFyZ2V0Q2hhbm5lbCA/PyBkZXNjcmlwdG9yPy5jaGFubmVsID8/IHRoaXMuX2dldERlZmF1bHRUYXJnZXQoKTtcblx0XHRcdHJldHVybiB0aGlzLmludm9rZShjaGFubmVsLCBhY3Rpb24sIHBhdGgsIGFyZ3MpO1xuXHRcdH07XG5cdFx0cmV0dXJuIHdyYXBEZXNjcmlwdG9yKGRlc2NyaXB0b3IsIGludm9rZXIsIHRhcmdldENoYW5uZWwgPz8gZGVzY3JpcHRvcj8uY2hhbm5lbCA/PyB0aGlzLl9nZXREZWZhdWx0VGFyZ2V0KCkpO1xuXHR9XG5cdHN1YnNjcmliZShoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luYm91bmQuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdG5leHQobWVzc2FnZSkge1xuXHRcdHRoaXMuX3NlbmQobWVzc2FnZS5jaGFubmVsLCBtZXNzYWdlKTtcblx0XHR0aGlzLl9vdXRib3VuZC5uZXh0KG1lc3NhZ2UpO1xuXHR9XG5cdGVtaXQodGFyZ2V0Q2hhbm5lbCwgZXZlbnRUeXBlLCBkYXRhKSB7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IHRhcmdldENoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX25hbWUsXG5cdFx0XHR0eXBlOiBcImV2ZW50XCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdHR5cGU6IGV2ZW50VHlwZSxcblx0XHRcdFx0ZGF0YVxuXHRcdFx0fSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH07XG5cdFx0dGhpcy5uZXh0KG1lc3NhZ2UpO1xuXHR9XG5cdG5vdGlmeSh0YXJnZXRDaGFubmVsLCBwYXlsb2FkID0ge30sIHR5cGUgPSBcIm5vdGlmeVwiKSB7XG5cdFx0Y29uc3QgYmluZGluZyA9IHRoaXMuX3RyYW5zcG9ydHMuZ2V0KHRhcmdldENoYW5uZWwpO1xuXHRcdGlmICghYmluZGluZykgcmV0dXJuIGZhbHNlO1xuXHRcdHRoaXMuX2VtaXRDb25uZWN0aW9uU2lnbmFsKGJpbmRpbmcsIHR5cGUsIHtcblx0XHRcdGZyb206IHRoaXMuX25hbWUsXG5cdFx0XHR0bzogdGFyZ2V0Q2hhbm5lbCxcblx0XHRcdC4uLnBheWxvYWRcblx0XHR9KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRnZXQgb25NZXNzYWdlKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbmJvdW5kO1xuXHR9XG5cdGdldCBvbk91dGJvdW5kKCkge1xuXHRcdHJldHVybiB0aGlzLl9vdXRib3VuZDtcblx0fVxuXHRnZXQgb25JbnZvY2F0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnZvY2F0aW9ucztcblx0fVxuXHRnZXQgb25SZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcmVzcG9uc2VzO1xuXHR9XG5cdGdldCBvbkNvbm5lY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25FdmVudHM7XG5cdH1cblx0c3Vic2NyaWJlQ29ubmVjdGlvbnMoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uRXZlbnRzLnN1YnNjcmliZShoYW5kbGVyKTtcblx0fVxuXHRxdWVyeUNvbm5lY3Rpb25zKHF1ZXJ5ID0ge30pIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LnF1ZXJ5KHF1ZXJ5KTtcblx0fVxuXHRub3RpZnlDb25uZWN0aW9ucyhwYXlsb2FkID0ge30sIHF1ZXJ5ID0ge30pIHtcblx0XHRsZXQgc2VudCA9IDA7XG5cdFx0Y29uc3QgdGFyZ2V0cyA9IHRoaXMucXVlcnlDb25uZWN0aW9ucyh7XG5cdFx0XHQuLi5xdWVyeSxcblx0XHRcdHN0YXR1czogXCJhY3RpdmVcIixcblx0XHRcdGluY2x1ZGVDbG9zZWQ6IGZhbHNlXG5cdFx0fSk7XG5cdFx0Zm9yIChjb25zdCBjb25uZWN0aW9uIG9mIHRhcmdldHMpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmcgPSB0aGlzLl90cmFuc3BvcnRzLmdldChjb25uZWN0aW9uLnJlbW90ZUNoYW5uZWwpO1xuXHRcdFx0aWYgKCFiaW5kaW5nKSBjb250aW51ZTtcblx0XHRcdHRoaXMuX2VtaXRDb25uZWN0aW9uU2lnbmFsKGJpbmRpbmcsIFwibm90aWZ5XCIsIHtcblx0XHRcdFx0Y29ubmVjdGlvbklkOiBjb25uZWN0aW9uLmlkLFxuXHRcdFx0XHRmcm9tOiB0aGlzLl9uYW1lLFxuXHRcdFx0XHR0bzogY29ubmVjdGlvbi5yZW1vdGVDaGFubmVsLFxuXHRcdFx0XHQuLi5wYXlsb2FkXG5cdFx0XHR9KTtcblx0XHRcdHNlbnQrKztcblx0XHR9XG5cdFx0cmV0dXJuIHNlbnQ7XG5cdH1cblx0Z2V0IG5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX25hbWU7XG5cdH1cblx0Z2V0IGNvbnRleHRUeXBlKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0VHlwZTtcblx0fVxuXHRnZXQgY29uZmlnKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb25maWc7XG5cdH1cblx0Z2V0IGNvbm5lY3RlZENoYW5uZWxzKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5fdHJhbnNwb3J0cy5rZXlzKCldO1xuXHR9XG5cdGdldCBleHBvc2VkTW9kdWxlcygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2V4cG9zZWQua2V5cygpXTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucyA9IFtdO1xuXHRcdHRoaXMuX3BlbmRpbmcuY2xlYXIoKTtcblx0XHR0aGlzLl9tYXJrQWxsQ29ubmVjdGlvbnNDbG9zZWQoKTtcblx0XHRmb3IgKGNvbnN0IGJpbmRpbmcgb2YgdGhpcy5fdHJhbnNwb3J0cy52YWx1ZXMoKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YmluZGluZy5jbGVhbnVwPy4oKTtcblx0XHRcdH0gY2F0Y2gge31cblx0XHRcdGlmIChiaW5kaW5nLnRyYW5zcG9ydFR5cGUgPT09IFwibWVzc2FnZS1wb3J0XCIgfHwgYmluZGluZy50cmFuc3BvcnRUeXBlID09PSBcImJyb2FkY2FzdFwiKSB0cnkge1xuXHRcdFx0XHRiaW5kaW5nLnRhcmdldD8uY2xvc2U/LigpO1xuXHRcdFx0fSBjYXRjaCB7fVxuXHRcdH1cblx0XHR0aGlzLl90cmFuc3BvcnRzLmNsZWFyKCk7XG5cdFx0dGhpcy5fZGVmYXVsdFRyYW5zcG9ydCA9IG51bGw7XG5cdFx0dGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LmNsZWFyKCk7XG5cdFx0dGhpcy5faW5ib3VuZC5jb21wbGV0ZSgpO1xuXHRcdHRoaXMuX291dGJvdW5kLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5faW52b2NhdGlvbnMuY29tcGxldGUoKTtcblx0XHR0aGlzLl9yZXNwb25zZXMuY29tcGxldGUoKTtcblx0XHR0aGlzLl9jb25uZWN0aW9uRXZlbnRzLmNvbXBsZXRlKCk7XG5cdH1cblx0X2hhbmRsZUluY29taW5nKGRhdGEpIHtcblx0XHRpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpIHJldHVybjtcblx0XHR0aGlzLl9pbmJvdW5kLm5leHQoZGF0YSk7XG5cdFx0c3dpdGNoIChkYXRhLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJyZXF1ZXN0XCI6XG5cdFx0XHRcdGlmIChkYXRhLmNoYW5uZWwgPT09IHRoaXMuX25hbWUpIHRoaXMuX2hhbmRsZVJlcXVlc3QoZGF0YSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInJlc3BvbnNlXCI6XG5cdFx0XHRcdHRoaXMuX2hhbmRsZVJlc3BvbnNlKGRhdGEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJldmVudFwiOiBicmVhaztcblx0XHRcdGNhc2UgXCJzaWduYWxcIjogdGhpcy5faGFuZGxlU2lnbmFsKGRhdGEpO1xuXHRcdH1cblx0fVxuXHRfaGFuZGxlUmVzcG9uc2UoZGF0YSkge1xuXHRcdGNvbnN0IGlkID0gZGF0YS5yZXFJZCA/PyBkYXRhLmlkO1xuXHRcdGNvbnN0IHJlc29sdmVycyA9IHRoaXMuX3BlbmRpbmcuZ2V0KGlkKTtcblx0XHRpZiAocmVzb2x2ZXJzKSB7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShpZCk7XG5cdFx0XHRpZiAoZGF0YS5wYXlsb2FkPy5lcnJvcikgcmVzb2x2ZXJzLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gZGF0YS5wYXlsb2FkPy5yZXN1bHQ7XG5cdFx0XHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBkYXRhLnBheWxvYWQ/LmRlc2NyaXB0b3I7XG5cdFx0XHRcdGlmIChyZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0ICE9PSB2b2lkIDApIHJlc29sdmVycy5yZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdGVsc2UgaWYgKGRlc2NyaXB0b3IpIHJlc29sdmVycy5yZXNvbHZlKHRoaXMud3JhcERlc2NyaXB0b3IoZGVzY3JpcHRvciwgZGF0YS5zZW5kZXIpKTtcblx0XHRcdFx0ZWxzZSByZXNvbHZlcnMucmVzb2x2ZSh2b2lkIDApO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fcmVzcG9uc2VzLm5leHQoe1xuXHRcdFx0XHRpZCxcblx0XHRcdFx0Y2hhbm5lbDogZGF0YS5jaGFubmVsLFxuXHRcdFx0XHRzZW5kZXI6IGRhdGEuc2VuZGVyLFxuXHRcdFx0XHRyZXN1bHQ6IGRhdGEucGF5bG9hZD8ucmVzdWx0LFxuXHRcdFx0XHRkZXNjcmlwdG9yOiBkYXRhLnBheWxvYWQ/LmRlc2NyaXB0b3IsXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIF9oYW5kbGVSZXF1ZXN0KGRhdGEpIHtcblx0XHRjb25zdCBwYXlsb2FkID0gZGF0YS5wYXlsb2FkO1xuXHRcdGlmICghcGF5bG9hZCkgcmV0dXJuO1xuXHRcdGNvbnN0IHsgYWN0aW9uLCBwYXRoLCBhcmdzLCBzZW5kZXIgfSA9IHBheWxvYWQ7XG5cdFx0Y29uc3QgcmVxSWQgPSBkYXRhLnJlcUlkID8/IGRhdGEuaWQ7XG5cdFx0dGhpcy5faW52b2NhdGlvbnMubmV4dCh7XG5cdFx0XHRpZDogcmVxSWQsXG5cdFx0XHRjaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0c2VuZGVyLFxuXHRcdFx0YWN0aW9uLFxuXHRcdFx0cGF0aCxcblx0XHRcdGFyZ3M6IGFyZ3MgPz8gW10sXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KCksXG5cdFx0XHRjb250ZXh0VHlwZTogZGV0ZWN0SW5jb21pbmdDb250ZXh0VHlwZShkYXRhKVxuXHRcdH0pO1xuXHRcdGNvbnN0IHsgcmVzdWx0LCB0b1RyYW5zZmVyLCBuZXdQYXRoIH0gPSBhd2FpdCB0aGlzLl9leGVjdXRlQWN0aW9uKGFjdGlvbiwgcGF0aCwgYXJncyA/PyBbXSwgc2VuZGVyKTtcblx0XHRhd2FpdCB0aGlzLl9zZW5kUmVzcG9uc2UocmVxSWQsIGFjdGlvbiwgc2VuZGVyLCBuZXdQYXRoLCByZXN1bHQsIHRvVHJhbnNmZXIpO1xuXHR9XG5cdGFzeW5jIF9leGVjdXRlQWN0aW9uKGFjdGlvbiwgcGF0aCwgYXJncywgc2VuZGVyKSB7XG5cdFx0Y29uc3QgeyByZXN1bHQsIHRvVHJhbnNmZXIsIHBhdGg6IG5ld1BhdGggfSA9IGV4ZWN1dGVBY3Rpb24oYWN0aW9uLCBwYXRoLCBhcmdzLCB7XG5cdFx0XHRjaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0c2VuZGVyLFxuXHRcdFx0cmVmbGVjdDogdGhpcy5fY29uZmlnLnJlZmxlY3Rcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVzdWx0OiBhd2FpdCByZXN1bHQsXG5cdFx0XHR0b1RyYW5zZmVyLFxuXHRcdFx0bmV3UGF0aFxuXHRcdH07XG5cdH1cblx0YXN5bmMgX3NlbmRSZXNwb25zZShyZXFJZCwgYWN0aW9uLCBzZW5kZXIsIHBhdGgsIHJhd1Jlc3VsdCwgdG9UcmFuc2Zlcikge1xuXHRcdGNvbnN0IHsgcmVzcG9uc2U6IGNvcmVSZXNwb25zZSwgdHJhbnNmZXIgfSA9IGF3YWl0IGJ1aWxkUmVzcG9uc2UocmVxSWQsIGFjdGlvbiwgdGhpcy5fbmFtZSwgc2VuZGVyLCBwYXRoLCByYXdSZXN1bHQsIHRvVHJhbnNmZXIpO1xuXHRcdGNvbnN0IHJlc3BvbnNlID0ge1xuXHRcdFx0aWQ6IHJlcUlkLFxuXHRcdFx0Li4uY29yZVJlc3BvbnNlLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpLFxuXHRcdFx0dHJhbnNmZXJhYmxlOiB0cmFuc2ZlclxuXHRcdH07XG5cdFx0dGhpcy5fc2VuZChzZW5kZXIsIHJlc3BvbnNlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2hhbmRsZVNpZ25hbChkYXRhKSB7XG5cdFx0Y29uc3QgcGF5bG9hZCA9IGRhdGE/LnBheWxvYWQgPz8ge307XG5cdFx0Y29uc3QgcmVtb3RlQ2hhbm5lbCA9IHBheWxvYWQuZnJvbSA/PyBkYXRhLnNlbmRlciA/PyBcInVua25vd25cIjtcblx0XHRjb25zdCB0cmFuc3BvcnRUeXBlID0gZGF0YS50cmFuc3BvcnRUeXBlID8/IHRoaXMuX3RyYW5zcG9ydHMuZ2V0KGRhdGEuY2hhbm5lbCk/LnRyYW5zcG9ydFR5cGUgPz8gXCJpbnRlcm5hbFwiO1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9yZWdpc3RlckNvbm5lY3Rpb24oe1xuXHRcdFx0bG9jYWxDaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0cmVtb3RlQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogZGF0YS5zZW5kZXIgPz8gcmVtb3RlQ2hhbm5lbCxcblx0XHRcdHRyYW5zcG9ydFR5cGUsXG5cdFx0XHRkaXJlY3Rpb246IFwiaW5jb21pbmdcIlxuXHRcdH0pO1xuXHRcdHRoaXMuX21hcmtDb25uZWN0aW9uTm90aWZpZWQoY29ubmVjdGlvbiwgcGF5bG9hZCk7XG5cdH1cblx0X3JlZ2lzdGVyQ29ubmVjdGlvbihwYXJhbXMpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LnJlZ2lzdGVyKHBhcmFtcyk7XG5cdH1cblx0X21hcmtDb25uZWN0aW9uTm90aWZpZWQoY29ubmVjdGlvbiwgcGF5bG9hZCkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25SZWdpc3RyeS5tYXJrTm90aWZpZWQoY29ubmVjdGlvbiwgcGF5bG9hZCk7XG5cdH1cblx0X2VtaXRDb25uZWN0aW9uU2lnbmFsKGJpbmRpbmcsIHNpZ25hbFR5cGUsIHBheWxvYWQgPSB7fSkge1xuXHRcdGNvbnN0IG1lc3NhZ2UgPSB7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHR0eXBlOiBcInNpZ25hbFwiLFxuXHRcdFx0Y2hhbm5lbDogYmluZGluZy50YXJnZXRDaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9uYW1lLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogYmluZGluZy50cmFuc3BvcnRUeXBlLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHR0eXBlOiBzaWduYWxUeXBlLFxuXHRcdFx0XHRmcm9tOiB0aGlzLl9uYW1lLFxuXHRcdFx0XHR0bzogYmluZGluZy50YXJnZXRDaGFubmVsLFxuXHRcdFx0XHQuLi5wYXlsb2FkXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHQoYmluZGluZz8uc2VuZGVyID8/IGJpbmRpbmc/LnBvc3RNZXNzYWdlKT8uY2FsbChiaW5kaW5nLCBtZXNzYWdlKTtcblx0XHRjb25zdCBjb25uZWN0aW9uID0gdGhpcy5fcmVnaXN0ZXJDb25uZWN0aW9uKHtcblx0XHRcdGxvY2FsQ2hhbm5lbDogdGhpcy5fbmFtZSxcblx0XHRcdHJlbW90ZUNoYW5uZWw6IGJpbmRpbmcudGFyZ2V0Q2hhbm5lbCxcblx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IGJpbmRpbmcudHJhbnNwb3J0VHlwZSxcblx0XHRcdGRpcmVjdGlvbjogXCJvdXRnb2luZ1wiXG5cdFx0fSk7XG5cdFx0dGhpcy5fbWFya0Nvbm5lY3Rpb25Ob3RpZmllZChjb25uZWN0aW9uLCBtZXNzYWdlLnBheWxvYWQpO1xuXHR9XG5cdF9zZW5kU2lnbmFsVG9UYXJnZXQodGFyZ2V0LCB0cmFuc3BvcnRUeXBlLCBwYXlsb2FkLCBzaWduYWxUeXBlKSB7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwic2lnbmFsXCIsXG5cdFx0XHRjaGFubmVsOiBwYXlsb2FkLnRvID8/IHRoaXMuX25hbWUsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX25hbWUsXG5cdFx0XHR0cmFuc3BvcnRUeXBlLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHR0eXBlOiBzaWduYWxUeXBlLFxuXHRcdFx0XHQuLi5wYXlsb2FkXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRyYW5zcG9ydFR5cGUgPT09IFwid2Vic29ja2V0XCIpIHtcblx0XHRcdFx0dGFyZ2V0Py5zZW5kPy4oSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAodHJhbnNwb3J0VHlwZSA9PT0gXCJjaHJvbWUtcnVudGltZVwiKSB7XG5cdFx0XHRcdGNocm9tZS5ydW50aW1lPy5zZW5kTWVzc2FnZT8uKG1lc3NhZ2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAodHJhbnNwb3J0VHlwZSA9PT0gXCJjaHJvbWUtdGFic1wiKSB7XG5cdFx0XHRcdGNvbnN0IHRhYklkID0gcGF5bG9hZC50YWJJZDtcblx0XHRcdFx0aWYgKHRhYklkICE9IG51bGwpIGNocm9tZS50YWJzPy5zZW5kTWVzc2FnZT8uKHRhYklkLCBtZXNzYWdlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRyYW5zcG9ydFR5cGUgPT09IFwiY2hyb21lLXBvcnRcIikge1xuXHRcdFx0XHR0YXJnZXQ/LnBvc3RNZXNzYWdlPy4obWVzc2FnZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmICh0cmFuc3BvcnRUeXBlID09PSBcImNocm9tZS1leHRlcm5hbFwiKSB7XG5cdFx0XHRcdGlmIChwYXlsb2FkLmV4dGVybmFsSWQpIGNocm9tZS5ydW50aW1lPy5zZW5kTWVzc2FnZT8uKHBheWxvYWQuZXh0ZXJuYWxJZCwgbWVzc2FnZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRhcmdldD8ucG9zdE1lc3NhZ2U/LihtZXNzYWdlLCB7IHRyYW5zZmVyOiBbXSB9KTtcblx0XHR9IGNhdGNoIHt9XG5cdH1cblx0X21hcmtBbGxDb25uZWN0aW9uc0Nsb3NlZCgpIHtcblx0XHR0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkuY2xvc2VBbGwoKTtcblx0fVxuXHRfY3JlYXRlVHJhbnNwb3J0QmluZGluZyh0YXJnZXQsIHRyYW5zcG9ydFR5cGUsIHRhcmdldENoYW5uZWwsIG9wdGlvbnMpIHtcblx0XHRsZXQgc2VuZGVyO1xuXHRcdGxldCBjbGVhbnVwO1xuXHRcdHN3aXRjaCAodHJhbnNwb3J0VHlwZSkge1xuXHRcdFx0Y2FzZSBcIndvcmtlclwiOlxuXHRcdFx0Y2FzZSBcIm1lc3NhZ2UtcG9ydFwiOlxuXHRcdFx0Y2FzZSBcImJyb2FkY2FzdFwiOlxuXHRcdFx0XHRpZiAob3B0aW9ucy5hdXRvU3RhcnQgIT09IGZhbHNlICYmIHRhcmdldC5zdGFydCkgdGFyZ2V0LnN0YXJ0KCk7XG5cdFx0XHRcdHNlbmRlciA9IChtc2csIHRyYW5zZmVyKSA9PiB0YXJnZXQucG9zdE1lc3NhZ2UobXNnLCB7IHRyYW5zZmVyIH0pO1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAoKGUpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKGUuZGF0YSkpO1xuXHRcdFx0XHRcdHRhcmdldC5hZGRFdmVudExpc3RlbmVyPy4oXCJtZXNzYWdlXCIsIGxpc3RlbmVyKTtcblx0XHRcdFx0XHRjbGVhbnVwID0gKCkgPT4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgbGlzdGVuZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIndlYnNvY2tldFwiOlxuXHRcdFx0XHRzZW5kZXIgPSAobXNnKSA9PiB0YXJnZXQuc2VuZChKU09OLnN0cmluZ2lmeShtc2cpKTtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnN0IGxpc3RlbmVyID0gKChlKSA9PiB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9oYW5kbGVJbmNvbWluZyhKU09OLnBhcnNlKGUuZGF0YSkpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCB7fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHRhcmdldC5hZGRFdmVudExpc3RlbmVyPy4oXCJtZXNzYWdlXCIsIGxpc3RlbmVyKTtcblx0XHRcdFx0XHRjbGVhbnVwID0gKCkgPT4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgbGlzdGVuZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNocm9tZS1ydW50aW1lXCI6XG5cdFx0XHRcdHNlbmRlciA9IChtc2cpID0+IGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKG1zZyk7XG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb25zdCBsaXN0ZW5lciA9IChtc2cpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKG1zZyk7XG5cdFx0XHRcdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlPy5hZGRMaXN0ZW5lcj8uKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRjbGVhbnVwID0gKCkgPT4gY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlPy5yZW1vdmVMaXN0ZW5lcj8uKGxpc3RlbmVyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjaHJvbWUtdGFic1wiOlxuXHRcdFx0XHRzZW5kZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMudGFiSWQgIT0gbnVsbCkgY2hyb21lLnRhYnM/LnNlbmRNZXNzYWdlPy4ob3B0aW9ucy50YWJJZCwgbXNnKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnN0IGxpc3RlbmVyID0gKG1zZywgc2VuZGVyTWV0YSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMudGFiSWQgIT0gbnVsbCAmJiBzZW5kZXJNZXRhPy50YWI/LmlkICE9PSBvcHRpb25zLnRhYklkKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR0aGlzLl9oYW5kbGVJbmNvbWluZyhtc2cpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2U/LmFkZExpc3RlbmVyPy4obGlzdGVuZXIpO1xuXHRcdFx0XHRcdGNsZWFudXAgPSAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2U/LnJlbW92ZUxpc3RlbmVyPy4obGlzdGVuZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNocm9tZS1wb3J0XCI6XG5cdFx0XHRcdGlmICh0YXJnZXQ/LnBvc3RNZXNzYWdlICYmIHRhcmdldD8ub25NZXNzYWdlPy5hZGRMaXN0ZW5lcikge1xuXHRcdFx0XHRcdHNlbmRlciA9IChtc2cpID0+IHRhcmdldC5wb3N0TWVzc2FnZShtc2cpO1xuXHRcdFx0XHRcdGNvbnN0IGxpc3RlbmVyID0gKG1zZykgPT4gdGhpcy5faGFuZGxlSW5jb21pbmcobXNnKTtcblx0XHRcdFx0XHR0YXJnZXQub25NZXNzYWdlLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRjbGVhbnVwID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0Lm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQuZGlzY29ubmVjdD8uKCk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBwb3J0TmFtZSA9IG9wdGlvbnMucG9ydE5hbWUgPz8gdGFyZ2V0Q2hhbm5lbDtcblx0XHRcdFx0XHRjb25zdCBwb3J0ID0gb3B0aW9ucy50YWJJZCAhPSBudWxsICYmIGNocm9tZS50YWJzPy5jb25uZWN0ID8gY2hyb21lLnRhYnMuY29ubmVjdChvcHRpb25zLnRhYklkLCB7IG5hbWU6IHBvcnROYW1lIH0pIDogY2hyb21lLnJ1bnRpbWUuY29ubmVjdCh7IG5hbWU6IHBvcnROYW1lIH0pO1xuXHRcdFx0XHRcdHNlbmRlciA9IChtc2cpID0+IHBvcnQucG9zdE1lc3NhZ2UobXNnKTtcblx0XHRcdFx0XHRjb25zdCBsaXN0ZW5lciA9IChtc2cpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKG1zZyk7XG5cdFx0XHRcdFx0cG9ydC5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdFx0XHRcdGNsZWFudXAgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRwb3J0Lm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRwb3J0LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2gge31cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNocm9tZS1leHRlcm5hbFwiOlxuXHRcdFx0XHRzZW5kZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMuZXh0ZXJuYWxJZCkgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2Uob3B0aW9ucy5leHRlcm5hbElkLCBtc2cpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl9oYW5kbGVJbmNvbWluZyhtc2cpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbD8uYWRkTGlzdGVuZXI/LihsaXN0ZW5lcik7XG5cdFx0XHRcdFx0Y2xlYW51cCA9ICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsPy5yZW1vdmVMaXN0ZW5lcj8uKGxpc3RlbmVyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZWxmXCI6XG5cdFx0XHRcdHNlbmRlciA9IChtc2csIHRyYW5zZmVyKSA9PiBnbG9iYWxUaGlzLnBvc3RNZXNzYWdlPy4obXNnLCB7IHRyYW5zZmVyOiB0cmFuc2ZlciA/PyBbXSB9KTtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnN0IGxpc3RlbmVyID0gKChlKSA9PiB0aGlzLl9oYW5kbGVJbmNvbWluZyhlLmRhdGEpKTtcblx0XHRcdFx0XHRnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgbGlzdGVuZXIpO1xuXHRcdFx0XHRcdGNsZWFudXAgPSAoKSA9PiBnbG9iYWxUaGlzLnJlbW92ZUV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgbGlzdGVuZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKG9wdGlvbnMub25NZXNzYWdlKSBjbGVhbnVwID0gb3B0aW9ucy5vbk1lc3NhZ2UoKG1zZykgPT4gdGhpcy5faGFuZGxlSW5jb21pbmcobXNnKSk7XG5cdFx0XHRcdHNlbmRlciA9IChtc2cpID0+IHRhcmdldD8ucG9zdE1lc3NhZ2U/Lihtc2cpO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0dGFyZ2V0LFxuXHRcdFx0dGFyZ2V0Q2hhbm5lbCxcblx0XHRcdHRyYW5zcG9ydFR5cGUsXG5cdFx0XHRzZW5kZXIsXG5cdFx0XHRjbGVhbnVwLFxuXHRcdFx0cG9zdE1lc3NhZ2U6IChtZXNzYWdlLCBvcHRpb25zKSA9PiBzZW5kZXI/LihtZXNzYWdlLCBvcHRpb25zKSxcblx0XHRcdHN0YXJ0OiAoKSA9PiB0YXJnZXQ/LnN0YXJ0Py4oKSxcblx0XHRcdGNsb3NlOiAoKSA9PiB0YXJnZXQ/LmNsb3NlPy4oKVxuXHRcdH07XG5cdH1cblx0X3NlbmQodGFyZ2V0Q2hhbm5lbCwgbWVzc2FnZSwgdHJhbnNmZXIpIHtcblx0XHRjb25zdCBiaW5kaW5nID0gdGhpcy5fdHJhbnNwb3J0cy5nZXQodGFyZ2V0Q2hhbm5lbCkgPz8gdGhpcy5fZGVmYXVsdFRyYW5zcG9ydDtcblx0XHQoYmluZGluZz8uc2VuZGVyID8/IGJpbmRpbmc/LnBvc3RNZXNzYWdlKT8uY2FsbChiaW5kaW5nLCBtZXNzYWdlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2dldERlZmF1bHRUYXJnZXQoKSB7XG5cdFx0aWYgKHRoaXMuX2RlZmF1bHRUcmFuc3BvcnQpIHJldHVybiB0aGlzLl9kZWZhdWx0VHJhbnNwb3J0LnRhcmdldENoYW5uZWw7XG5cdFx0cmV0dXJuIFwid29ya2VyXCI7XG5cdH1cblx0X2luZmVyVGFyZ2V0Q2hhbm5lbCh0YXJnZXQsIHRyYW5zcG9ydFR5cGUpIHtcblx0XHRpZiAodHJhbnNwb3J0VHlwZSA9PT0gXCJ3b3JrZXJcIikgcmV0dXJuIFwid29ya2VyXCI7XG5cdFx0aWYgKHRyYW5zcG9ydFR5cGUgPT09IFwiYnJvYWRjYXN0XCIgJiYgdGFyZ2V0Lm5hbWUpIHJldHVybiB0YXJnZXQubmFtZTtcblx0XHRpZiAodHJhbnNwb3J0VHlwZSA9PT0gXCJzZWxmXCIpIHJldHVybiBcInNlbGZcIjtcblx0XHRyZXR1cm4gYCR7dHJhbnNwb3J0VHlwZX0tJHtVVUlEdjQoKS5zbGljZSgwLCA4KX1gO1xuXHR9XG5cdF9jcmVhdGVQcm94eSh0YXJnZXRDaGFubmVsLCBiYXNlUGF0aCkge1xuXHRcdGNvbnN0IGludm9rZXIgPSAoYWN0aW9uLCBwYXRoLCBhcmdzKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnZva2UodGFyZ2V0Q2hhbm5lbCwgYWN0aW9uLCBwYXRoLCBhcmdzKTtcblx0XHR9O1xuXHRcdHJldHVybiBjcmVhdGVSZW1vdGVQcm94eShpbnZva2VyLCB7XG5cdFx0XHRjaGFubmVsOiB0YXJnZXRDaGFubmVsLFxuXHRcdFx0YmFzZVBhdGgsXG5cdFx0XHRjYWNoZTogdHJ1ZSxcblx0XHRcdHRpbWVvdXQ6IHRoaXMuX2NvbmZpZy50aW1lb3V0XG5cdFx0fSk7XG5cdH1cblx0X2lzV29ya2VyQ29udGV4dCgpIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0XCJ3b3JrZXJcIixcblx0XHRcdFwic2hhcmVkLXdvcmtlclwiLFxuXHRcdFx0XCJzZXJ2aWNlLXdvcmtlclwiXG5cdFx0XS5pbmNsdWRlcyh0aGlzLl9jb250ZXh0VHlwZSk7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVVbmlmaWVkQ2hhbm5lbChjb25maWcpIHtcblx0cmV0dXJuIG5ldyBVbmlmaWVkQ2hhbm5lbChjb25maWcpO1xufVxuZnVuY3Rpb24gc2V0dXBVbmlmaWVkQ2hhbm5lbChuYW1lLCB0YXJnZXQsIG9wdGlvbnMpIHtcblx0cmV0dXJuIGNyZWF0ZVVuaWZpZWRDaGFubmVsKHtcblx0XHRuYW1lLFxuXHRcdC4uLm9wdGlvbnNcblx0fSkuYXR0YWNoKHRhcmdldCwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBjcmVhdGVVbmlmaWVkQ2hhbm5lbFBhaXIobmFtZTEsIG5hbWUyLCBvcHRpb25zKSB7XG5cdGNvbnN0IG1jID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG5cdG1jLnBvcnQxLnN0YXJ0KCk7XG5cdG1jLnBvcnQyLnN0YXJ0KCk7XG5cdHJldHVybiB7XG5cdFx0Y2hhbm5lbDE6IGNyZWF0ZVVuaWZpZWRDaGFubmVsKHtcblx0XHRcdG5hbWU6IG5hbWUxLFxuXHRcdFx0YXV0b0xpc3RlbjogZmFsc2UsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fSkuYXR0YWNoKG1jLnBvcnQxLCB7IHRhcmdldENoYW5uZWw6IG5hbWUyIH0pLFxuXHRcdGNoYW5uZWwyOiBjcmVhdGVVbmlmaWVkQ2hhbm5lbCh7XG5cdFx0XHRuYW1lOiBuYW1lMixcblx0XHRcdGF1dG9MaXN0ZW46IGZhbHNlLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pLmF0dGFjaChtYy5wb3J0MiwgeyB0YXJnZXRDaGFubmVsOiBuYW1lMSB9KSxcblx0XHRtZXNzYWdlQ2hhbm5lbDogbWNcblx0fTtcbn1cbnZhciBDSEFOTkVMX1JFR0lTVFJZID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbmZ1bmN0aW9uIGdldFVuaWZpZWRDaGFubmVsKG5hbWUsIGNvbmZpZykge1xuXHRpZiAoIUNIQU5ORUxfUkVHSVNUUlkuaGFzKG5hbWUpKSBDSEFOTkVMX1JFR0lTVFJZLnNldChuYW1lLCBjcmVhdGVVbmlmaWVkQ2hhbm5lbCh7XG5cdFx0bmFtZSxcblx0XHQuLi5jb25maWdcblx0fSkpO1xuXHRyZXR1cm4gQ0hBTk5FTF9SRUdJU1RSWS5nZXQobmFtZSk7XG59XG5mdW5jdGlvbiBnZXRVbmlmaWVkQ2hhbm5lbE5hbWVzKCkge1xuXHRyZXR1cm4gWy4uLkNIQU5ORUxfUkVHSVNUUlkua2V5cygpXTtcbn1cbmZ1bmN0aW9uIGNsb3NlVW5pZmllZENoYW5uZWwobmFtZSkge1xuXHRjb25zdCBjaGFubmVsID0gQ0hBTk5FTF9SRUdJU1RSWS5nZXQobmFtZSk7XG5cdGlmIChjaGFubmVsKSB7XG5cdFx0Y2hhbm5lbC5jbG9zZSgpO1xuXHRcdHJldHVybiBDSEFOTkVMX1JFR0lTVFJZLmRlbGV0ZShuYW1lKTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG52YXIgV09SS0VSX0NIQU5ORUwgPSBudWxsO1xuZnVuY3Rpb24gZ2V0V29ya2VyQ2hhbm5lbCgpIHtcblx0aWYgKCFXT1JLRVJfQ0hBTk5FTCkge1xuXHRcdGNvbnN0IGNvbnRleHRUeXBlID0gZGV0ZWN0Q29udGV4dFR5cGUoKTtcblx0XHRpZiAoW1xuXHRcdFx0XCJ3b3JrZXJcIixcblx0XHRcdFwic2hhcmVkLXdvcmtlclwiLFxuXHRcdFx0XCJzZXJ2aWNlLXdvcmtlclwiXG5cdFx0XS5pbmNsdWRlcyhjb250ZXh0VHlwZSkpIFdPUktFUl9DSEFOTkVMID0gY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdFx0bmFtZTogXCJ3b3JrZXJcIixcblx0XHRcdGF1dG9MaXN0ZW46IHRydWVcblx0XHR9KTtcblx0XHRlbHNlIFdPUktFUl9DSEFOTkVMID0gY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdFx0bmFtZTogXCJob3N0XCIsXG5cdFx0XHRhdXRvTGlzdGVuOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBXT1JLRVJfQ0hBTk5FTDtcbn1cbmZ1bmN0aW9uIGV4cG9zZUZyb21VbmlmaWVkKG5hbWUsIG9iaikge1xuXHRnZXRXb3JrZXJDaGFubmVsKCkuZXhwb3NlKG5hbWUsIG9iaik7XG59XG5mdW5jdGlvbiByZW1vdGVGcm9tVW5pZmllZChtb2R1bGVOYW1lLCB0YXJnZXRDaGFubmVsKSB7XG5cdHJldHVybiBnZXRXb3JrZXJDaGFubmVsKCkucmVtb3RlKG1vZHVsZU5hbWUsIHRhcmdldENoYW5uZWwpO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9wcm94eS9SZXF1ZXN0UHJveHkudHNcbnZhciB3cmFwQ2hhbm5lbCA9IChjb25uZWN0Q2hhbm5lbCwgaG9zdCA9IG51bGwpID0+IHtcblx0cmV0dXJuIGdldFdvcmtlckNoYW5uZWwoKS5wcm94eShjb25uZWN0Q2hhbm5lbCk7XG59O1xudmFyIHdyYXBPYnNlcnZhYmxlQ2hhbm5lbCA9IChjaGFubmVsT2JzLCBjb25uZWN0Q2hhbm5lbCwgb3B0aW9ucyA9IHt9KSA9PiB3cmFwQ2hhbm5lbChjb25uZWN0Q2hhbm5lbCwgbnVsbCk7XG52YXIgbWFrZU9ic2VydmFibGVSZXF1ZXN0UHJveHkgPSAoZGVzY3JpcHRvciwgY2hhbm5lbE9icywgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdHJldHVybiBnZXRXb3JrZXJDaGFubmVsKCkud3JhcERlc2NyaXB0b3IoZGVzY3JpcHRvciwgZGVzY3JpcHRvcj8uY2hhbm5lbCA/PyBvcHRpb25zPy5jb25uZWN0Q2hhbm5lbCk7XG59O1xuZnVuY3Rpb24gY3JlYXRlT2JzZXJ2YWJsZUNoYW5uZWwodHJhbnNwb3J0LCBjaGFubmVsTmFtZSkge1xuXHRjb25zdCBjaGFubmVsID0gY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdG5hbWU6IGNoYW5uZWxOYW1lLFxuXHRcdGF1dG9MaXN0ZW46IGZhbHNlXG5cdH0pO1xuXHRjaGFubmVsLmNvbm5lY3QodHJhbnNwb3J0LCB7IHRhcmdldENoYW5uZWw6IGNoYW5uZWxOYW1lIH0pO1xuXHRyZXR1cm4ge1xuXHRcdG9ic2VydmFibGU6IGNoYW5uZWwsXG5cdFx0d3JhcDogKGNvbm5lY3RDaGFubmVsLCBvcHRzKSA9PiBjaGFubmVsLnByb3h5KGNvbm5lY3RDaGFubmVsKSxcblx0XHRzdWJzY3JpYmU6IChvYnMpID0+IGNoYW5uZWwuc3Vic2NyaWJlKG9icyksXG5cdFx0c2VuZDogKG1zZykgPT4gY2hhbm5lbC5uZXh0KG1zZyksXG5cdFx0cmVxdWVzdDogKG1zZykgPT4gY2hhbm5lbC5pbnZva2UoY2hhbm5lbE5hbWUsIFdSZWZsZWN0QWN0aW9uLkNBTEwsIFtdLCBbbXNnXSlcblx0fTtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL2NvcmUvQWxpYXMudHNcbnZhciBUUyA9IHtcblx0cmpiOiBcInJlamVjdEJ5XCIsXG5cdHJ2YjogXCJyZXNvbHZlQnlcIixcblx0cmo6IFwicmVqZWN0XCIsXG5cdHJ2OiBcInJlc29sdmVcIixcblx0Y3I6IFwiY3JlYXRlXCIsXG5cdGNzOiBcImNyZWF0ZVN5bmNcIixcblx0YTogXCJhcnJheVwiLFxuXHR0YTogXCJ0eXBlZGFycmF5XCIsXG5cdHVkZjogXCJ1bmRlZmluZWRcIlxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL2NvcmUvVXNlZnVsLnRzXG52YXIgVHJhbnNmZXJhYmxlID0gW1xuXHR0eXBlb2YgQXJyYXlCdWZmZXIgIT0gVFMudWRmID8gQXJyYXlCdWZmZXIgOiBudWxsLFxuXHR0eXBlb2YgTWVzc2FnZVBvcnQgIT0gVFMudWRmID8gTWVzc2FnZVBvcnQgOiBudWxsLFxuXHR0eXBlb2YgUmVhZGFibGVTdHJlYW0gIT0gVFMudWRmID8gUmVhZGFibGVTdHJlYW0gOiBudWxsLFxuXHR0eXBlb2YgV3JpdGFibGVTdHJlYW0gIT0gVFMudWRmID8gV3JpdGFibGVTdHJlYW0gOiBudWxsLFxuXHR0eXBlb2YgVHJhbnNmb3JtU3RyZWFtICE9IFRTLnVkZiA/IFRyYW5zZm9ybVN0cmVhbSA6IG51bGwsXG5cdHR5cGVvZiBXZWJUcmFuc3BvcnRSZWNlaXZlU3RyZWFtICE9IFRTLnVkZiA/IFdlYlRyYW5zcG9ydFJlY2VpdmVTdHJlYW0gOiBudWxsLFxuXHR0eXBlb2YgV2ViVHJhbnNwb3J0U2VuZFN0cmVhbSAhPSBUUy51ZGYgPyBXZWJUcmFuc3BvcnRTZW5kU3RyZWFtIDogbnVsbCxcblx0dHlwZW9mIEF1ZGlvRGF0YSAhPSBUUy51ZGYgPyBBdWRpb0RhdGEgOiBudWxsLFxuXHR0eXBlb2YgSW1hZ2VCaXRtYXAgIT0gVFMudWRmID8gSW1hZ2VCaXRtYXAgOiBudWxsLFxuXHR0eXBlb2YgVmlkZW9GcmFtZSAhPSBUUy51ZGYgPyBWaWRlb0ZyYW1lIDogbnVsbCxcblx0dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyAhPSBUUy51ZGYgPyBPZmZzY3JlZW5DYW52YXMgOiBudWxsLFxuXHR0eXBlb2YgUlRDRGF0YUNoYW5uZWwgIT0gVFMudWRmID8gUlRDRGF0YUNoYW5uZWwgOiBudWxsXG5dLmZpbHRlcigoRSkgPT4gRSAhPSBudWxsKTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdXRpbHMvRW52LnRzXG52YXIgaXNTZXJ2aWNlV29ya2VyQ29udGV4dCA9ICgpID0+IHtcblx0dHJ5IHtcblx0XHRjb25zdCBTV0dTID0gZ2xvYmFsVGhpcz8uU2VydmljZVdvcmtlckdsb2JhbFNjb3BlO1xuXHRcdHJldHVybiB0eXBlb2YgU1dHUyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWxUaGlzIGluc3RhbmNlb2YgU1dHUztcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIGlzQ2hyb21lRXh0ZW5zaW9uQ29udGV4dCA9ICgpID0+IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gdHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhIWNocm9tZT8ucnVudGltZT8uaWQ7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBkZXRlY3RFeGVjdXRpb25Db250ZXh0ID0gKCkgPT4ge1xuXHRpZiAoaXNDaHJvbWVFeHRlbnNpb25Db250ZXh0KCkpIHJldHVybiBcImNocm9tZS1leHRlbnNpb25cIjtcblx0aWYgKGlzU2VydmljZVdvcmtlckNvbnRleHQoKSkgcmV0dXJuIFwic2VydmljZS13b3JrZXJcIjtcblx0dHJ5IHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJtYWluXCI7XG5cdH0gY2F0Y2gge31cblx0cmV0dXJuIFwidW5rbm93blwiO1xufTtcbnZhciBzdXBwb3J0c0RlZGljYXRlZFdvcmtlcnMgPSAoKSA9PiB7XG5cdGlmIChpc1NlcnZpY2VXb3JrZXJDb250ZXh0KCkpIHJldHVybiBmYWxzZTtcblx0dHJ5IHtcblx0XHRyZXR1cm4gdHlwZW9mIFdvcmtlciAhPT0gXCJ1bmRlZmluZWRcIjtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuZnVuY3Rpb24gZ2V0V29ya2VyUmVzb2x2ZUJhc2VVcmwoKSB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgaHJlZiA9IGdsb2JhbFRoaXMubG9jYXRpb24/LmhyZWY7XG5cdFx0aWYgKHR5cGVvZiBocmVmID09PSBcInN0cmluZ1wiICYmIGhyZWYubGVuZ3RoID4gMCkgcmV0dXJuIGhyZWY7XG5cdH0gY2F0Y2gge31cblx0dHJ5IHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBkb2N1bWVudC5iYXNlVVJJID09PSBcInN0cmluZ1wiICYmIGRvY3VtZW50LmJhc2VVUkkubGVuZ3RoID4gMCkgcmV0dXJuIGRvY3VtZW50LmJhc2VVUkk7XG5cdH0gY2F0Y2gge31cblx0cmV0dXJuIFwiXCI7XG59XG5mdW5jdGlvbiByZXNvbHZlV29ya2VyU3BlY2lmaWVySHJlZihzcGVjKSB7XG5cdGNvbnN0IGJhc2UgPSBnZXRXb3JrZXJSZXNvbHZlQmFzZVVybCgpO1xuXHRpZiAoIWJhc2UubGVuZ3RoKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiW3VuaWZvcm1dIE5vIGJhc2UgVVJMIGZvciB3b3JrZXIgcmVzb2x1dGlvbiAobWlzc2luZyBsb2NhdGlvbiAvIGRvY3VtZW50LmJhc2VVUkkpXCIpO1xuXHRjb25zdCBub3JtYWxpemVkID0gc3BlYy5zdGFydHNXaXRoKFwiL1wiKSA/IHNwZWMucmVwbGFjZSgvXlxcLy8sIFwiLi9cIikgOiBzcGVjO1xuXHRyZXR1cm4gbmV3IFVSTChub3JtYWxpemVkLCBiYXNlKS5ocmVmO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9jaGFubmVsL0NoYW5uZWxzLnRzXG52YXIgUmVtb3RlQ2hhbm5lbHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIFNFTEZfQ0hBTk5FTCA9IHtcblx0bmFtZTogXCJ1bmtub3duXCIsXG5cdGluc3RhbmNlOiBudWxsXG59O1xudmFyIENIQU5ORUxfTUFQID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBpc1JlZmxlY3RBY3Rpb24kMSA9IChhY3Rpb24pID0+IFsuLi5PYmplY3QudmFsdWVzKFdSZWZsZWN0QWN0aW9uKV0uaW5jbHVkZXMoYWN0aW9uKTtcbnZhciBsb2FkV29ya2VyID0gKFdYKSA9PiB7XG5cdGlmIChXWCBpbnN0YW5jZW9mIFdvcmtlcikgcmV0dXJuIFdYO1xuXHRpZiAoV1ggaW5zdGFuY2VvZiBVUkwpIHJldHVybiBuZXcgV29ya2VyKFdYLmhyZWYsIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0aWYgKHR5cGVvZiBXWCA9PT0gXCJmdW5jdGlvblwiKSB0cnkge1xuXHRcdHJldHVybiBuZXcgV1goeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gV1goeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHR9XG5cdGlmICh0eXBlb2YgV1ggPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoV1guc3RhcnRzV2l0aChcIi9cIikpIHJldHVybiBuZXcgV29ya2VyKHJlc29sdmVXb3JrZXJTcGVjaWZpZXJIcmVmKFdYLnJlcGxhY2UoL15cXC8vLCBcIi4vXCIpKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRcdGlmIChVUkwuY2FuUGFyc2UoV1gpIHx8IFdYLnN0YXJ0c1dpdGgoXCIuL1wiKSkgcmV0dXJuIG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYoV1gpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdFx0cmV0dXJuIG5ldyBXb3JrZXIoVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbV1hdLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiIH0pKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHR9XG5cdGlmIChXWCBpbnN0YW5jZW9mIEJsb2IgfHwgV1ggaW5zdGFuY2VvZiBGaWxlKSByZXR1cm4gbmV3IFdvcmtlcihVUkwuY3JlYXRlT2JqZWN0VVJMKFdYKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRyZXR1cm4gV1ggPz8gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGwpO1xufTtcbnZhciBSZW1vdGVDaGFubmVsSGVscGVyID0gY2xhc3Mge1xuXHRjaGFubmVsTmFtZTtcblx0b3B0aW9ucztcblx0X2NoYW5uZWw7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBvcHRpb25zID0ge30pIHtcblx0XHR0aGlzLmNoYW5uZWxOYW1lID0gY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLl9jaGFubmVsID0gZ2V0V29ya2VyQ2hhbm5lbCgpO1xuXHR9XG5cdHJlcXVlc3QocGF0aCwgYWN0aW9uLCBhcmdzLCBvcHRpb25zID0ge30pIHtcblx0XHRpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIpIHBhdGggPSBbcGF0aF07XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYWN0aW9uKSAmJiBpc1JlZmxlY3RBY3Rpb24kMShwYXRoKSkge1xuXHRcdFx0b3B0aW9ucyA9IGFyZ3M7XG5cdFx0XHRhcmdzID0gYWN0aW9uO1xuXHRcdFx0YWN0aW9uID0gcGF0aDtcblx0XHRcdHBhdGggPSBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuaW52b2tlKHRoaXMuY2hhbm5lbE5hbWUsIGFjdGlvbiwgcGF0aCwgYXJncyk7XG5cdH1cblx0ZG9JbXBvcnRNb2R1bGUodXJsLCBvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuaW1wb3J0KHVybCwgdGhpcy5jaGFubmVsTmFtZSk7XG5cdH1cbn07XG52YXIgQ2hhbm5lbEhhbmRsZXIgPSBjbGFzcyB7XG5cdGNoYW5uZWw7XG5cdG9wdGlvbnM7XG5cdF91bmlmaWVkO1xuXHRicm9hZGNhc3RzID0ge307XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWwsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHRoaXMuY2hhbm5lbCA9IGNoYW5uZWw7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLl91bmlmaWVkID0gY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdFx0bmFtZTogY2hhbm5lbCxcblx0XHRcdGF1dG9MaXN0ZW46IGZhbHNlXG5cdFx0fSk7XG5cdFx0U0VMRl9DSEFOTkVMLm5hbWUgPSBjaGFubmVsO1xuXHRcdFNFTEZfQ0hBTk5FTC5pbnN0YW5jZSA9IHRoaXM7XG5cdH1cblx0Y3JlYXRlUmVtb3RlQ2hhbm5lbChjaGFubmVsLCBvcHRpb25zID0ge30sIGJyb2FkY2FzdCkge1xuXHRcdGlmIChicm9hZGNhc3QpIHtcblx0XHRcdHRoaXMuX3VuaWZpZWQuYXR0YWNoKGJyb2FkY2FzdCwgeyB0YXJnZXRDaGFubmVsOiBjaGFubmVsIH0pO1xuXHRcdFx0dGhpcy5icm9hZGNhc3RzW2NoYW5uZWxdID0gYnJvYWRjYXN0O1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBSZW1vdGVDaGFubmVsSGVscGVyKGNoYW5uZWwsIG9wdGlvbnMpKTtcblx0fVxuXHRnZXRDaGFubmVsKCkge1xuXHRcdHJldHVybiB0aGlzLmNoYW5uZWw7XG5cdH1cblx0cmVxdWVzdChwYXRoLCBhY3Rpb24sIGFyZ3MsIG9wdGlvbnMgPSB7fSwgdG9DaGFubmVsID0gXCJ3b3JrZXJcIikge1xuXHRcdGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIikgcGF0aCA9IFtwYXRoXTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShhY3Rpb24pICYmIGlzUmVmbGVjdEFjdGlvbiQxKHBhdGgpKSB7XG5cdFx0XHR0b0NoYW5uZWwgPSBvcHRpb25zO1xuXHRcdFx0b3B0aW9ucyA9IGFyZ3M7XG5cdFx0XHRhcmdzID0gYWN0aW9uO1xuXHRcdFx0YWN0aW9uID0gcGF0aDtcblx0XHRcdHBhdGggPSBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX3VuaWZpZWQuaW52b2tlKHRvQ2hhbm5lbCwgYWN0aW9uLCBwYXRoLCBhcmdzKTtcblx0fVxuXHRyZXNvbHZlUmVzcG9uc2UocmVxSWQsIHJlc3VsdCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcblx0fVxuXHRhc3luYyBoYW5kbGVBbmRSZXNwb25zZShyZXF1ZXN0LCByZXFJZCwgcmVzcG9uc2VGbikge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVJlcXVlc3QocmVxdWVzdCwgcmVxSWQsIHRoaXMuY2hhbm5lbCk7XG5cdFx0aWYgKCFyZXN1bHQpIHJldHVybjtcblx0XHRyZXNwb25zZUZuPy4ocmVzdWx0LnJlc3BvbnNlLCByZXN1bHQudHJhbnNmZXIpO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3VuaWZpZWQuY2xvc2UoKTtcblx0fVxufTtcbnZhciBpbml0Q2hhbm5lbEhhbmRsZXIgPSAoY2hhbm5lbCA9IFwiJGhvc3QkXCIpID0+IHtcblx0aWYgKFNFTEZfQ0hBTk5FTD8uaW5zdGFuY2UgJiYgY2hhbm5lbCA9PT0gXCIkaG9zdCRcIikgcmV0dXJuIFNFTEZfQ0hBTk5FTC5pbnN0YW5jZTtcblx0aWYgKENIQU5ORUxfTUFQLmhhcyhjaGFubmVsKSkgcmV0dXJuIENIQU5ORUxfTUFQLmdldChjaGFubmVsKSA/PyBudWxsO1xuXHRjb25zdCAkY2hhbm5lbCA9IG5ldyBDaGFubmVsSGFuZGxlcihjaGFubmVsKTtcblx0aWYgKGNoYW5uZWwgPT09IFwiJGhvc3QkXCIpIHtcblx0XHRTRUxGX0NIQU5ORUwubmFtZSA9IGNoYW5uZWw7XG5cdFx0U0VMRl9DSEFOTkVMLmluc3RhbmNlID0gJGNoYW5uZWw7XG5cdH1cblx0Q0hBTk5FTF9NQVAuc2V0KGNoYW5uZWwsICRjaGFubmVsKTtcblx0cmV0dXJuICRjaGFubmVsO1xufTtcbnZhciBjcmVhdGVIb3N0Q2hhbm5lbCA9IChjaGFubmVsID0gXCIkaG9zdCRcIikgPT4gaW5pdENoYW5uZWxIYW5kbGVyKGNoYW5uZWwpO1xudmFyIGNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsID0gKGNoYW5uZWwsIG9wdGlvbnMgPSB7fSwgYnJvYWRjYXN0ID0gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogbnVsbCkgPT4ge1xuXHRjb25zdCAkaG9zdCA9IGNyZWF0ZUhvc3RDaGFubmVsKGNoYW5uZWwgPz8gXCIkaG9zdCRcIik7XG5cdHJldHVybiAkaG9zdD8uY3JlYXRlUmVtb3RlQ2hhbm5lbD8uKGNoYW5uZWwsIG9wdGlvbnMsIGJyb2FkY2FzdCkgPz8gJGhvc3Q7XG59O1xudmFyICRjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbCA9IChjaGFubmVsLCBvcHRpb25zID0ge30sIGJyb2FkY2FzdCkgPT4ge1xuXHRpZiAoY2hhbm5lbCA9PSBudWxsIHx8IGJyb2FkY2FzdCkgcmV0dXJuO1xuXHRpZiAoUmVtb3RlQ2hhbm5lbHMuaGFzKGNoYW5uZWwpKSByZXR1cm4gUmVtb3RlQ2hhbm5lbHMuZ2V0KGNoYW5uZWwpO1xuXHRjb25zdCByZXN1bHQgPSB7XG5cdFx0Y2hhbm5lbCxcblx0XHRpbnN0YW5jZTogU0VMRl9DSEFOTkVMLmluc3RhbmNlLFxuXHRcdHJlbW90ZTogUHJvbWlzZS5yZXNvbHZlKG5ldyBSZW1vdGVDaGFubmVsSGVscGVyKGNoYW5uZWwsIG9wdGlvbnMpKVxuXHR9O1xuXHRSZW1vdGVDaGFubmVscy5zZXQoY2hhbm5lbCwgcmVzdWx0KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3N0b3JhZ2UvRGF0YUJhc2UudHNcbnZhciBoYW5kTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgd3JhcE1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIGRlc2NNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBSRUFEID0gKHRhcmdldCwga2V5KSA9PiB7XG5cdHJldHVybiBoYW5kTWFwLmdldCh0YXJnZXQpPy5ba2V5XTtcbn07XG52YXIgb2JqZWN0VG9SZWYgPSAob2JqLCBjaGFubmVsID0gU0VMRl9DSEFOTkVMPy5uYW1lLCB0b1RyYW5zZmVyKSA9PiB7XG5cdGlmICh0eXBlb2Ygb2JqID09IFwib2JqZWN0XCIgJiYgb2JqICE9IG51bGwgfHwgdHlwZW9mIG9iaiA9PSBcImZ1bmN0aW9uXCIgJiYgb2JqICE9IG51bGwpIHtcblx0XHRpZiAod3JhcE1hcC5oYXMob2JqKSkgcmV0dXJuIHdyYXBNYXAuZ2V0KG9iaik7XG5cdFx0aWYgKGhhbmRNYXAuaGFzKG9iaikpIHJldHVybiBoYW5kTWFwLmdldChvYmopO1xuXHRcdGlmIChpc05vdENvbXBsZXhBcnJheShvYmopKSByZXR1cm4gb2JqO1xuXHRcdGlmICh0b1RyYW5zZmVyPy5pbmNsdWRlcz8uKG9iaikpIHJldHVybiBvYmo7XG5cdFx0aWYgKGNoYW5uZWwgPT0gU0VMRl9DSEFOTkVMPy5uYW1lKSByZXR1cm4gb2JqO1xuXHRcdHJldHVybiB7XG5cdFx0XHQkaXNEZXNjcmlwdG9yOiB0cnVlLFxuXHRcdFx0cGF0aDogcmVnaXN0ZXJlZEluUGF0aC5nZXQob2JqKSA/PyAoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXRoID0gW1VVSUR2NCgpXTtcblx0XHRcdFx0d3JpdGVCeVBhdGgocGF0aCwgb2JqKTtcblx0XHRcdFx0cmV0dXJuIHBhdGg7XG5cdFx0XHR9KSgpLFxuXHRcdFx0b3duZXI6IFNFTEZfQ0hBTk5FTD8ubmFtZSxcblx0XHRcdGNoYW5uZWwsXG5cdFx0XHRwcmltaXRpdmU6IGlzUHJpbWl0aXZlKG9iaiksXG5cdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRhcmd1bWVudENvdW50OiBvYmogaW5zdGFuY2VvZiBGdW5jdGlvbiA/IG9iai5sZW5ndGggOiAtMVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGlzQ2FuSnVzdFJldHVybihvYmopID8gb2JqIDogbnVsbDtcbn07XG52YXIgJHJlcXVlc3RIYW5kbGVyID0gU3ltYm9sLmZvcihcIkByZXF1ZXN0SGFuZGxlclwiKTtcbnZhciAkZGVzY3JpcHRvciA9IFN5bWJvbC5mb3IoXCJAZGVzY3JpcHRvclwiKTtcbnZhciBub3JtYWxpemVSZWYgPSAodikgPT4ge1xuXHRpZiAoaXNDYW5KdXN0UmV0dXJuKHYpKSByZXR1cm4gdjtcblx0aWYgKHY/LlskZGVzY3JpcHRvcl0pIHJldHVybiB2O1xuXHRpZiAodj8uJGlzRGVzY3JpcHRvcikgcmV0dXJuIG1ha2VSZXF1ZXN0UHJveHkodiwgYXN5bmMgKCkgPT4gdm9pZCAwKTtcblx0aWYgKGlzTm90Q29tcGxleEFycmF5KHYpKSByZXR1cm4gdjtcblx0cmV0dXJuIG51bGw7XG59O1xudmFyIHVud3JhcERlc2NyaXB0b3JGcm9tUHJveHkgPSAodGFyZ2V0KSA9PiB7XG5cdGlmICh0eXBlb2YgdGFyZ2V0ICE9IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgdGFyZ2V0ICE9IFwib2JqZWN0XCIgfHwgdGFyZ2V0ID09IG51bGwpIHJldHVybiB0YXJnZXQ7XG5cdHJldHVybiB3cmFwTWFwLmdldCh0YXJnZXQpID8/IGhhbmRNYXAuZ2V0KHRhcmdldCkgPz8gdGFyZ2V0O1xufTtcbnZhciB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5UmVjdXJzaXZlID0gKHRhcmdldCkgPT4ge1xuXHRpZiAodHlwZW9mIHRhcmdldCAhPSBcIm9iamVjdFwiICYmIHR5cGVvZiB0YXJnZXQgIT0gXCJmdW5jdGlvblwiIHx8IHRhcmdldCA9PSBudWxsKSByZXR1cm4gdGFyZ2V0O1xuXHR0YXJnZXQgPSB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5KHRhcmdldCk7XG5cdGlmICh0eXBlb2YgdGFyZ2V0ICE9IFwib2JqZWN0XCIgJiYgdHlwZW9mIHRhcmdldCAhPSBcImZ1bmN0aW9uXCIgfHwgdGFyZ2V0ID09IG51bGwpIHJldHVybiB0YXJnZXQ7XG5cdGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHJldHVybiB0YXJnZXQubWFwKHVud3JhcERlc2NyaXB0b3JGcm9tUHJveHlSZWN1cnNpdmUpO1xuXHRpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWFwKSByZXR1cm4gbmV3IE1hcChBcnJheS5mcm9tKHRhcmdldC5lbnRyaWVzKCkpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBba2V5LCB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5UmVjdXJzaXZlKHZhbHVlKV0pKTtcblx0aWYgKHRhcmdldCBpbnN0YW5jZW9mIFNldCkgcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbSh0YXJnZXQudmFsdWVzKCkpLm1hcCh1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5UmVjdXJzaXZlKSk7XG5cdGlmICh0eXBlb2YgdGFyZ2V0ID09IFwib2JqZWN0XCIpIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRhcmdldCkpIHRhcmdldFtrZXldID0gdW53cmFwRGVzY3JpcHRvckZyb21Qcm94eVJlY3Vyc2l2ZSh0YXJnZXRba2V5XSk7XG5cdHJldHVybiB0YXJnZXQ7XG59O1xudmFyIHN0b3JlZERhdGEgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIHJlZ2lzdGVyZWRJblBhdGggPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciB0cmF2ZXJzZUJ5UGF0aCA9IChvYmosIHBhdGgpID0+IHtcblx0aWYgKHBhdGggIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShwYXRoKSkgcGF0aCA9IFtwYXRoXTtcblx0aWYgKHBhdGggPT0gbnVsbCB8fCBwYXRoPy5sZW5ndGggPCAxKSByZXR1cm4gb2JqO1xuXHRjb25zdCAkZGVzYyA9IG9iaj8uWyRkZXNjcmlwdG9yXSA/PyAob2JqPy4kaXNEZXNjcmlwdG9yID8gb2JqIDogbnVsbCk7XG5cdGlmICgkZGVzYyAmJiAkZGVzYz8ub3duZXIgPT0gU0VMRl9DSEFOTkVMPy5uYW1lKSBvYmogPSByZWFkQnlQYXRoKCRkZXNjPy5wYXRoKSA/PyBvYmo7XG5cdGlmIChpc1ByaW1pdGl2ZShvYmopKSByZXR1cm4gb2JqO1xuXHRmb3IgKGNvbnN0IGtleSBvZiBwYXRoKSB7XG5cdFx0b2JqID0gb2JqPy5ba2V5XTtcblx0XHRpZiAob2JqID09IG51bGwpIHJldHVybiBvYmo7XG5cdH1cblx0cmV0dXJuIG9iajtcbn07XG52YXIgcmVhZEJ5UGF0aCA9IChwYXRoKSA9PiB7XG5cdGlmIChwYXRoICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkocGF0aCkpIHBhdGggPSBbcGF0aF07XG5cdGlmIChwYXRoID09IG51bGwgfHwgcGF0aD8ubGVuZ3RoIDwgMSkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHJvb3QgPSBzdG9yZWREYXRhPy5nZXQ/LihwYXRoPy5bMF0pID8/IG51bGw7XG5cdHJldHVybiByb290ICE9IG51bGwgPyB0cmF2ZXJzZUJ5UGF0aChyb290LCBwYXRoPy5zbGljZT8uKDEpKSA6IG51bGw7XG59O1xudmFyIHdyaXRlQnlQYXRoID0gKHBhdGgsIGRhdGEpID0+IHtcblx0Y29uc3QgJGRlc2MgPSBkYXRhPy5bJGRlc2NyaXB0b3JdID8/IChkYXRhPy4kaXNEZXNjcmlwdG9yID8gZGF0YSA6IG51bGwpO1xuXHRpZiAoJGRlc2MgJiYgJGRlc2M/Lm93bmVyID09IFNFTEZfQ0hBTk5FTD8ubmFtZSkgZGF0YSA9IHJlYWRCeVBhdGgoJGRlc2M/LnBhdGgpID8/IGRhdGE7XG5cdGlmIChwYXRoICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkocGF0aCkpIHBhdGggPSBbcGF0aF07XG5cdGlmIChwYXRoID09IG51bGwgfHwgcGF0aD8ubGVuZ3RoIDwgMSkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHJvb3QgPSBzdG9yZWREYXRhPy5nZXQ/LihwYXRoPy5bMF0pID8/IG51bGw7XG5cdGlmIChwYXRoPy5sZW5ndGggPiAxKSB0cmF2ZXJzZUJ5UGF0aChyb290LCBwYXRoPy5zbGljZT8uKDEsIC0xKSlbcGF0aD8uW3BhdGg/Lmxlbmd0aCAtIDFdXSA9IGRhdGE7XG5cdGVsc2Ugc3RvcmVkRGF0YT8uc2V0Py4ocGF0aD8uWzBdLCBkYXRhKTtcblx0aWYgKHR5cGVvZiBkYXRhID09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGRhdGEgPT0gXCJmdW5jdGlvblwiKSByZWdpc3RlcmVkSW5QYXRoPy5zZXQ/LihkYXRhLCBwYXRoKTtcblx0cmV0dXJuIGRhdGE7XG59O1xudmFyIHJlbW92ZUJ5UGF0aCA9IChwYXRoKSA9PiB7XG5cdGlmIChwYXRoICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkocGF0aCkpIHBhdGggPSBbcGF0aF07XG5cdGlmIChwYXRoID09IG51bGwgfHwgcGF0aD8ubGVuZ3RoIDwgMSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShzdG9yZWREYXRhPy5nZXQ/LihwYXRoPy5bMF0pID8/IG51bGwpICYmIHBhdGg/Lmxlbmd0aCA8PSAxKSB7XG5cdFx0c3RvcmVkRGF0YT8uZGVsZXRlPy4ocGF0aD8uWzBdKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHJldHVybiBmYWxzZTtcbn07XG52YXIgcmVtb3ZlQnlEYXRhID0gKGRhdGEpID0+IHtcblx0Y29uc3QgJGRlc2MgPSBkYXRhPy5bJGRlc2NyaXB0b3JdID8/IChkYXRhPy4kaXNEZXNjcmlwdG9yID8gZGF0YSA6IG51bGwpO1xuXHRpZiAoJGRlc2MgJiYgJGRlc2M/Lm93bmVyID09IFNFTEZfQ0hBTk5FTD8ubmFtZSkgZGF0YSA9IHJlYWRCeVBhdGgoJGRlc2M/LnBhdGgpID8/IGRhdGE7XG5cdGNvbnN0IHBhdGggPSByZWdpc3RlcmVkSW5QYXRoPy5nZXQ/LihkYXRhKSA/PyAkZGVzYz8ucGF0aDtcblx0aWYgKHBhdGggPT0gbnVsbCB8fCBwYXRoPy5sZW5ndGggPCAxKSByZXR1cm4gZmFsc2U7XG5cdHJlbW92ZUJ5UGF0aChwYXRoKTtcblx0aWYgKHR5cGVvZiBkYXRhID09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGRhdGEgPT0gXCJmdW5jdGlvblwiKSByZWdpc3RlcmVkSW5QYXRoPy5kZWxldGU/LihkYXRhKTtcblx0cmV0dXJuIHRydWU7XG59O1xudmFyIGhhc05vUGF0aCA9IChkYXRhKSA9PiB7XG5cdGNvbnN0ICRkZXNjID0gZGF0YT8uWyRkZXNjcmlwdG9yXSA/PyAoZGF0YT8uJGlzRGVzY3JpcHRvciA/IGRhdGEgOiBudWxsKTtcblx0cmV0dXJuIChyZWdpc3RlcmVkSW5QYXRoPy5nZXQ/LihkYXRhKSA/PyAkZGVzYz8ucGF0aCkgPT0gbnVsbDtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9jb3JlL1JlcXVlc3RIYW5kbGVyLnRzXG52YXIgaXNPYmplY3QgPSAob2JqKSA9PiAodHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpICYmIG9iaiAhPSBudWxsO1xudmFyIGRlZmF1bHRSZWZsZWN0ID0ge1xuXHRnZXQ6ICh0LCBwKSA9PiB0Py5bcF0sXG5cdHNldDogKHQsIHAsIHYpID0+IHtcblx0XHR0W3BdID0gdjtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblx0aGFzOiAodCwgcCkgPT4gcCBpbiB0LFxuXHRhcHBseTogKHQsIGN0eCwgYXJncykgPT4gdC5hcHBseShjdHgsIGFyZ3MpLFxuXHRjb25zdHJ1Y3Q6ICh0LCBhcmdzKSA9PiBuZXcgdCguLi5hcmdzKSxcblx0ZGVsZXRlUHJvcGVydHk6ICh0LCBwKSA9PiBkZWxldGUgdFtwXSxcblx0b3duS2V5czogKHQpID0+IE9iamVjdC5rZXlzKHQpLFxuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICh0LCBwKSA9PiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHApLFxuXHRnZXRQcm90b3R5cGVPZjogKHQpID0+IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSxcblx0c2V0UHJvdG90eXBlT2Y6ICh0LCBwKSA9PiBPYmplY3Quc2V0UHJvdG90eXBlT2YodCwgcCksXG5cdGlzRXh0ZW5zaWJsZTogKHQpID0+IE9iamVjdC5pc0V4dGVuc2libGUodCksXG5cdHByZXZlbnRFeHRlbnNpb25zOiAodCkgPT4gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHQpXG59O1xuZnVuY3Rpb24gZXhlY3V0ZUFjdGlvbihhY3Rpb24sIHBhdGgsIGFyZ3MsIG9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCB7IGNoYW5uZWwgPSBcIlwiLCBzZW5kZXIgPSBcIlwiLCByZWZsZWN0ID0gZGVmYXVsdFJlZmxlY3QgfSA9IG9wdGlvbnM7XG5cdGNvbnN0IG9iaiA9IG9wdGlvbnMudGFyZ2V0ID8/IHJlYWRCeVBhdGgocGF0aCk7XG5cdGNvbnN0IHRvVHJhbnNmZXIgPSBbXTtcblx0bGV0IHJlc3VsdCA9IG51bGw7XG5cdGxldCBuZXdQYXRoID0gcGF0aDtcblx0c3dpdGNoIChTdHJpbmcoYWN0aW9uKS50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0Y2FzZSBcImltcG9ydFwiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uSU1QT1JUOlxuXHRcdFx0cmVzdWx0ID0gaW1wb3J0KFxuXHRcdFx0XHQvKiBAdml0ZS1pZ25vcmUgKi9cblx0XHRcdFx0YXJncz8uWzBdXG4pO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInRyYW5zZmVyXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5UUkFOU0ZFUjpcblx0XHRcdGlmIChpc0NhblRyYW5zZmVyKG9iaikgJiYgY2hhbm5lbCAhPT0gc2VuZGVyKSB0b1RyYW5zZmVyLnB1c2gob2JqKTtcblx0XHRcdHJlc3VsdCA9IG9iajtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJnZXRcIjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkdFVDoge1xuXHRcdFx0Y29uc3QgcHJvcCA9IGFyZ3M/LlswXTtcblx0XHRcdGNvbnN0IGdvdCA9IHJlZmxlY3QuZ2V0Py4ob2JqLCBwcm9wKSA/PyBvYmo/Lltwcm9wXTtcblx0XHRcdHJlc3VsdCA9IHR5cGVvZiBnb3QgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmogIT0gbnVsbCA/IGdvdC5iaW5kKG9iaikgOiBnb3Q7XG5cdFx0XHRuZXdQYXRoID0gWy4uLnBhdGgsIFN0cmluZyhwcm9wKV07XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Y2FzZSBcInNldFwiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uU0VUOiB7XG5cdFx0XHRjb25zdCBbcHJvcCwgdmFsdWVdID0gYXJncztcblx0XHRcdGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IGRlZXBPcGVyYXRlQW5kQ2xvbmUodmFsdWUsIG5vcm1hbGl6ZVJlZik7XG5cdFx0XHRpZiAob3B0aW9ucy50YXJnZXQpIHJlc3VsdCA9IHJlZmxlY3Quc2V0Py4ob2JqLCBwcm9wLCBub3JtYWxpemVkVmFsdWUpID8/IChvYmpbcHJvcF0gPSBub3JtYWxpemVkVmFsdWUsIHRydWUpO1xuXHRcdFx0ZWxzZSByZXN1bHQgPSByZWZsZWN0LnNldD8uKG9iaiwgcHJvcCwgbm9ybWFsaXplZFZhbHVlKSA/PyB3cml0ZUJ5UGF0aChbLi4ucGF0aCwgU3RyaW5nKHByb3ApXSwgbm9ybWFsaXplZFZhbHVlKTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRjYXNlIFwiYXBwbHlcIjpcblx0XHRjYXNlIFwiY2FsbFwiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uQVBQTFk6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5DQUxMOlxuXHRcdFx0aWYgKHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRjb25zdCBjdHggPSBvcHRpb25zLmNvbnRleHQgPz8gKG9wdGlvbnMudGFyZ2V0ID8gdm9pZCAwIDogcmVhZEJ5UGF0aChwYXRoLnNsaWNlKDAsIC0xKSkpO1xuXHRcdFx0XHRjb25zdCBub3JtYWxpemVkQXJncyA9IGRlZXBPcGVyYXRlQW5kQ2xvbmUoYXJncz8uWzBdID8/IGFyZ3MgPz8gW10sIG5vcm1hbGl6ZVJlZik7XG5cdFx0XHRcdHJlc3VsdCA9IHJlZmxlY3QuYXBwbHk/LihvYmosIGN0eCwgbm9ybWFsaXplZEFyZ3MpID8/IG9iai5hcHBseShjdHgsIG5vcm1hbGl6ZWRBcmdzKTtcblx0XHRcdFx0aWYgKGlzQ2FuVHJhbnNmZXIocmVzdWx0KSAmJiBwYXRoPy5hdCgtMSkgPT09IFwidHJhbnNmZXJcIiAmJiBjaGFubmVsICE9PSBzZW5kZXIpIHRvVHJhbnNmZXIucHVzaChyZXN1bHQpO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImNvbnN0cnVjdFwiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uQ09OU1RSVUNUOlxuXHRcdFx0aWYgKHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRjb25zdCBub3JtYWxpemVkQXJncyA9IGRlZXBPcGVyYXRlQW5kQ2xvbmUoYXJncz8uWzBdID8/IGFyZ3MgPz8gW10sIG5vcm1hbGl6ZVJlZik7XG5cdFx0XHRcdHJlc3VsdCA9IHJlZmxlY3QuY29uc3RydWN0Py4ob2JqLCBub3JtYWxpemVkQXJncykgPz8gbmV3IG9iaiguLi5ub3JtYWxpemVkQXJncyk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZGVsZXRlXCI6XG5cdFx0Y2FzZSBcImRlbGV0ZXByb3BlcnR5XCI6XG5cdFx0Y2FzZSBcImRpc3Bvc2VcIjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkRFTEVURTpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkRFTEVURV9QUk9QRVJUWTpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkRJU1BPU0U6XG5cdFx0XHRpZiAob3B0aW9ucy50YXJnZXQpIHtcblx0XHRcdFx0Y29uc3QgcHJvcCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcblx0XHRcdFx0cmVzdWx0ID0gcmVmbGVjdC5kZWxldGVQcm9wZXJ0eT8uKG9iaiwgcHJvcCkgPz8gZGVsZXRlIG9ialtwcm9wXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9IHBhdGg/Lmxlbmd0aCA+IDAgPyByZW1vdmVCeVBhdGgocGF0aCkgOiByZW1vdmVCeURhdGEob2JqKTtcblx0XHRcdFx0aWYgKHJlc3VsdCkgbmV3UGF0aCA9IHJlZ2lzdGVyZWRJblBhdGguZ2V0KG9iaikgPz8gW107XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiaGFzXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5IQVM6XG5cdFx0XHRyZXN1bHQgPSByZWZsZWN0Lmhhcz8uKG9iaiwgYXJncz8uWzBdKSA/PyAoaXNPYmplY3Qob2JqKSA/IGFyZ3M/LlswXSBpbiBvYmogOiBmYWxzZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwib3dua2V5c1wiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uT1dOX0tFWVM6XG5cdFx0XHRyZXN1bHQgPSByZWZsZWN0Lm93bktleXM/LihvYmopID8/IChpc09iamVjdChvYmopID8gT2JqZWN0LmtleXMob2JqKSA6IFtdKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJnZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcIjpcblx0XHRjYXNlIFwiZ2V0cHJvcGVydHlkZXNjcmlwdG9yXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5HRVRfT1dOX1BST1BFUlRZX0RFU0NSSVBUT1I6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5HRVRfUFJPUEVSVFlfREVTQ1JJUFRPUjpcblx0XHRcdHJlc3VsdCA9IHJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPy4ob2JqLCBhcmdzPy5bMF0gPz8gcGF0aD8uYXQoLTEpID8/IFwiXCIpID8/IChpc09iamVjdChvYmopID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGFyZ3M/LlswXSA/PyBwYXRoPy5hdCgtMSkgPz8gXCJcIikgOiB2b2lkIDApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImdldHByb3RvdHlwZW9mXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5HRVRfUFJPVE9UWVBFX09GOlxuXHRcdFx0cmVzdWx0ID0gcmVmbGVjdC5nZXRQcm90b3R5cGVPZj8uKG9iaikgPz8gKGlzT2JqZWN0KG9iaikgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA6IG51bGwpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInNldHByb3RvdHlwZW9mXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5TRVRfUFJPVE9UWVBFX09GOlxuXHRcdFx0cmVzdWx0ID0gcmVmbGVjdC5zZXRQcm90b3R5cGVPZj8uKG9iaiwgYXJncz8uWzBdKSA/PyAoaXNPYmplY3Qob2JqKSA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihvYmosIGFyZ3M/LlswXSkgOiBmYWxzZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiaXNleHRlbnNpYmxlXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5JU19FWFRFTlNJQkxFOlxuXHRcdFx0cmVzdWx0ID0gcmVmbGVjdC5pc0V4dGVuc2libGU/LihvYmopID8/IChpc09iamVjdChvYmopID8gT2JqZWN0LmlzRXh0ZW5zaWJsZShvYmopIDogdHJ1ZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwicHJldmVudGV4dGVuc2lvbnNcIjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLlBSRVZFTlRfRVhURU5TSU9OUzogcmVzdWx0ID0gcmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucz8uKG9iaikgPz8gKGlzT2JqZWN0KG9iaikgPyBPYmplY3QucHJldmVudEV4dGVuc2lvbnMob2JqKSA6IGZhbHNlKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHJlc3VsdCxcblx0XHR0b1RyYW5zZmVyLFxuXHRcdHBhdGg6IG5ld1BhdGhcblx0fTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmVzcG9uc2UocmVxSWQsIGFjdGlvbiwgY2hhbm5lbCwgc2VuZGVyLCBwYXRoLCByYXdSZXN1bHQsIHRvVHJhbnNmZXIpIHtcblx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgcmF3UmVzdWx0O1xuXHRjb25zdCBjYW5CZVJldHVybiA9IGlzQ2FuVHJhbnNmZXIocmVzdWx0KSAmJiB0b1RyYW5zZmVyLmluY2x1ZGVzKHJlc3VsdCkgfHwgaXNDYW5KdXN0UmV0dXJuKHJlc3VsdCk7XG5cdGxldCBmaW5hbFBhdGggPSBwYXRoO1xuXHRpZiAoIWNhbkJlUmV0dXJuICYmIGFjdGlvbiAhPT0gXCJnZXRcIiAmJiBhY3Rpb24gIT09IFdSZWZsZWN0QWN0aW9uLkdFVCAmJiAodHlwZW9mIHJlc3VsdCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgcmVzdWx0ID09PSBcImZ1bmN0aW9uXCIpKSB7XG5cdFx0aWYgKGhhc05vUGF0aChyZXN1bHQpKSB7XG5cdFx0XHRmaW5hbFBhdGggPSBbVVVJRHY0KCldO1xuXHRcdFx0d3JpdGVCeVBhdGgoZmluYWxQYXRoLCByZXN1bHQpO1xuXHRcdH0gZWxzZSBmaW5hbFBhdGggPSByZWdpc3RlcmVkSW5QYXRoLmdldChyZXN1bHQpID8/IFtdO1xuXHR9XG5cdGNvbnN0IGN0eCA9IHJlYWRCeVBhdGgoZmluYWxQYXRoKTtcblx0Y29uc3QgY3R4S2V5ID0gYWN0aW9uID09PSBcImdldFwiIHx8IGFjdGlvbiA9PT0gV1JlZmxlY3RBY3Rpb24uR0VUID8gZmluYWxQYXRoPy5hdCgtMSkgOiB2b2lkIDA7XG5cdGNvbnN0IG9iaiA9IHJlYWRCeVBhdGgocGF0aCk7XG5cdGNvbnN0IHBheWxvYWQgPSBkZWVwT3BlcmF0ZUFuZENsb25lKHJlc3VsdCwgKGVsKSA9PiBvYmplY3RUb1JlZihlbCwgY2hhbm5lbCwgdG9UcmFuc2ZlcikpID8/IHJlc3VsdDtcblx0cmV0dXJuIHtcblx0XHRyZXNwb25zZToge1xuXHRcdFx0Y2hhbm5lbDogc2VuZGVyLFxuXHRcdFx0c2VuZGVyOiBjaGFubmVsLFxuXHRcdFx0cmVxSWQsXG5cdFx0XHRhY3Rpb24sXG5cdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdHJlc3VsdDogY2FuQmVSZXR1cm4gPyBwYXlsb2FkIDogbnVsbCxcblx0XHRcdFx0dHlwZTogdHlwZW9mIHJlc3VsdCxcblx0XHRcdFx0Y2hhbm5lbDogc2VuZGVyLFxuXHRcdFx0XHRzZW5kZXI6IGNoYW5uZWwsXG5cdFx0XHRcdGRlc2NyaXB0b3I6IHtcblx0XHRcdFx0XHQkaXNEZXNjcmlwdG9yOiB0cnVlLFxuXHRcdFx0XHRcdHBhdGg6IGZpbmFsUGF0aCxcblx0XHRcdFx0XHRvd25lcjogY2hhbm5lbCxcblx0XHRcdFx0XHRjaGFubmVsLFxuXHRcdFx0XHRcdHByaW1pdGl2ZTogaXNQcmltaXRpdmUocmVzdWx0KSxcblx0XHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRhcmd1bWVudENvdW50OiBvYmogaW5zdGFuY2VvZiBGdW5jdGlvbiA/IG9iai5sZW5ndGggOiAtMSxcblx0XHRcdFx0XHQuLi5pc09iamVjdChjdHgpICYmIGN0eEtleSAhPSBudWxsID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdHgsIGN0eEtleSkgOiB7fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR0cmFuc2ZlcjogdG9UcmFuc2ZlclxuXHR9O1xufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdChyZXF1ZXN0LCByZXFJZCwgY2hhbm5lbE5hbWUsIG9wdGlvbnMpIHtcblx0Y29uc3QgeyBjaGFubmVsLCBzZW5kZXIsIHBhdGgsIGFjdGlvbiwgYXJncyB9ID0gcmVxdWVzdDtcblx0aWYgKGNoYW5uZWwgIT09IGNoYW5uZWxOYW1lKSByZXR1cm4gbnVsbDtcblx0Y29uc3QgeyByZXN1bHQsIHRvVHJhbnNmZXIsIHBhdGg6IG5ld1BhdGggfSA9IGV4ZWN1dGVBY3Rpb24oYWN0aW9uLCBwYXRoLCBhcmdzLCB7XG5cdFx0Y2hhbm5lbCxcblx0XHRzZW5kZXIsXG5cdFx0Li4ub3B0aW9uc1xuXHR9KTtcblx0cmV0dXJuIGJ1aWxkUmVzcG9uc2UocmVxSWQsIGFjdGlvbiwgY2hhbm5lbE5hbWUsIHNlbmRlciwgbmV3UGF0aCwgcmVzdWx0LCB0b1RyYW5zZmVyKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZU9iamVjdEhhbmRsZXIodGFyZ2V0LCByZWZsZWN0ID0gZGVmYXVsdFJlZmxlY3QpIHtcblx0cmV0dXJuIGFzeW5jIChhY3Rpb24sIHBhdGgsIGFyZ3MpID0+IHtcblx0XHRsZXQgcGFyZW50ID0gdGFyZ2V0O1xuXHRcdGxldCBjdXJyZW50ID0gdGFyZ2V0O1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuXHRcdFx0cGFyZW50ID0gY3VycmVudDtcblx0XHRcdGN1cnJlbnQgPSBjdXJyZW50Py5bcGF0aFtpXV07XG5cdFx0XHRpZiAoY3VycmVudCA9PT0gdm9pZCAwICYmIGkgPCBwYXRoLmxlbmd0aCAtIDEpIHRocm93IG5ldyBFcnJvcihgUGF0aCBzZWdtZW50ICcke3BhdGhbaV19JyBub3QgZm91bmRgKTtcblx0XHR9XG5cdFx0Y29uc3QgcHJvcCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcblx0XHRzd2l0Y2ggKFN0cmluZyhhY3Rpb24pLnRvTG93ZXJDYXNlKCkpIHtcblx0XHRcdGNhc2UgXCJnZXRcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uR0VUOiByZXR1cm4gY3VycmVudDtcblx0XHRcdGNhc2UgXCJzZXRcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uU0VUOlxuXHRcdFx0XHRwYXJlbnRbcHJvcF0gPSBhcmdzWzBdO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGNhc2UgXCJjYWxsXCI6XG5cdFx0XHRjYXNlIFwiYXBwbHlcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uQVBQTFk6XG5cdFx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkNBTEw6XG5cdFx0XHRcdGlmICh0eXBlb2YgY3VycmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2FsbEFyZ3MgPSBBcnJheS5pc0FycmF5KGFyZ3NbMF0pID8gYXJnc1swXSA6IGFyZ3M7XG5cdFx0XHRcdFx0cmV0dXJuIGF3YWl0IGN1cnJlbnQuYXBwbHkocGFyZW50LCBjYWxsQXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGAnJHtwcm9wfScgaXMgbm90IGEgZnVuY3Rpb25gKTtcblx0XHRcdGNhc2UgXCJjb25zdHJ1Y3RcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uQ09OU1RSVUNUOlxuXHRcdFx0XHRpZiAodHlwZW9mIGN1cnJlbnQgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdGNvbnN0IGN0b3JBcmdzID0gQXJyYXkuaXNBcnJheShhcmdzWzBdKSA/IGFyZ3NbMF0gOiBhcmdzO1xuXHRcdFx0XHRcdHJldHVybiBuZXcgY3VycmVudCguLi5jdG9yQXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGAnJHtwcm9wfScgaXMgbm90IGEgY29uc3RydWN0b3JgKTtcblx0XHRcdGNhc2UgXCJoYXNcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uSEFTOiByZXR1cm4gcHJvcCBpbiBwYXJlbnQ7XG5cdFx0XHRjYXNlIFwiZGVsZXRlXCI6XG5cdFx0XHRjYXNlIFwiZGVsZXRlcHJvcGVydHlcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uREVMRVRFX1BST1BFUlRZOiByZXR1cm4gZGVsZXRlIHBhcmVudFtwcm9wXTtcblx0XHRcdGNhc2UgXCJvd25rZXlzXCI6XG5cdFx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLk9XTl9LRVlTOiByZXR1cm4gT2JqZWN0LmtleXMoY3VycmVudCA/PyBwYXJlbnQpO1xuXHRcdFx0ZGVmYXVsdDogcmV0dXJuIGN1cnJlbnQ7XG5cdFx0fVxuXHR9O1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9jaGFubmVsL0Nvbm5lY3Rpb24udHNcbnZhciBDaGFubmVsQ29ubmVjdGlvbiA9IGNsYXNzIHtcblx0X25hbWU7XG5cdF90cmFuc3BvcnRUeXBlO1xuXHRfaWQgPSBVVUlEdjQoKTtcblx0X3N0YXRlID0gXCJkaXNjb25uZWN0ZWRcIjtcblx0X2luYm91bmQgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxZTMgfSk7XG5cdF9vdXRib3VuZCA9IG5ldyBDaGFubmVsU3ViamVjdCh7IGJ1ZmZlclNpemU6IDFlMyB9KTtcblx0X3N0YXRlQ2hhbmdlcyA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRfY29ubmVjdGVkUGVlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3VicyA9IFtdO1xuXHRfc3RhdHMgPSB7XG5cdFx0bWVzc2FnZXNTZW50OiAwLFxuXHRcdG1lc3NhZ2VzUmVjZWl2ZWQ6IDAsXG5cdFx0Ynl0ZXNUcmFuc2ZlcnJlZDogMCxcblx0XHRsYXRlbmN5TXM6IDAsXG5cdFx0dXB0aW1lOiAwLFxuXHRcdHJlY29ubmVjdENvdW50OiAwXG5cdH07XG5cdF9zdGFydFRpbWUgPSAwO1xuXHRfcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9idWZmZXIgPSBbXTtcblx0X29wdHM7XG5cdGNvbnN0cnVjdG9yKF9uYW1lLCBfdHJhbnNwb3J0VHlwZSA9IFwiaW50ZXJuYWxcIiwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0dGhpcy5fbmFtZSA9IF9uYW1lO1xuXHRcdHRoaXMuX3RyYW5zcG9ydFR5cGUgPSBfdHJhbnNwb3J0VHlwZTtcblx0XHR0aGlzLl9vcHRzID0ge1xuXHRcdFx0dGltZW91dDogM2U0LFxuXHRcdFx0YXV0b1JlY29ubmVjdDogdHJ1ZSxcblx0XHRcdHJlY29ubmVjdEludGVydmFsOiAxZTMsXG5cdFx0XHRtYXhSZWNvbm5lY3RBdHRlbXB0czogNSxcblx0XHRcdGJ1ZmZlck1lc3NhZ2VzOiB0cnVlLFxuXHRcdFx0YnVmZmVyU2l6ZTogMWUzLFxuXHRcdFx0bWV0YWRhdGE6IHt9LFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH07XG5cdFx0dGhpcy5fc2V0dXBTdWJzY3JpcHRpb25zKCk7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyLCBmcm9tQ2hhbm5lbCkge1xuXHRcdHJldHVybiAoZnJvbUNoYW5uZWwgPyBmaWx0ZXIoKG0pID0+IG0uc2VuZGVyID09PSBmcm9tQ2hhbm5lbCkodGhpcy5faW5ib3VuZCkgOiB0aGlzLl9pbmJvdW5kKS5zdWJzY3JpYmUodHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcik7XG5cdH1cblx0bmV4dChtZXNzYWdlKSB7XG5cdFx0aWYgKHRoaXMuX3N0YXRlICE9PSBcImNvbm5lY3RlZFwiKSB7XG5cdFx0XHRpZiAodGhpcy5fb3B0cy5idWZmZXJNZXNzYWdlcyAmJiB0aGlzLl9idWZmZXIubGVuZ3RoIDwgdGhpcy5fb3B0cy5idWZmZXJTaXplKSB0aGlzLl9idWZmZXIucHVzaChtZXNzYWdlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5fb3V0Ym91bmQubmV4dChtZXNzYWdlKTtcblx0XHR0aGlzLl9zdGF0cy5tZXNzYWdlc1NlbnQrKztcblx0fVxuXHRhc3luYyByZXF1ZXN0KHRvQ2hhbm5lbCwgcGF5bG9hZCwgb3B0cyA9IHt9KSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBVVUlEdjQoKTtcblx0XHRjb25zdCByZXNvbHZlcnMgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTtcblx0XHR0aGlzLl9wZW5kaW5nLnNldChyZXFJZCwgcmVzb2x2ZXJzKTtcblx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fcGVuZGluZy5oYXMocmVxSWQpKSB7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKHJlcUlkKTtcblx0XHRcdFx0cmVzb2x2ZXJzLnJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBSZXF1ZXN0IHRpbWVvdXRgKSk7XG5cdFx0XHR9XG5cdFx0fSwgb3B0cy50aW1lb3V0ID8/IHRoaXMuX29wdHMudGltZW91dCk7XG5cdFx0dGhpcy5uZXh0KHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IHRvQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdHR5cGU6IFwicmVxdWVzdFwiLFxuXHRcdFx0cmVxSWQsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdC4uLnBheWxvYWQsXG5cdFx0XHRcdGFjdGlvbjogb3B0cy5hY3Rpb24sXG5cdFx0XHRcdHBhdGg6IG9wdHMucGF0aFxuXHRcdFx0fSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHRcdHJldHVybiByZXNvbHZlcnMucHJvbWlzZS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KSk7XG5cdH1cblx0cmVzcG9uZChvcmlnaW5hbCwgcGF5bG9hZCkge1xuXHRcdHRoaXMubmV4dCh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBvcmlnaW5hbC5zZW5kZXIsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX25hbWUsXG5cdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRyZXFJZDogb3JpZ2luYWwucmVxSWQsXG5cdFx0XHRwYXlsb2FkLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdH1cblx0ZW1pdCh0b0NoYW5uZWwsIGV2ZW50VHlwZSwgZGF0YSkge1xuXHRcdHRoaXMubmV4dCh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiB0b0NoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX25hbWUsXG5cdFx0XHR0eXBlOiBcImV2ZW50XCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdHR5cGU6IGV2ZW50VHlwZSxcblx0XHRcdFx0ZGF0YVxuXHRcdFx0fSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHR9XG5cdHN1YnNjcmliZU91dGJvdW5kKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX291dGJvdW5kLnN1YnNjcmliZSh0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyKTtcblx0fVxuXHRwdXNoSW5ib3VuZChtZXNzYWdlKSB7XG5cdFx0dGhpcy5fc3RhdHMubWVzc2FnZXNSZWNlaXZlZCsrO1xuXHRcdGlmIChtZXNzYWdlLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBtZXNzYWdlLnJlcUlkKSB7XG5cdFx0XHRjb25zdCByID0gdGhpcy5fcGVuZGluZy5nZXQobWVzc2FnZS5yZXFJZCk7XG5cdFx0XHRpZiAocikge1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShtZXNzYWdlLnJlcUlkKTtcblx0XHRcdFx0ci5yZXNvbHZlKG1lc3NhZ2UucGF5bG9hZCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5faW5ib3VuZC5uZXh0KG1lc3NhZ2UpO1xuXHR9XG5cdGFzeW5jIGNvbm5lY3QoKSB7XG5cdFx0aWYgKHRoaXMuX3N0YXRlID09PSBcImNvbm5lY3RlZFwiKSByZXR1cm47XG5cdFx0dGhpcy5fc2V0U3RhdGUoXCJjb25uZWN0aW5nXCIpO1xuXHRcdHRoaXMuX3N0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cdFx0dGhpcy5fc2V0U3RhdGUoXCJjb25uZWN0ZWRcIik7XG5cdFx0dGhpcy5fZmx1c2hCdWZmZXIoKTtcblx0fVxuXHRkaXNjb25uZWN0KCkge1xuXHRcdGlmICh0aGlzLl9zdGF0ZSA9PT0gXCJkaXNjb25uZWN0ZWRcIiB8fCB0aGlzLl9zdGF0ZSA9PT0gXCJjbG9zZWRcIikgcmV0dXJuO1xuXHRcdHRoaXMuX3NldFN0YXRlKFwiZGlzY29ubmVjdGVkXCIpO1xuXHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcblx0XHR0aGlzLl9zdWJzID0gW107XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5kaXNjb25uZWN0KCk7XG5cdFx0dGhpcy5fc2V0U3RhdGUoXCJjbG9zZWRcIik7XG5cdFx0dGhpcy5faW5ib3VuZC5jb21wbGV0ZSgpO1xuXHRcdHRoaXMuX291dGJvdW5kLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG5cdH1cblx0bWFya0Nvbm5lY3RlZCgpIHtcblx0XHR0aGlzLl9zZXRTdGF0ZShcImNvbm5lY3RlZFwiKTtcblx0XHR0aGlzLl9mbHVzaEJ1ZmZlcigpO1xuXHR9XG5cdG1hcmtEaXNjb25uZWN0ZWQoKSB7XG5cdFx0dGhpcy5fc2V0U3RhdGUoXCJkaXNjb25uZWN0ZWRcIik7XG5cdH1cblx0X3NldFN0YXRlKHN0YXRlKSB7XG5cdFx0aWYgKHRoaXMuX3N0YXRlICE9PSBzdGF0ZSkge1xuXHRcdFx0dGhpcy5fc3RhdGUgPSBzdGF0ZTtcblx0XHRcdHRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KHN0YXRlKTtcblx0XHR9XG5cdH1cblx0X2ZsdXNoQnVmZmVyKCkge1xuXHRcdGZvciAoY29uc3QgbXNnIG9mIHRoaXMuX2J1ZmZlcikgdGhpcy5fb3V0Ym91bmQubmV4dChtc2cpO1xuXHRcdHRoaXMuX2J1ZmZlciA9IFtdO1xuXHR9XG5cdF9zZXR1cFN1YnNjcmlwdGlvbnMoKSB7XG5cdFx0dGhpcy5fc3Vicy5wdXNoKHRoaXMuX2luYm91bmQuc3Vic2NyaWJlKHsgbmV4dDogKG1zZykgPT4ge1xuXHRcdFx0aWYgKG1zZy50eXBlID09PSBcInNpZ25hbFwiICYmIG1zZy5wYXlsb2FkPy50eXBlID09PSBcImNvbm5lY3RcIikgdGhpcy5fY29ubmVjdGVkUGVlcnMuc2V0KG1zZy5zZW5kZXIsIHtcblx0XHRcdFx0bmFtZTogbXNnLnNlbmRlcixcblx0XHRcdFx0c3RhdGU6IFwiY29ubmVjdGVkXCIsXG5cdFx0XHRcdGlzSG9zdDogZmFsc2Vcblx0XHRcdH0pO1xuXHRcdH0gfSkpO1xuXHR9XG5cdGdldCBpZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5faWQ7XG5cdH1cblx0Z2V0IG5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX25hbWU7XG5cdH1cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZTtcblx0fVxuXHRnZXQgdHJhbnNwb3J0VHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdHJhbnNwb3J0VHlwZTtcblx0fVxuXHRnZXQgc3RhdHMoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLnRoaXMuX3N0YXRzLFxuXHRcdFx0dXB0aW1lOiB0aGlzLl9zdGFydFRpbWUgPyBEYXRlLm5vdygpIC0gdGhpcy5fc3RhcnRUaW1lIDogMFxuXHRcdH07XG5cdH1cblx0Z2V0IHN0YXRlQ2hhbmdlcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGVDaGFuZ2VzO1xuXHR9XG5cdGdldCBjb25uZWN0ZWRQZWVycygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2Nvbm5lY3RlZFBlZXJzLmtleXMoKV07XG5cdH1cblx0Z2V0IG1ldGEoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiB0aGlzLl9pZCxcblx0XHRcdG5hbWU6IHRoaXMuX25hbWUsXG5cdFx0XHRzdGF0ZTogdGhpcy5fc3RhdGUsXG5cdFx0XHRpc0hvc3Q6IGZhbHNlLFxuXHRcdFx0Y29ubmVjdGVkQ2hhbm5lbHM6IG5ldyBTZXQodGhpcy5fY29ubmVjdGVkUGVlcnMua2V5cygpKVxuXHRcdH07XG5cdH1cbn07XG52YXIgQ29ubmVjdGlvblBvb2wgPSBjbGFzcyBDb25uZWN0aW9uUG9vbCB7XG5cdF9jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHN0YXRpYyBfaW5zdGFuY2UgPSBudWxsO1xuXHRzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7XG5cdFx0aWYgKCFDb25uZWN0aW9uUG9vbC5faW5zdGFuY2UpIENvbm5lY3Rpb25Qb29sLl9pbnN0YW5jZSA9IG5ldyBDb25uZWN0aW9uUG9vbCgpO1xuXHRcdHJldHVybiBDb25uZWN0aW9uUG9vbC5faW5zdGFuY2U7XG5cdH1cblx0Z2V0T3JDcmVhdGUobmFtZSwgdHJhbnNwb3J0VHlwZSA9IFwiaW50ZXJuYWxcIiwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0aWYgKCF0aGlzLl9jb25uZWN0aW9ucy5oYXMobmFtZSkpIHRoaXMuX2Nvbm5lY3Rpb25zLnNldChuYW1lLCBuZXcgQ2hhbm5lbENvbm5lY3Rpb24obmFtZSwgdHJhbnNwb3J0VHlwZSwgb3B0aW9ucykpO1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9ucy5nZXQobmFtZSk7XG5cdH1cblx0Z2V0KG5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbnMuZ2V0KG5hbWUpO1xuXHR9XG5cdGhhcyhuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25zLmhhcyhuYW1lKTtcblx0fVxuXHRkZWxldGUobmFtZSkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25zLmdldChuYW1lKT8uY2xvc2UoKTtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbnMuZGVsZXRlKG5hbWUpO1xuXHR9XG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25zLmZvckVhY2goKGMpID0+IGMuY2xvc2UoKSk7XG5cdFx0dGhpcy5fY29ubmVjdGlvbnMuY2xlYXIoKTtcblx0fVxuXHRnZXQgc2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbnMuc2l6ZTtcblx0fVxuXHRnZXQgbmFtZXMoKSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLl9jb25uZWN0aW9ucy5rZXlzKCldO1xuXHR9XG59O1xudmFyIGdldENvbm5lY3Rpb25Qb29sID0gKCkgPT4gQ29ubmVjdGlvblBvb2wuZ2V0SW5zdGFuY2UoKTtcbnZhciBnZXRDb25uZWN0aW9uID0gKG5hbWUsIHRyYW5zcG9ydFR5cGUsIG9wdGlvbnMpID0+IGdldENvbm5lY3Rpb25Qb29sKCkuZ2V0T3JDcmVhdGUobmFtZSwgdHJhbnNwb3J0VHlwZSwgb3B0aW9ucyk7XG52YXIgZ2V0SG9zdENvbm5lY3Rpb24gPSAobmFtZSA9IFwiJGhvc3QkXCIsIG9wdGlvbnMpID0+IGdldENvbm5lY3Rpb24obmFtZSwgXCJpbnRlcm5hbFwiLCB7XG5cdC4uLm9wdGlvbnMsXG5cdG1ldGFkYXRhOiB7XG5cdFx0Li4ub3B0aW9ucz8ubWV0YWRhdGEsXG5cdFx0aXNIb3N0OiB0cnVlXG5cdH1cbn0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvVHJhbnNwb3J0LnRzXG52YXIgVHJhbnNwb3J0QWRhcHRlciA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfdHJhbnNwb3J0VHlwZTtcblx0X29wdGlvbnM7XG5cdF9zdWJzY3JpcHRpb25zID0gW107XG5cdF9pc0F0dGFjaGVkID0gZmFsc2U7XG5cdF9pbmJvdW5kID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogMTAwIH0pO1xuXHRfb3V0Ym91bmQgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdF9pbmNvbWluZ0Nvbm5lY3Rpb25zID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogNTAgfSk7XG5cdF9hY2NlcHRDYWxsYmFjayA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKF9jaGFubmVsTmFtZSwgX3RyYW5zcG9ydFR5cGUsIF9vcHRpb25zID0ge30pIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl90cmFuc3BvcnRUeXBlID0gX3RyYW5zcG9ydFR5cGU7XG5cdFx0dGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucyA9IFtdO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSBmYWxzZTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5ib3VuZC5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuXHR9XG5cdHNlbmQobXNnLCB0cmFuc2Zlcikge1xuXHRcdHRoaXMuX291dGJvdW5kLm5leHQoe1xuXHRcdFx0Li4ubXNnLFxuXHRcdFx0dHJhbnNmZXJhYmxlOiB0cmFuc2ZlclxuXHRcdH0pO1xuXHR9XG5cdGdldCBvbkluY29taW5nQ29ubmVjdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5jb21pbmdDb25uZWN0aW9ucztcblx0fVxuXHRzdWJzY3JpYmVJbmNvbWluZyhoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luY29taW5nQ29ubmVjdGlvbnMuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdHNldEFjY2VwdENhbGxiYWNrKGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5fYWNjZXB0Q2FsbGJhY2sgPSBjYWxsYmFjaztcblx0fVxuXHRfZW1pdEluY29taW5nQ29ubmVjdGlvbihjb25uZWN0aW9uKSB7XG5cdFx0dGhpcy5faW5jb21pbmdDb25uZWN0aW9ucy5uZXh0KGNvbm5lY3Rpb24pO1xuXHR9XG5cdGFzeW5jIF9zaG91bGRBY2NlcHRDb25uZWN0aW9uKGNvbm5lY3Rpb24pIHtcblx0XHRpZiAoIXRoaXMuX2FjY2VwdENhbGxiYWNrKSByZXR1cm4gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcy5fYWNjZXB0Q2FsbGJhY2soY29ubmVjdGlvbik7XG5cdH1cblx0Z2V0IGNoYW5uZWxOYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsTmFtZTtcblx0fVxuXHRnZXQgaXNBdHRhY2hlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5faXNBdHRhY2hlZDtcblx0fVxuXHRnZXQgaW5ib3VuZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5ib3VuZDtcblx0fVxuXHRnZXQgb3V0Ym91bmQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX291dGJvdW5kO1xuXHR9XG59O1xudmFyIFdvcmtlclRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF93b3JrZXJTb3VyY2U7XG5cdF93b3JrZXIgPSBudWxsO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9vd25Xb3JrZXIgPSBmYWxzZTtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIF93b3JrZXJTb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKGNoYW5uZWxOYW1lLCBcIndvcmtlclwiLCBvcHRpb25zKTtcblx0XHR0aGlzLl93b3JrZXJTb3VyY2UgPSBfd29ya2VyU291cmNlO1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdHRoaXMuX3dvcmtlciA9IHRoaXMuX3Jlc29sdmVXb3JrZXIoKTtcblx0XHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRoaXMuX3dvcmtlcik7XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRoaXMuX3dvcmtlciwgKGRhdGEpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKGRhdGEpLCAoZXJyKSA9PiB0aGlzLl9pbmJvdW5kLmVycm9yKGVycikpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2csIG1zZy50cmFuc2ZlcmFibGUpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0ZGV0YWNoKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdGlmICh0aGlzLl9vd25Xb3JrZXIgJiYgdGhpcy5fd29ya2VyKSB0aGlzLl93b3JrZXIudGVybWluYXRlKCk7XG5cdFx0dGhpcy5fd29ya2VyID0gbnVsbDtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxuXHRyZXF1ZXN0Q2hhbm5lbChjaGFubmVsLCBzZW5kZXIsIG9wdGlvbnMsIHBvcnQpIHtcblx0XHRjb25zdCB0cmFuc2ZlciA9IHBvcnQgPyBbcG9ydF0gOiBbXTtcblx0XHR0aGlzLl93b3JrZXI/LnBvc3RNZXNzYWdlKHtcblx0XHRcdHR5cGU6IFwiY3JlYXRlQ2hhbm5lbFwiLFxuXHRcdFx0Y2hhbm5lbCxcblx0XHRcdHNlbmRlcixcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHRtZXNzYWdlUG9ydDogcG9ydCxcblx0XHRcdHJlcUlkOiBVVUlEdjQoKVxuXHRcdH0sIHsgdHJhbnNmZXIgfSk7XG5cdH1cblx0Y29ubmVjdENoYW5uZWwoY2hhbm5lbCwgc2VuZGVyLCBwb3J0LCBvcHRpb25zKSB7XG5cdFx0Y29uc3QgdHJhbnNmZXIgPSBwb3J0ID8gW3BvcnRdIDogW107XG5cdFx0dGhpcy5fd29ya2VyPy5wb3N0TWVzc2FnZSh7XG5cdFx0XHR0eXBlOiBcImNvbm5lY3RDaGFubmVsXCIsXG5cdFx0XHRjaGFubmVsLFxuXHRcdFx0c2VuZGVyLFxuXHRcdFx0cG9ydCxcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHRyZXFJZDogVVVJRHY0KClcblx0XHR9LCB7IHRyYW5zZmVyIH0pO1xuXHR9XG5cdGxpc3RDaGFubmVscygpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdGNvbnN0IHJlcUlkID0gVVVJRHY0KCk7XG5cdFx0XHRjb25zdCBoYW5kbGVyID0gKG1zZykgPT4ge1xuXHRcdFx0XHRjb25zdCBkYXRhID0gbXNnO1xuXHRcdFx0XHRpZiAoZGF0YS50eXBlID09PSBcImNoYW5uZWxMaXN0XCIgJiYgZGF0YS5yZXFJZCA9PT0gcmVxSWQpIHtcblx0XHRcdFx0XHRzdWIudW5zdWJzY3JpYmUoKTtcblx0XHRcdFx0XHRyZXNvbHZlKGRhdGEuY2hhbm5lbHMgPz8gW10pO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc3ViID0gdGhpcy5faW5ib3VuZC5zdWJzY3JpYmUoaGFuZGxlcik7XG5cdFx0XHR0aGlzLl93b3JrZXI/LnBvc3RNZXNzYWdlKHtcblx0XHRcdFx0dHlwZTogXCJsaXN0Q2hhbm5lbHNcIixcblx0XHRcdFx0cmVxSWRcblx0XHRcdH0pO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHN1Yi51bnN1YnNjcmliZSgpO1xuXHRcdFx0XHRyZXNvbHZlKFtdKTtcblx0XHRcdH0sIDVlMyk7XG5cdFx0fSk7XG5cdH1cblx0X2hhbmRsZUluY29taW5nKGRhdGEpIHtcblx0XHRpZiAoZGF0YT8udHlwZSA9PT0gXCJjaGFubmVsQ3JlYXRlZFwiIHx8IGRhdGE/LnR5cGUgPT09IFwiY2hhbm5lbENvbm5lY3RlZFwiKSB0aGlzLl9lbWl0SW5jb21pbmdDb25uZWN0aW9uKHtcblx0XHRcdGlkOiBkYXRhLnJlcUlkID8/IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogZGF0YS5jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBkYXRhLnNlbmRlciA/PyBcIndvcmtlclwiLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogXCJ3b3JrZXJcIixcblx0XHRcdGRhdGEsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KTtcblx0XHR0aGlzLl9pbmJvdW5kLm5leHQoZGF0YSk7XG5cdH1cblx0X3Jlc29sdmVXb3JrZXIoKSB7XG5cdFx0aWYgKHRoaXMuX3dvcmtlclNvdXJjZSBpbnN0YW5jZW9mIFdvcmtlcikgcmV0dXJuIHRoaXMuX3dvcmtlclNvdXJjZTtcblx0XHR0aGlzLl9vd25Xb3JrZXIgPSB0cnVlO1xuXHRcdGlmICh0eXBlb2YgdGhpcy5fd29ya2VyU291cmNlID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0aGlzLl93b3JrZXJTb3VyY2UoKTtcblx0XHRpZiAodGhpcy5fd29ya2VyU291cmNlIGluc3RhbmNlb2YgVVJMKSByZXR1cm4gbmV3IFdvcmtlcih0aGlzLl93b3JrZXJTb3VyY2UuaHJlZiwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRcdGlmICh0eXBlb2YgdGhpcy5fd29ya2VyU291cmNlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRpZiAodGhpcy5fd29ya2VyU291cmNlLnN0YXJ0c1dpdGgoXCIvXCIpKSByZXR1cm4gbmV3IFdvcmtlcihyZXNvbHZlV29ya2VyU3BlY2lmaWVySHJlZih0aGlzLl93b3JrZXJTb3VyY2UucmVwbGFjZSgvXlxcLy8sIFwiLi9cIikpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdFx0XHRpZiAoVVJMLmNhblBhcnNlKHRoaXMuX3dvcmtlclNvdXJjZSkgfHwgdGhpcy5fd29ya2VyU291cmNlLnN0YXJ0c1dpdGgoXCIuL1wiKSkgcmV0dXJuIG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYodGhpcy5fd29ya2VyU291cmNlKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRcdFx0cmV0dXJuIG5ldyBXb3JrZXIoVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbdGhpcy5fd29ya2VyU291cmNlXSwgeyB0eXBlOiBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiB9KSksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB3b3JrZXIgc291cmNlXCIpO1xuXHR9XG5cdGdldCB3b3JrZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3dvcmtlcjtcblx0fVxufTtcbnZhciBNZXNzYWdlUG9ydFRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF9wb3J0O1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBfcG9ydCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoY2hhbm5lbE5hbWUsIFwibWVzc2FnZS1wb3J0XCIsIG9wdGlvbnMpO1xuXHRcdHRoaXMuX3BvcnQgPSBfcG9ydDtcblx0fVxuXHRhdHRhY2goKSB7XG5cdFx0aWYgKHRoaXMuX2lzQXR0YWNoZWQpIHJldHVybjtcblx0XHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRoaXMuX3BvcnQpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0aGlzLl9wb3J0LCAoZGF0YSkgPT4gdGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpKTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnLCBtc2cudHJhbnNmZXJhYmxlKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHR0aGlzLl9wb3J0LmNsb3NlKCk7XG5cdFx0c3VwZXIuZGV0YWNoKCk7XG5cdH1cblx0Z2V0IHBvcnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnQ7XG5cdH1cbn07XG52YXIgQnJvYWRjYXN0Q2hhbm5lbFRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF9iY05hbWU7XG5cdF9jaGFubmVsID0gbnVsbDtcblx0X2NsZWFudXAgPSBudWxsO1xuXHRfY29ubmVjdGVkUGVlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsTmFtZSwgX2JjTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoY2hhbm5lbE5hbWUsIFwiYnJvYWRjYXN0XCIsIG9wdGlvbnMpO1xuXHRcdHRoaXMuX2JjTmFtZSA9IF9iY05hbWU7XG5cdH1cblx0YXR0YWNoKCkge1xuXHRcdGlmICh0aGlzLl9pc0F0dGFjaGVkKSByZXR1cm47XG5cdFx0dGhpcy5fY2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKHRoaXMuX2JjTmFtZSA/PyB0aGlzLl9jaGFubmVsTmFtZSk7XG5cdFx0Y29uc3Qgc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0aGlzLl9jaGFubmVsKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fY2hhbm5lbCwgKGRhdGEpID0+IHtcblx0XHRcdGlmIChkYXRhPy5zZW5kZXIgIT09IHRoaXMuX2NoYW5uZWxOYW1lKSB0aGlzLl9oYW5kbGVJbmNvbWluZyhkYXRhKTtcblx0XHR9KTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHRcdHRoaXMuX2Fubm91bmNlUHJlc2VuY2UoKTtcblx0fVxuXHRfaGFuZGxlSW5jb21pbmcoZGF0YSkge1xuXHRcdGlmIChkYXRhPy50eXBlID09PSBcImFubm91bmNlXCIgfHwgZGF0YT8udHlwZSA9PT0gXCJjb25uZWN0XCIpIHtcblx0XHRcdGNvbnN0IHNlbmRlciA9IGRhdGEuc2VuZGVyID8/IFwidW5rbm93blwiO1xuXHRcdFx0Y29uc3QgaXNOZXcgPSAhdGhpcy5fY29ubmVjdGVkUGVlcnMuaGFzKHNlbmRlcik7XG5cdFx0XHR0aGlzLl9jb25uZWN0ZWRQZWVycy5hZGQoc2VuZGVyKTtcblx0XHRcdGlmIChpc05ldykge1xuXHRcdFx0XHR0aGlzLl9lbWl0SW5jb21pbmdDb25uZWN0aW9uKHtcblx0XHRcdFx0XHRpZDogZGF0YS5yZXFJZCA/PyBVVUlEdjQoKSxcblx0XHRcdFx0XHRjaGFubmVsOiBkYXRhLmNoYW5uZWwgPz8gdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdFx0c2VuZGVyLFxuXHRcdFx0XHRcdHRyYW5zcG9ydFR5cGU6IFwiYnJvYWRjYXN0XCIsXG5cdFx0XHRcdFx0ZGF0YSxcblx0XHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwiYW5ub3VuY2VcIikgdGhpcy5fY2hhbm5lbD8ucG9zdE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdHR5cGU6IFwiYW5ub3VuY2UtYWNrXCIsXG5cdFx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpO1xuXHR9XG5cdF9hbm5vdW5jZVByZXNlbmNlKCkge1xuXHRcdHRoaXMuX2NoYW5uZWw/LnBvc3RNZXNzYWdlKHtcblx0XHRcdHR5cGU6IFwiYW5ub3VuY2VcIixcblx0XHRcdGNoYW5uZWw6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHR9XG5cdGdldCBjb25uZWN0ZWRQZWVycygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2Nvbm5lY3RlZFBlZXJzXTtcblx0fVxuXHRkZXRhY2goKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fY2hhbm5lbD8uY2xvc2UoKTtcblx0XHR0aGlzLl9jaGFubmVsID0gbnVsbDtcblx0XHR0aGlzLl9jb25uZWN0ZWRQZWVycy5jbGVhcigpO1xuXHRcdHN1cGVyLmRldGFjaCgpO1xuXHR9XG59O1xudmFyIFdlYlNvY2tldFRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF91cmw7XG5cdF9wcm90b2NvbHM7XG5cdF93cyA9IG51bGw7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0X3BlbmRpbmcgPSBbXTtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9jb25uZWN0ZWRDaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBfdXJsLCBfcHJvdG9jb2xzLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJ3ZWJzb2NrZXRcIiwgb3B0aW9ucyk7XG5cdFx0dGhpcy5fdXJsID0gX3VybDtcblx0XHR0aGlzLl9wcm90b2NvbHMgPSBfcHJvdG9jb2xzO1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdGNvbnN0IHVybCA9IHR5cGVvZiB0aGlzLl91cmwgPT09IFwic3RyaW5nXCIgPyB0aGlzLl91cmwgOiB0aGlzLl91cmwuaHJlZjtcblx0XHR0aGlzLl93cyA9IG5ldyBXZWJTb2NrZXQodXJsLCB0aGlzLl9wcm90b2NvbHMpO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjb25uZWN0aW5nXCIpO1xuXHRcdGNvbnN0IHNlbmQgPSAobXNnKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fd3M/LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOKSB7XG5cdFx0XHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlOiBfLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0XHRcdHRoaXMuX3dzLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuXHRcdFx0fSBlbHNlIHRoaXMuX3BlbmRpbmcucHVzaChtc2cpO1xuXHRcdH07XG5cdFx0dGhpcy5fd3MuYWRkRXZlbnRMaXN0ZW5lcihcIm9wZW5cIiwgKCkgPT4ge1xuXHRcdFx0dGhpcy5fc3RhdGUubmV4dChcIm9wZW5cIik7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLmZvckVhY2goKG0pID0+IHNlbmQobSkpO1xuXHRcdFx0dGhpcy5fcGVuZGluZyA9IFtdO1xuXHRcdFx0dGhpcy5fZW1pdEluY29taW5nQ29ubmVjdGlvbih7XG5cdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdHNlbmRlcjogXCJzZXJ2ZXJcIixcblx0XHRcdFx0dHJhbnNwb3J0VHlwZTogXCJ3ZWJzb2NrZXRcIixcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fd3MsIChkYXRhKSA9PiB0aGlzLl9oYW5kbGVJbmNvbWluZyhkYXRhKSwgKGVycikgPT4gdGhpcy5faW5ib3VuZC5lcnJvcihlcnIpLCAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiY2xvc2VkXCIpO1xuXHRcdFx0dGhpcy5faW5ib3VuZC5jb21wbGV0ZSgpO1xuXHRcdH0pO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2cpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0X2hhbmRsZUluY29taW5nKGRhdGEpIHtcblx0XHRpZiAoZGF0YT8udHlwZSA9PT0gXCJjaGFubmVsLWNvbm5lY3RcIiB8fCBkYXRhPy50eXBlID09PSBcInBlZXItY29ubmVjdFwiIHx8IGRhdGE/LnR5cGUgPT09IFwiam9pblwiKSB7XG5cdFx0XHRjb25zdCBjaGFubmVsID0gZGF0YS5jaGFubmVsID8/IGRhdGEucm9vbSA/PyB0aGlzLl9jaGFubmVsTmFtZTtcblx0XHRcdGlmICghdGhpcy5fY29ubmVjdGVkQ2hhbm5lbHMuaGFzKGNoYW5uZWwpKSB7XG5cdFx0XHRcdHRoaXMuX2Nvbm5lY3RlZENoYW5uZWxzLmFkZChjaGFubmVsKTtcblx0XHRcdFx0dGhpcy5fZW1pdEluY29taW5nQ29ubmVjdGlvbih7XG5cdFx0XHRcdFx0aWQ6IGRhdGEuaWQgPz8gVVVJRHY0KCksXG5cdFx0XHRcdFx0Y2hhbm5lbCxcblx0XHRcdFx0XHRzZW5kZXI6IGRhdGEuc2VuZGVyID8/IGRhdGEucGVlcklkID8/IFwicmVtb3RlXCIsXG5cdFx0XHRcdFx0dHJhbnNwb3J0VHlwZTogXCJ3ZWJzb2NrZXRcIixcblx0XHRcdFx0XHRkYXRhLFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpO1xuXHR9XG5cdGpvaW5DaGFubmVsKGNoYW5uZWwpIHtcblx0XHR0aGlzLnNlbmQoe1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0dHlwZTogXCJqb2luXCIsXG5cdFx0XHRjaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHR9XG5cdGxlYXZlQ2hhbm5lbChjaGFubmVsKSB7XG5cdFx0dGhpcy5fY29ubmVjdGVkQ2hhbm5lbHMuZGVsZXRlKGNoYW5uZWwpO1xuXHRcdHRoaXMuc2VuZCh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHR0eXBlOiBcImxlYXZlXCIsXG5cdFx0XHRjaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHR9XG5cdGdldCBjb25uZWN0ZWRDaGFubmVscygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2Nvbm5lY3RlZENoYW5uZWxzXTtcblx0fVxuXHRkZXRhY2goKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fd3M/LmNsb3NlKCk7XG5cdFx0dGhpcy5fd3MgPSBudWxsO1xuXHRcdHRoaXMuX2Nvbm5lY3RlZENoYW5uZWxzLmNsZWFyKCk7XG5cdFx0c3VwZXIuZGV0YWNoKCk7XG5cdH1cblx0Z2V0IHdzKCkge1xuXHRcdHJldHVybiB0aGlzLl93cztcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG59O1xudmFyIENocm9tZVJ1bnRpbWVUcmFuc3BvcnQgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydEFkYXB0ZXIge1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJjaHJvbWUtcnVudGltZVwiLCBvcHRpb25zKTtcblx0fVxuXHRhdHRhY2goKSB7XG5cdFx0aWYgKHRoaXMuX2lzQXR0YWNoZWQpIHJldHVybjtcblx0XHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybjtcblx0XHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKFwiY2hyb21lLXJ1bnRpbWVcIik7XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKFwiY2hyb21lLXJ1bnRpbWVcIiwgKGRhdGEpID0+IHRoaXMuX2luYm91bmQubmV4dChkYXRhKSwgdm9pZCAwKTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxufTtcbnZhciBDaHJvbWVUYWJzVHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyIHtcblx0X3RhYklkO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBfdGFiSWQsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKGNoYW5uZWxOYW1lLCBcImNocm9tZS10YWJzXCIsIG9wdGlvbnMpO1xuXHRcdHRoaXMuX3RhYklkID0gX3RhYklkO1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdGlmICh0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUudGFicykgcmV0dXJuO1xuXHRcdGNvbnN0IHNlbmQgPSAobXNnKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fdGFiSWQgIT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZTogXywgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdFx0XHRjaHJvbWUudGFicy5zZW5kTWVzc2FnZSh0aGlzLl90YWJJZCwgZGF0YSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJjaHJvbWUtcnVudGltZVwiLCAoZGF0YSkgPT4gdGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpKTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxuXHRzZXRUYWJJZCh0YWJJZCkge1xuXHRcdHRoaXMuX3RhYklkID0gdGFiSWQ7XG5cdH1cbn07XG52YXIgQ2hyb21lUG9ydFRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF9wb3J0TmFtZTtcblx0X3RhYklkO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9wb3J0ID0gbnVsbDtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIF9wb3J0TmFtZSwgX3RhYklkLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJjaHJvbWUtcG9ydFwiLCBvcHRpb25zKTtcblx0XHR0aGlzLl9wb3J0TmFtZSA9IF9wb3J0TmFtZTtcblx0XHR0aGlzLl90YWJJZCA9IF90YWJJZDtcblx0fVxuXHRhdHRhY2goKSB7XG5cdFx0aWYgKHRoaXMuX2lzQXR0YWNoZWQpIHJldHVybjtcblx0XHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybjtcblx0XHR0aGlzLl9wb3J0ID0gdGhpcy5fdGFiSWQgIT0gbnVsbCAmJiBjaHJvbWUudGFicz8uY29ubmVjdCA/IGNocm9tZS50YWJzLmNvbm5lY3QodGhpcy5fdGFiSWQsIHsgbmFtZTogdGhpcy5fcG9ydE5hbWUgfSkgOiBjaHJvbWUucnVudGltZS5jb25uZWN0KHsgbmFtZTogdGhpcy5fcG9ydE5hbWUgfSk7XG5cdFx0Y29uc3Qgc2VuZCA9IChtc2cpID0+IHRoaXMuX3BvcnQ/LnBvc3RNZXNzYWdlKG1zZyk7XG5cdFx0Y29uc3Qgb25NZXNzYWdlID0gKG1zZykgPT4gdGhpcy5faW5ib3VuZC5uZXh0KG1zZyk7XG5cdFx0dGhpcy5fcG9ydC5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIob25NZXNzYWdlKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gKCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5fcG9ydD8ub25NZXNzYWdlLnJlbW92ZUxpc3RlbmVyKG9uTWVzc2FnZSk7XG5cdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLl9wb3J0Py5kaXNjb25uZWN0KCk7XG5cdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHR0aGlzLl9wb3J0ID0gbnVsbDtcblx0XHR9O1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2cpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0ZGV0YWNoKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHN1cGVyLmRldGFjaCgpO1xuXHR9XG59O1xudmFyIENocm9tZUV4dGVybmFsVHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyIHtcblx0X2V4dGVybmFsSWQ7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIF9leHRlcm5hbElkLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJjaHJvbWUtZXh0ZXJuYWxcIiwgb3B0aW9ucyk7XG5cdFx0dGhpcy5fZXh0ZXJuYWxJZCA9IF9leHRlcm5hbElkO1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdGlmICh0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUucnVudGltZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHNlbmQgPSAobXNnKSA9PiBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh0aGlzLl9leHRlcm5hbElkLCBtc2cpO1xuXHRcdGNvbnN0IGxpc3RlbmVyID0gKG1zZykgPT4ge1xuXHRcdFx0dGhpcy5faW5ib3VuZC5uZXh0KG1zZyk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbD8uYWRkTGlzdGVuZXI/LihsaXN0ZW5lcik7XG5cdFx0dGhpcy5fY2xlYW51cCA9ICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsPy5yZW1vdmVMaXN0ZW5lcj8uKGxpc3RlbmVyKTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxufTtcbnZhciBTZXJ2aWNlV29ya2VyVHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyIHtcblx0X2lzSG9zdDtcblx0X2NsZWFudXAgPSBudWxsO1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsTmFtZSwgX2lzSG9zdCA9IGZhbHNlLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJzZXJ2aWNlLXdvcmtlclwiLCBvcHRpb25zKTtcblx0XHR0aGlzLl9pc0hvc3QgPSBfaXNIb3N0O1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdGNvbnN0IHRhcmdldCA9IHRoaXMuX2lzSG9zdCA/IFwic2VydmljZS13b3JrZXItaG9zdFwiIDogXCJzZXJ2aWNlLXdvcmtlci1jbGllbnRcIjtcblx0XHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRhcmdldCk7XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRhcmdldCwgKGRhdGEpID0+IHRoaXMuX2luYm91bmQubmV4dChkYXRhKSk7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX291dGJvdW5kLnN1YnNjcmliZSgobXNnKSA9PiBzZW5kKG1zZywgbXNnLnRyYW5zZmVyYWJsZSkpKTtcblx0XHR0aGlzLl9pc0F0dGFjaGVkID0gdHJ1ZTtcblx0fVxuXHRkZXRhY2goKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0c3VwZXIuZGV0YWNoKCk7XG5cdH1cbn07XG52YXIgU2VsZlRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKGNoYW5uZWxOYW1lLCBcInNlbGZcIiwgb3B0aW9ucyk7XG5cdH1cblx0YXR0YWNoKCkge1xuXHRcdGlmICh0aGlzLl9pc0F0dGFjaGVkKSByZXR1cm47XG5cdFx0Y29uc3Qgc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcihcInNlbGZcIik7XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKFwic2VsZlwiLCAoZGF0YSkgPT4gdGhpcy5faGFuZGxlSW5jb21pbmcoZGF0YSkpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2csIG1zZy50cmFuc2ZlcmFibGUpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0X2hhbmRsZUluY29taW5nKGRhdGEpIHtcblx0XHRpZiAoZGF0YT8udHlwZSA9PT0gXCJjcmVhdGVDaGFubmVsXCIgfHwgZGF0YT8udHlwZSA9PT0gXCJjb25uZWN0Q2hhbm5lbFwiKSB0aGlzLl9lbWl0SW5jb21pbmdDb25uZWN0aW9uKHtcblx0XHRcdGlkOiBkYXRhLnJlcUlkID8/IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogZGF0YS5jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBkYXRhLnNlbmRlciA/PyBcInVua25vd25cIixcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwic2VsZlwiLFxuXHRcdFx0cG9ydDogZGF0YS5tZXNzYWdlUG9ydCA/PyBkYXRhLnBvcnQsXG5cdFx0XHRkYXRhLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0dGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpO1xuXHR9XG5cdG5vdGlmeUNoYW5uZWxDcmVhdGVkKGNoYW5uZWwsIHNlbmRlciwgcmVxSWQpIHtcblx0XHRwb3N0TWVzc2FnZSh7XG5cdFx0XHR0eXBlOiBcImNoYW5uZWxDcmVhdGVkXCIsXG5cdFx0XHRjaGFubmVsLFxuXHRcdFx0c2VuZGVyLFxuXHRcdFx0cmVxSWQsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KTtcblx0fVxuXHRkZXRhY2goKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0c3VwZXIuZGV0YWNoKCk7XG5cdH1cbn07XG52YXIgVHJhbnNwb3J0RmFjdG9yeSA9IHtcblx0d29ya2VyOiAobmFtZSwgc291cmNlLCBvcHRzKSA9PiBuZXcgV29ya2VyVHJhbnNwb3J0KG5hbWUsIHNvdXJjZSwgb3B0cyksXG5cdG1lc3NhZ2VQb3J0OiAobmFtZSwgcG9ydCwgb3B0cykgPT4gbmV3IE1lc3NhZ2VQb3J0VHJhbnNwb3J0KG5hbWUsIHBvcnQsIG9wdHMpLFxuXHRicm9hZGNhc3Q6IChuYW1lLCBiY05hbWUsIG9wdHMpID0+IG5ldyBCcm9hZGNhc3RDaGFubmVsVHJhbnNwb3J0KG5hbWUsIGJjTmFtZSwgb3B0cyksXG5cdHdlYnNvY2tldDogKG5hbWUsIHVybCwgcHJvdG9jb2xzLCBvcHRzKSA9PiBuZXcgV2ViU29ja2V0VHJhbnNwb3J0KG5hbWUsIHVybCwgcHJvdG9jb2xzLCBvcHRzKSxcblx0Y2hyb21lUnVudGltZTogKG5hbWUsIG9wdHMpID0+IG5ldyBDaHJvbWVSdW50aW1lVHJhbnNwb3J0KG5hbWUsIG9wdHMpLFxuXHRjaHJvbWVUYWJzOiAobmFtZSwgdGFiSWQsIG9wdHMpID0+IG5ldyBDaHJvbWVUYWJzVHJhbnNwb3J0KG5hbWUsIHRhYklkLCBvcHRzKSxcblx0Y2hyb21lUG9ydDogKG5hbWUsIHBvcnROYW1lLCB0YWJJZCwgb3B0cykgPT4gbmV3IENocm9tZVBvcnRUcmFuc3BvcnQobmFtZSwgcG9ydE5hbWUsIHRhYklkLCBvcHRzKSxcblx0Y2hyb21lRXh0ZXJuYWw6IChuYW1lLCBleHRlcm5hbElkLCBvcHRzKSA9PiBuZXcgQ2hyb21lRXh0ZXJuYWxUcmFuc3BvcnQobmFtZSwgZXh0ZXJuYWxJZCwgb3B0cyksXG5cdHNlcnZpY2VXb3JrZXI6IChuYW1lLCBpc0hvc3QsIG9wdHMpID0+IG5ldyBTZXJ2aWNlV29ya2VyVHJhbnNwb3J0KG5hbWUsIGlzSG9zdCwgb3B0cyksXG5cdHNlbGY6IChuYW1lLCBvcHRzKSA9PiBuZXcgU2VsZlRyYW5zcG9ydChuYW1lLCBvcHRzKVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb25PYnNlcnZlcih0cmFuc3BvcnRzKSB7XG5cdGNvbnN0IGNvbm5lY3Rpb25zID0gW107XG5cdGNvbnN0IHN1YmplY3QgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdGZvciAoY29uc3QgdHJhbnNwb3J0IG9mIHRyYW5zcG9ydHMpIHRyYW5zcG9ydC5zdWJzY3JpYmVJbmNvbWluZygoY29ubikgPT4ge1xuXHRcdGNvbm5lY3Rpb25zLnB1c2goY29ubik7XG5cdFx0c3ViamVjdC5uZXh0KGNvbm4pO1xuXHR9KTtcblx0cmV0dXJuIHtcblx0XHRzdWJzY3JpYmU6IChoYW5kbGVyKSA9PiBzdWJqZWN0LnN1YnNjcmliZShoYW5kbGVyKSxcblx0XHRnZXRDb25uZWN0aW9uczogKCkgPT4gWy4uLmNvbm5lY3Rpb25zXVxuXHR9O1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9zdG9yYWdlL1N0b3JhZ2UudHNcbnZhciBEQl9OQU1FID0gXCJ1bmlmb3JtX2NoYW5uZWxzXCI7XG52YXIgREJfVkVSU0lPTiA9IDE7XG52YXIgU1RPUkVTID0ge1xuXHRNRVNTQUdFUzogXCJtZXNzYWdlc1wiLFxuXHRNQUlMQk9YOiBcIm1haWxib3hcIixcblx0UEVORElORzogXCJwZW5kaW5nXCIsXG5cdEVYQ0hBTkdFOiBcImV4Y2hhbmdlXCIsXG5cdFRSQU5TQUNUSU9OUzogXCJ0cmFuc2FjdGlvbnNcIlxufTtcbnZhciBDaGFubmVsU3RvcmFnZSA9IGNsYXNzIHtcblx0X2RiID0gbnVsbDtcblx0X2lzT3BlbiA9IGZhbHNlO1xuXHRfb3BlblByb21pc2UgPSBudWxsO1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9tZXNzYWdlVXBkYXRlcyA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRfZXhjaGFuZ2VVcGRhdGVzID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lKSB7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBjaGFubmVsTmFtZTtcblx0fVxuXHRhc3luYyBvcGVuKCkge1xuXHRcdGlmICh0aGlzLl9kYiAmJiB0aGlzLl9pc09wZW4pIHJldHVybiB0aGlzLl9kYjtcblx0XHRpZiAodGhpcy5fb3BlblByb21pc2UpIHJldHVybiB0aGlzLl9vcGVuUHJvbWlzZTtcblx0XHR0aGlzLl9vcGVuUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3BlbihEQl9OQU1FLCBEQl9WRVJTSU9OKTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fb3BlblByb21pc2UgPSBudWxsO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBvcGVuIEluZGV4ZWREQlwiKSk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2RiID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdHRoaXMuX2lzT3BlbiA9IHRydWU7XG5cdFx0XHRcdHRoaXMuX29wZW5Qcm9taXNlID0gbnVsbDtcblx0XHRcdFx0cmVzb2x2ZSh0aGlzLl9kYik7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZGIgPSBldmVudC50YXJnZXQucmVzdWx0O1xuXHRcdFx0XHR0aGlzLl9jcmVhdGVTdG9yZXMoZGIpO1xuXHRcdFx0fTtcblx0XHR9KTtcblx0XHRyZXR1cm4gdGhpcy5fb3BlblByb21pc2U7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0aWYgKHRoaXMuX2RiKSB7XG5cdFx0XHR0aGlzLl9kYi5jbG9zZSgpO1xuXHRcdFx0dGhpcy5fZGIgPSBudWxsO1xuXHRcdFx0dGhpcy5faXNPcGVuID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdF9jcmVhdGVTdG9yZXMoZGIpIHtcblx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoU1RPUkVTLk1FU1NBR0VTKSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZXNTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKFNUT1JFUy5NRVNTQUdFUywgeyBrZXlQYXRoOiBcImlkXCIgfSk7XG5cdFx0XHRtZXNzYWdlc1N0b3JlLmNyZWF0ZUluZGV4KFwiY2hhbm5lbFwiLCBcImNoYW5uZWxcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdFx0bWVzc2FnZXNTdG9yZS5jcmVhdGVJbmRleChcInN0YXR1c1wiLCBcInN0YXR1c1wiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRtZXNzYWdlc1N0b3JlLmNyZWF0ZUluZGV4KFwicmVjaXBpZW50XCIsIFwicmVjaXBpZW50XCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0XHRcdG1lc3NhZ2VzU3RvcmUuY3JlYXRlSW5kZXgoXCJjcmVhdGVkQXRcIiwgXCJjcmVhdGVkQXRcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdFx0bWVzc2FnZXNTdG9yZS5jcmVhdGVJbmRleChcImNoYW5uZWxfc3RhdHVzXCIsIFtcImNoYW5uZWxcIiwgXCJzdGF0dXNcIl0sIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0XHR9XG5cdFx0aWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKFNUT1JFUy5NQUlMQk9YKSkge1xuXHRcdFx0Y29uc3QgbWFpbGJveFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoU1RPUkVTLk1BSUxCT1gsIHsga2V5UGF0aDogXCJpZFwiIH0pO1xuXHRcdFx0bWFpbGJveFN0b3JlLmNyZWF0ZUluZGV4KFwiY2hhbm5lbFwiLCBcImNoYW5uZWxcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdFx0bWFpbGJveFN0b3JlLmNyZWF0ZUluZGV4KFwicHJpb3JpdHlcIiwgXCJwcmlvcml0eVwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRtYWlsYm94U3RvcmUuY3JlYXRlSW5kZXgoXCJleHBpcmVzQXRcIiwgXCJleHBpcmVzQXRcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdH1cblx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoU1RPUkVTLlBFTkRJTkcpKSB7XG5cdFx0XHRjb25zdCBwZW5kaW5nU3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZShTVE9SRVMuUEVORElORywgeyBrZXlQYXRoOiBcImlkXCIgfSk7XG5cdFx0XHRwZW5kaW5nU3RvcmUuY3JlYXRlSW5kZXgoXCJjaGFubmVsXCIsIFwiY2hhbm5lbFwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRwZW5kaW5nU3RvcmUuY3JlYXRlSW5kZXgoXCJjcmVhdGVkQXRcIiwgXCJjcmVhdGVkQXRcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdH1cblx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoU1RPUkVTLkVYQ0hBTkdFKSkge1xuXHRcdFx0Y29uc3QgZXhjaGFuZ2VTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSwgeyBrZXlQYXRoOiBcImlkXCIgfSk7XG5cdFx0XHRleGNoYW5nZVN0b3JlLmNyZWF0ZUluZGV4KFwia2V5XCIsIFwia2V5XCIsIHsgdW5pcXVlOiB0cnVlIH0pO1xuXHRcdFx0ZXhjaGFuZ2VTdG9yZS5jcmVhdGVJbmRleChcIm93bmVyXCIsIFwib3duZXJcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdH1cblx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoU1RPUkVTLlRSQU5TQUNUSU9OUykpIGRiLmNyZWF0ZU9iamVjdFN0b3JlKFNUT1JFUy5UUkFOU0FDVElPTlMsIHsga2V5UGF0aDogXCJpZFwiIH0pLmNyZWF0ZUluZGV4KFwiY3JlYXRlZEF0XCIsIFwiY3JlYXRlZEF0XCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0fVxuXHRhc3luYyBkZWZlcihtZXNzYWdlLCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IHN0b3JlZE1lc3NhZ2UgPSB7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBtZXNzYWdlLmNoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IG1lc3NhZ2Uuc2VuZGVyID8/IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0cmVjaXBpZW50OiBtZXNzYWdlLmNoYW5uZWwsXG5cdFx0XHR0eXBlOiBtZXNzYWdlLnR5cGUsXG5cdFx0XHRwYXlsb2FkOiBtZXNzYWdlLnBheWxvYWQsXG5cdFx0XHRzdGF0dXM6IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJpb3JpdHk6IG9wdGlvbnMucHJpb3JpdHkgPz8gMCxcblx0XHRcdGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdHVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdGV4cGlyZXNBdDogb3B0aW9ucy5leHBpcmVzSW4gPyBEYXRlLm5vdygpICsgb3B0aW9ucy5leHBpcmVzSW4gOiBudWxsLFxuXHRcdFx0cmV0cnlDb3VudDogMCxcblx0XHRcdG1heFJldHJpZXM6IG9wdGlvbnMubWF4UmV0cmllcyA/PyAzLFxuXHRcdFx0bWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGFcblx0XHR9O1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFtTVE9SRVMuTUVTU0FHRVMsIFNUT1JFUy5NQUlMQk9YXSwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBtZXNzYWdlc1N0b3JlID0gdHgub2JqZWN0U3RvcmUoU1RPUkVTLk1FU1NBR0VTKTtcblx0XHRcdGNvbnN0IG1haWxib3hTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5NQUlMQk9YKTtcblx0XHRcdG1lc3NhZ2VzU3RvcmUuYWRkKHN0b3JlZE1lc3NhZ2UpO1xuXHRcdFx0bWFpbGJveFN0b3JlLmFkZChzdG9yZWRNZXNzYWdlKTtcblx0XHRcdHR4Lm9uY29tcGxldGUgPSAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX21lc3NhZ2VVcGRhdGVzLm5leHQoc3RvcmVkTWVzc2FnZSk7XG5cdFx0XHRcdHJlc29sdmUoc3RvcmVkTWVzc2FnZS5pZCk7XG5cdFx0XHR9O1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGRlZmVyIG1lc3NhZ2VcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGdldERlZmVycmVkTWVzc2FnZXMoY2hhbm5lbCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUVTU0FHRVMsIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUoU1RPUkVTLk1FU1NBR0VTKTtcblx0XHRcdGNvbnN0IGluZGV4ID0gb3B0aW9ucy5zdGF0dXMgPyBzdG9yZS5pbmRleChcImNoYW5uZWxfc3RhdHVzXCIpIDogc3RvcmUuaW5kZXgoXCJjaGFubmVsXCIpO1xuXHRcdFx0Y29uc3QgcXVlcnkgPSBvcHRpb25zLnN0YXR1cyA/IElEQktleVJhbmdlLm9ubHkoW2NoYW5uZWwsIG9wdGlvbnMuc3RhdHVzXSkgOiBJREJLZXlSYW5nZS5vbmx5KGNoYW5uZWwpO1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGluZGV4LmdldEFsbChxdWVyeSwgb3B0aW9ucy5saW1pdCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0bGV0IHJlc3VsdHMgPSByZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0aWYgKG9wdGlvbnMub2Zmc2V0KSByZXN1bHRzID0gcmVzdWx0cy5zbGljZShvcHRpb25zLm9mZnNldCk7XG5cdFx0XHRcdHJlc29sdmUocmVzdWx0cyk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IGRlZmVycmVkIG1lc3NhZ2VzXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBwcm9jZXNzTmV4dFBlbmRpbmcoY2hhbm5lbCkge1xuXHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUVTU0FHRVMsIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKFNUT1JFUy5NRVNTQUdFUykuaW5kZXgoXCJjaGFubmVsX3N0YXR1c1wiKS5vcGVuQ3Vyc29yKElEQktleVJhbmdlLm9ubHkoW2NoYW5uZWwsIFwicGVuZGluZ1wiXSkpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGN1cnNvciA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAoY3Vyc29yKSB7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGN1cnNvci52YWx1ZTtcblx0XHRcdFx0XHRtZXNzYWdlLnN0YXR1cyA9IFwicHJvY2Vzc2luZ1wiO1xuXHRcdFx0XHRcdG1lc3NhZ2UudXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0XHRjdXJzb3IudXBkYXRlKG1lc3NhZ2UpO1xuXHRcdFx0XHRcdHRoaXMuX21lc3NhZ2VVcGRhdGVzLm5leHQobWVzc2FnZSk7XG5cdFx0XHRcdFx0cmVzb2x2ZShtZXNzYWdlKTtcblx0XHRcdFx0fSBlbHNlIHJlc29sdmUobnVsbCk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcHJvY2VzcyBwZW5kaW5nIG1lc3NhZ2VcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIG1hcmtEZWxpdmVyZWQobWVzc2FnZUlkKSB7XG5cdFx0YXdhaXQgdGhpcy5fdXBkYXRlTWVzc2FnZVN0YXR1cyhtZXNzYWdlSWQsIFwiZGVsaXZlcmVkXCIpO1xuXHR9XG5cdGFzeW5jIG1hcmtGYWlsZWQobWVzc2FnZUlkKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUVTU0FHRVMsIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKFNUT1JFUy5NRVNTQUdFUyk7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gc3RvcmUuZ2V0KG1lc3NhZ2VJZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAoIW1lc3NhZ2UpIHtcblx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0bWVzc2FnZS5yZXRyeUNvdW50Kys7XG5cdFx0XHRcdG1lc3NhZ2UudXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0aWYgKG1lc3NhZ2UucmV0cnlDb3VudCA8IG1lc3NhZ2UubWF4UmV0cmllcykgbWVzc2FnZS5zdGF0dXMgPSBcInBlbmRpbmdcIjtcblx0XHRcdFx0ZWxzZSBtZXNzYWdlLnN0YXR1cyA9IFwiZmFpbGVkXCI7XG5cdFx0XHRcdHN0b3JlLnB1dChtZXNzYWdlKTtcblx0XHRcdFx0dGhpcy5fbWVzc2FnZVVwZGF0ZXMubmV4dChtZXNzYWdlKTtcblx0XHRcdFx0cmVzb2x2ZShtZXNzYWdlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCIpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIG1hcmsgbWVzc2FnZSBhcyBmYWlsZWRcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIF91cGRhdGVNZXNzYWdlU3RhdHVzKG1lc3NhZ2VJZCwgc3RhdHVzKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUVTU0FHRVMsIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKFNUT1JFUy5NRVNTQUdFUyk7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gc3RvcmUuZ2V0KG1lc3NhZ2VJZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHRcdG1lc3NhZ2Uuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0XHRcdG1lc3NhZ2UudXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0XHRzdG9yZS5wdXQobWVzc2FnZSk7XG5cdFx0XHRcdFx0dGhpcy5fbWVzc2FnZVVwZGF0ZXMubmV4dChtZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gdXBkYXRlIG1lc3NhZ2Ugc3RhdHVzXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBnZXRNYWlsYm94KGNoYW5uZWwsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUFJTEJPWCwgXCJyZWFkb25seVwiKS5vYmplY3RTdG9yZShTVE9SRVMuTUFJTEJPWCkuaW5kZXgoXCJjaGFubmVsXCIpLmdldEFsbChJREJLZXlSYW5nZS5vbmx5KGNoYW5uZWwpLCBvcHRpb25zLmxpbWl0KTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRsZXQgcmVzdWx0cyA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAob3B0aW9ucy5zb3J0QnkgPT09IFwicHJpb3JpdHlcIikgcmVzdWx0cy5zb3J0KChhLCBiKSA9PiBiLnByaW9yaXR5IC0gYS5wcmlvcml0eSk7XG5cdFx0XHRcdGVsc2UgcmVzdWx0cy5zb3J0KChhLCBiKSA9PiBiLmNyZWF0ZWRBdCAtIGEuY3JlYXRlZEF0KTtcblx0XHRcdFx0cmVzb2x2ZShyZXN1bHRzKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgbWFpbGJveFwiKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgZ2V0TWFpbGJveFN0YXRzKGNoYW5uZWwpIHtcblx0XHRjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMuZ2V0RGVmZXJyZWRNZXNzYWdlcyhjaGFubmVsKTtcblx0XHRjb25zdCBzdGF0cyA9IHtcblx0XHRcdHRvdGFsOiBtZXNzYWdlcy5sZW5ndGgsXG5cdFx0XHRwZW5kaW5nOiAwLFxuXHRcdFx0cHJvY2Vzc2luZzogMCxcblx0XHRcdGRlbGl2ZXJlZDogMCxcblx0XHRcdGZhaWxlZDogMCxcblx0XHRcdGV4cGlyZWQ6IDBcblx0XHR9O1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0Zm9yIChjb25zdCBtc2cgb2YgbWVzc2FnZXMpIGlmIChtc2cuZXhwaXJlc0F0ICYmIG1zZy5leHBpcmVzQXQgPCBub3cpIHN0YXRzLmV4cGlyZWQrKztcblx0XHRlbHNlIHN0YXRzW21zZy5zdGF0dXNdKys7XG5cdFx0cmV0dXJuIHN0YXRzO1xuXHR9XG5cdGFzeW5jIGNsZWFyTWFpbGJveChjaGFubmVsKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdHggPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUFJTEJPWCwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBpbmRleCA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5NQUlMQk9YKS5pbmRleChcImNoYW5uZWxcIik7XG5cdFx0XHRsZXQgZGVsZXRlZENvdW50ID0gMDtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBpbmRleC5vcGVuQ3Vyc29yKElEQktleVJhbmdlLm9ubHkoY2hhbm5lbCkpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGN1cnNvciA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAoY3Vyc29yKSB7XG5cdFx0XHRcdFx0Y3Vyc29yLmRlbGV0ZSgpO1xuXHRcdFx0XHRcdGRlbGV0ZWRDb3VudCsrO1xuXHRcdFx0XHRcdGN1cnNvci5jb250aW51ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dHgub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUoZGVsZXRlZENvdW50KTtcblx0XHRcdHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBjbGVhciBtYWlsYm94XCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyByZWdpc3RlclBlbmRpbmcob3BlcmF0aW9uKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRjb25zdCBwZW5kaW5nID0ge1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHR0eXBlOiBvcGVyYXRpb24udHlwZSxcblx0XHRcdGRhdGE6IG9wZXJhdGlvbi5kYXRhLFxuXHRcdFx0bWV0YWRhdGE6IG9wZXJhdGlvbi5tZXRhZGF0YSxcblx0XHRcdGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdHN0YXR1czogXCJwZW5kaW5nXCJcblx0XHR9O1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5QRU5ESU5HLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5QRU5ESU5HKS5hZGQocGVuZGluZyk7XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4gcmVzb2x2ZShwZW5kaW5nLmlkKTtcblx0XHRcdHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byByZWdpc3RlciBwZW5kaW5nIG9wZXJhdGlvblwiKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgZ2V0UGVuZGluZ09wZXJhdGlvbnMoKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5QRU5ESU5HLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKFNUT1JFUy5QRU5ESU5HKS5pbmRleChcImNoYW5uZWxcIikuZ2V0QWxsKElEQktleVJhbmdlLm9ubHkodGhpcy5fY2hhbm5lbE5hbWUpKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdCk7XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgcGVuZGluZyBvcGVyYXRpb25zXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBjb21wbGV0ZVBlbmRpbmcob3BlcmF0aW9uSWQpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5QRU5ESU5HLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5QRU5ESU5HKS5kZWxldGUob3BlcmF0aW9uSWQpO1xuXHRcdFx0dHgub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUoKTtcblx0XHRcdHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBjb21wbGV0ZSBwZW5kaW5nIG9wZXJhdGlvblwiKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgYXdhaXRQZW5kaW5nKG9wZXJhdGlvbklkLCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IDNlNDtcblx0XHRjb25zdCBwb2xsSW50ZXJ2YWwgPSBvcHRpb25zLnBvbGxJbnRlcnZhbCA/PyAxMDA7XG5cdFx0Y29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblx0XHR3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IHRpbWVvdXQpIHtcblx0XHRcdGNvbnN0IHBlbmRpbmcgPSBhd2FpdCB0aGlzLl9nZXRQZW5kaW5nQnlJZChvcGVyYXRpb25JZCk7XG5cdFx0XHRpZiAoIXBlbmRpbmcpIHJldHVybiBudWxsO1xuXHRcdFx0aWYgKHBlbmRpbmcuc3RhdHVzID09PSBcImNvbXBsZXRlZFwiKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuY29tcGxldGVQZW5kaW5nKG9wZXJhdGlvbklkKTtcblx0XHRcdFx0cmV0dXJuIHBlbmRpbmcucmVzdWx0O1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgcG9sbEludGVydmFsKSk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBFcnJvcihgUGVuZGluZyBvcGVyYXRpb24gJHtvcGVyYXRpb25JZH0gdGltZWQgb3V0YCk7XG5cdH1cblx0YXN5bmMgX2dldFBlbmRpbmdCeUlkKGlkKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5QRU5ESU5HLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKFNUT1JFUy5QRU5ESU5HKS5nZXQoaWQpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKHJlcXVlc3QucmVzdWx0ID8/IG51bGwpO1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IHBlbmRpbmcgb3BlcmF0aW9uXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBleGNoYW5nZVB1dChrZXksIHZhbHVlLCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IHJlY29yZCA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGtleSxcblx0XHRcdHZhbHVlLFxuXHRcdFx0b3duZXI6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0c2hhcmVkV2l0aDogb3B0aW9ucy5zaGFyZWRXaXRoID8/IFtcIipcIl0sXG5cdFx0XHR2ZXJzaW9uOiAxLFxuXHRcdFx0Y3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuXHRcdFx0dXBkYXRlZEF0OiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdHggPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuRVhDSEFOR0UsIFwicmVhZHdyaXRlXCIpO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSB0eC5vYmplY3RTdG9yZShTVE9SRVMuRVhDSEFOR0UpO1xuXHRcdFx0Y29uc3QgZ2V0UmVxdWVzdCA9IHN0b3JlLmluZGV4KFwia2V5XCIpLmdldChrZXkpO1xuXHRcdFx0Z2V0UmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV4aXN0aW5nID0gZ2V0UmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChleGlzdGluZykge1xuXHRcdFx0XHRcdHJlY29yZC5pZCA9IGV4aXN0aW5nLmlkO1xuXHRcdFx0XHRcdHJlY29yZC52ZXJzaW9uID0gZXhpc3RpbmcudmVyc2lvbiArIDE7XG5cdFx0XHRcdFx0cmVjb3JkLmNyZWF0ZWRBdCA9IGV4aXN0aW5nLmNyZWF0ZWRBdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9yZS5wdXQocmVjb3JkKTtcblx0XHRcdH07XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9leGNoYW5nZVVwZGF0ZXMubmV4dChyZWNvcmQpO1xuXHRcdFx0XHRyZXNvbHZlKHJlY29yZC5pZCk7XG5cdFx0XHR9O1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIHB1dCBleGNoYW5nZSBkYXRhXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBleGNoYW5nZUdldChrZXkpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gZGIudHJhbnNhY3Rpb24oU1RPUkVTLkVYQ0hBTkdFLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSkuaW5kZXgoXCJrZXlcIikuZ2V0KGtleSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmICghcmVjb3JkKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShudWxsKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCF0aGlzLl9jYW5BY2Nlc3NFeGNoYW5nZShyZWNvcmQpKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShudWxsKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVzb2x2ZShyZWNvcmQudmFsdWUpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBleGNoYW5nZSBkYXRhXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBleGNoYW5nZURlbGV0ZShrZXkpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5FWENIQU5HRSwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSk7XG5cdFx0XHRjb25zdCBnZXRSZXF1ZXN0ID0gc3RvcmUuaW5kZXgoXCJrZXlcIikuZ2V0KGtleSk7XG5cdFx0XHRnZXRSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0gZ2V0UmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmICghcmVjb3JkKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZWNvcmQub3duZXIgIT09IHRoaXMuX2NoYW5uZWxOYW1lKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3JlLmRlbGV0ZShyZWNvcmQuaWQpO1xuXHRcdFx0fTtcblx0XHRcdHR4Lm9uY29tcGxldGUgPSAoKSA9PiByZXNvbHZlKHRydWUpO1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGRlbGV0ZSBleGNoYW5nZSBkYXRhXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBleGNoYW5nZUxvY2soa2V5LCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IHRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgPz8gM2U0O1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5FWENIQU5HRSwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSk7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gc3RvcmUuaW5kZXgoXCJrZXlcIikuZ2V0KGtleSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmICghcmVjb3JkKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZWNvcmQubG9jayAmJiByZWNvcmQubG9jay5ob2xkZXIgIT09IHRoaXMuX2NoYW5uZWxOYW1lKSB7XG5cdFx0XHRcdFx0aWYgKHJlY29yZC5sb2NrLmV4cGlyZXNBdCA+IERhdGUubm93KCkpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZWNvcmQubG9jayA9IHtcblx0XHRcdFx0XHRob2xkZXI6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0XHRcdGFjcXVpcmVkQXQ6IERhdGUubm93KCksXG5cdFx0XHRcdFx0ZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgdGltZW91dFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZWNvcmQudXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0c3RvcmUucHV0KHJlY29yZCk7XG5cdFx0XHR9O1xuXHRcdFx0dHgub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUodHJ1ZSk7XG5cdFx0XHR0eC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gYWNxdWlyZSBsb2NrXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBleGNoYW5nZVVubG9jayhrZXkpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5FWENIQU5HRSwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSk7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gc3RvcmUuaW5kZXgoXCJrZXlcIikuZ2V0KGtleSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChyZWNvcmQgJiYgcmVjb3JkLmxvY2s/LmhvbGRlciA9PT0gdGhpcy5fY2hhbm5lbE5hbWUpIHtcblx0XHRcdFx0XHRkZWxldGUgcmVjb3JkLmxvY2s7XG5cdFx0XHRcdFx0cmVjb3JkLnVwZGF0ZWRBdCA9IERhdGUubm93KCk7XG5cdFx0XHRcdFx0c3RvcmUucHV0KHJlY29yZCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4gcmVzb2x2ZSgpO1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlbGVhc2UgbG9ja1wiKSk7XG5cdFx0fSk7XG5cdH1cblx0X2NhbkFjY2Vzc0V4Y2hhbmdlKHJlY29yZCkge1xuXHRcdGlmIChyZWNvcmQub3duZXIgPT09IHRoaXMuX2NoYW5uZWxOYW1lKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAocmVjb3JkLnNoYXJlZFdpdGguaW5jbHVkZXMoXCIqXCIpKSByZXR1cm4gdHJ1ZTtcblx0XHRyZXR1cm4gcmVjb3JkLnNoYXJlZFdpdGguaW5jbHVkZXModGhpcy5fY2hhbm5lbE5hbWUpO1xuXHR9XG5cdGFzeW5jIGJlZ2luVHJhbnNhY3Rpb24oKSB7XG5cdFx0cmV0dXJuIG5ldyBDaGFubmVsVHJhbnNhY3Rpb24odGhpcyk7XG5cdH1cblx0YXN5bmMgZXhlY3V0ZVRyYW5zYWN0aW9uKG9wZXJhdGlvbnMpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IHN0b3JlTmFtZXMgPSBuZXcgU2V0KG9wZXJhdGlvbnMubWFwKChvcCkgPT4gb3Auc3RvcmUpKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdHggPSBkYi50cmFuc2FjdGlvbihBcnJheS5mcm9tKHN0b3JlTmFtZXMpLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdGZvciAoY29uc3Qgb3Agb2Ygb3BlcmF0aW9ucykge1xuXHRcdFx0XHRjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKG9wLnN0b3JlKTtcblx0XHRcdFx0c3dpdGNoIChvcC50eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcInB1dFwiOlxuXHRcdFx0XHRcdFx0aWYgKG9wLnZhbHVlICE9PSB2b2lkIDApIHN0b3JlLnB1dChvcC52YWx1ZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiZGVsZXRlXCI6XG5cdFx0XHRcdFx0XHRpZiAob3Aua2V5ICE9PSB2b2lkIDApIHN0b3JlLmRlbGV0ZShvcC5rZXkpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcInVwZGF0ZVwiOiBpZiAob3Aua2V5ICE9PSB2b2lkIDApIHtcblx0XHRcdFx0XHRcdGNvbnN0IGdldFJlcSA9IHN0b3JlLmdldChvcC5rZXkpO1xuXHRcdFx0XHRcdFx0Z2V0UmVxLm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGdldFJlcS5yZXN1bHQgJiYgb3AudmFsdWUpIHN0b3JlLnB1dCh7XG5cdFx0XHRcdFx0XHRcdFx0Li4uZ2V0UmVxLnJlc3VsdCxcblx0XHRcdFx0XHRcdFx0XHQuLi5vcC52YWx1ZVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4gcmVzb2x2ZSgpO1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiVHJhbnNhY3Rpb24gZmFpbGVkXCIpKTtcblx0XHR9KTtcblx0fVxuXHRvbk1lc3NhZ2VVcGRhdGUoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9tZXNzYWdlVXBkYXRlcy5zdWJzY3JpYmUoeyBuZXh0OiBoYW5kbGVyIH0pO1xuXHR9XG5cdG9uRXhjaGFuZ2VVcGRhdGUoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9leGNoYW5nZVVwZGF0ZXMuc3Vic2NyaWJlKHsgbmV4dDogaGFuZGxlciB9KTtcblx0fVxuXHRhc3luYyBjbGVhbnVwRXhwaXJlZCgpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oW1NUT1JFUy5NRVNTQUdFUywgU1RPUkVTLk1BSUxCT1hdLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzU3RvcmUgPSB0eC5vYmplY3RTdG9yZShTVE9SRVMuTUVTU0FHRVMpO1xuXHRcdFx0Y29uc3QgbWFpbGJveFN0b3JlID0gdHgub2JqZWN0U3RvcmUoU1RPUkVTLk1BSUxCT1gpO1xuXHRcdFx0bGV0IGRlbGV0ZWRDb3VudCA9IDA7XG5cdFx0XHRjb25zdCBtc2dSZXF1ZXN0ID0gbWVzc2FnZXNTdG9yZS5vcGVuQ3Vyc29yKCk7XG5cdFx0XHRtc2dSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgY3Vyc29yID0gbXNnUmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChjdXJzb3IpIHtcblx0XHRcdFx0XHRjb25zdCBtc2cgPSBjdXJzb3IudmFsdWU7XG5cdFx0XHRcdFx0aWYgKG1zZy5leHBpcmVzQXQgJiYgbXNnLmV4cGlyZXNBdCA8IG5vdykge1xuXHRcdFx0XHRcdFx0Y3Vyc29yLmRlbGV0ZSgpO1xuXHRcdFx0XHRcdFx0ZGVsZXRlZENvdW50Kys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGN1cnNvci5jb250aW51ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgbWFpbFJlcXVlc3QgPSBtYWlsYm94U3RvcmUub3BlbkN1cnNvcigpO1xuXHRcdFx0bWFpbFJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjdXJzb3IgPSBtYWlsUmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChjdXJzb3IpIHtcblx0XHRcdFx0XHRjb25zdCBtc2cgPSBjdXJzb3IudmFsdWU7XG5cdFx0XHRcdFx0aWYgKG1zZy5leHBpcmVzQXQgJiYgbXNnLmV4cGlyZXNBdCA8IG5vdykge1xuXHRcdFx0XHRcdFx0Y3Vyc29yLmRlbGV0ZSgpO1xuXHRcdFx0XHRcdFx0ZGVsZXRlZENvdW50Kys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGN1cnNvci5jb250aW51ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dHgub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUoZGVsZXRlZENvdW50KTtcblx0XHRcdHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBjbGVhbnVwIGV4cGlyZWRcIikpO1xuXHRcdH0pO1xuXHR9XG59O1xudmFyIENoYW5uZWxUcmFuc2FjdGlvbiA9IGNsYXNzIHtcblx0X3N0b3JhZ2U7XG5cdF9vcGVyYXRpb25zID0gW107XG5cdF9pc0NvbW1pdHRlZCA9IGZhbHNlO1xuXHRfaXNSb2xsZWRCYWNrID0gZmFsc2U7XG5cdGNvbnN0cnVjdG9yKF9zdG9yYWdlKSB7XG5cdFx0dGhpcy5fc3RvcmFnZSA9IF9zdG9yYWdlO1xuXHR9XG5cdHB1dChzdG9yZSwgdmFsdWUpIHtcblx0XHR0aGlzLl9jaGVja1N0YXRlKCk7XG5cdFx0dGhpcy5fb3BlcmF0aW9ucy5wdXNoKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwicHV0XCIsXG5cdFx0XHRzdG9yZSxcblx0XHRcdHZhbHVlLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0ZGVsZXRlKHN0b3JlLCBrZXkpIHtcblx0XHR0aGlzLl9jaGVja1N0YXRlKCk7XG5cdFx0dGhpcy5fb3BlcmF0aW9ucy5wdXNoKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwiZGVsZXRlXCIsXG5cdFx0XHRzdG9yZSxcblx0XHRcdGtleSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdHVwZGF0ZShzdG9yZSwga2V5LCB1cGRhdGVzKSB7XG5cdFx0dGhpcy5fY2hlY2tTdGF0ZSgpO1xuXHRcdHRoaXMuX29wZXJhdGlvbnMucHVzaCh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHR0eXBlOiBcInVwZGF0ZVwiLFxuXHRcdFx0c3RvcmUsXG5cdFx0XHRrZXksXG5cdFx0XHR2YWx1ZTogdXBkYXRlcyxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGFzeW5jIGNvbW1pdCgpIHtcblx0XHR0aGlzLl9jaGVja1N0YXRlKCk7XG5cdFx0aWYgKHRoaXMuX29wZXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLl9pc0NvbW1pdHRlZCA9IHRydWU7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuX3N0b3JhZ2UuZXhlY3V0ZVRyYW5zYWN0aW9uKHRoaXMuX29wZXJhdGlvbnMpO1xuXHRcdHRoaXMuX2lzQ29tbWl0dGVkID0gdHJ1ZTtcblx0fVxuXHRyb2xsYmFjaygpIHtcblx0XHR0aGlzLl9vcGVyYXRpb25zID0gW107XG5cdFx0dGhpcy5faXNSb2xsZWRCYWNrID0gdHJ1ZTtcblx0fVxuXHRnZXQgb3BlcmF0aW9uQ291bnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX29wZXJhdGlvbnMubGVuZ3RoO1xuXHR9XG5cdF9jaGVja1N0YXRlKCkge1xuXHRcdGlmICh0aGlzLl9pc0NvbW1pdHRlZCkgdGhyb3cgbmV3IEVycm9yKFwiVHJhbnNhY3Rpb24gYWxyZWFkeSBjb21taXR0ZWRcIik7XG5cdFx0aWYgKHRoaXMuX2lzUm9sbGVkQmFjaykgdGhyb3cgbmV3IEVycm9yKFwiVHJhbnNhY3Rpb24gYWxyZWFkeSByb2xsZWQgYmFja1wiKTtcblx0fVxufTtcbnZhciBfc3RvcmFnZUluc3RhbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5mdW5jdGlvbiBnZXRDaGFubmVsU3RvcmFnZShjaGFubmVsTmFtZSkge1xuXHRpZiAoIV9zdG9yYWdlSW5zdGFuY2VzLmhhcyhjaGFubmVsTmFtZSkpIF9zdG9yYWdlSW5zdGFuY2VzLnNldChjaGFubmVsTmFtZSwgbmV3IENoYW5uZWxTdG9yYWdlKGNoYW5uZWxOYW1lKSk7XG5cdHJldHVybiBfc3RvcmFnZUluc3RhbmNlcy5nZXQoY2hhbm5lbE5hbWUpO1xufVxuZnVuY3Rpb24gY2xvc2VBbGxTdG9yYWdlKCkge1xuXHRmb3IgKGNvbnN0IHN0b3JhZ2Ugb2YgX3N0b3JhZ2VJbnN0YW5jZXMudmFsdWVzKCkpIHN0b3JhZ2UuY2xvc2UoKTtcblx0X3N0b3JhZ2VJbnN0YW5jZXMuY2xlYXIoKTtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvY2hhbm5lbC9DaGFubmVsQ29udGV4dC50c1xudmFyIHdvcmtlckJhc2UgPSBnZXRXb3JrZXJSZXNvbHZlQmFzZVVybCgpO1xudmFyIHdvcmtlckNvZGUgPSB3b3JrZXJCYXNlLmxlbmd0aCA+IDAgPyBuZXcgVVJMKFwiLi4vdHJhbnNwb3J0L1dvcmtlci50c1wiLCB3b3JrZXJCYXNlKSA6IFwiXCI7XG52YXIgUmVtb3RlQ2hhbm5lbEhlbHBlciQxID0gY2xhc3Mge1xuXHRfY2hhbm5lbDtcblx0X2NvbnRleHQ7XG5cdF9vcHRpb25zO1xuXHRfY29ubmVjdGlvbjtcblx0X3N0b3JhZ2U7XG5cdGNvbnN0cnVjdG9yKF9jaGFubmVsLCBfY29udGV4dCwgX29wdGlvbnMgPSB7fSkge1xuXHRcdHRoaXMuX2NoYW5uZWwgPSBfY2hhbm5lbDtcblx0XHR0aGlzLl9jb250ZXh0ID0gX2NvbnRleHQ7XG5cdFx0dGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb24gPSBnZXRDb25uZWN0aW9uKF9jaGFubmVsKTtcblx0XHR0aGlzLl9zdG9yYWdlID0gZ2V0Q2hhbm5lbFN0b3JhZ2UoX2NoYW5uZWwpO1xuXHR9XG5cdGFzeW5jIHJlcXVlc3QocGF0aCwgYWN0aW9uLCBhcmdzLCBvcHRpb25zID0ge30pIHtcblx0XHRsZXQgbm9ybWFsaXplZFBhdGggPSB0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIiA/IFtwYXRoXSA6IHBhdGg7XG5cdFx0bGV0IG5vcm1hbGl6ZWRBY3Rpb24gPSBhY3Rpb247XG5cdFx0bGV0IG5vcm1hbGl6ZWRBcmdzID0gYXJncztcblx0XHRpZiAoQXJyYXkuaXNBcnJheShhY3Rpb24pICYmIGlzUmVmbGVjdEFjdGlvbihwYXRoKSkge1xuXHRcdFx0b3B0aW9ucyA9IGFyZ3M7XG5cdFx0XHRub3JtYWxpemVkQXJncyA9IGFjdGlvbjtcblx0XHRcdG5vcm1hbGl6ZWRBY3Rpb24gPSBwYXRoO1xuXHRcdFx0bm9ybWFsaXplZFBhdGggPSBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHQuZ2V0SG9zdCgpPy5yZXF1ZXN0KG5vcm1hbGl6ZWRQYXRoLCBub3JtYWxpemVkQWN0aW9uLCBub3JtYWxpemVkQXJncywgb3B0aW9ucywgdGhpcy5fY2hhbm5lbCk7XG5cdH1cblx0YXN5bmMgZG9JbXBvcnRNb2R1bGUodXJsLCBvcHRpb25zID0ge30pIHtcblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KFtdLCBXUmVmbGVjdEFjdGlvbi5JTVBPUlQsIFt1cmxdLCBvcHRpb25zKTtcblx0fVxuXHRhc3luYyBkZWZlck1lc3NhZ2UocGF5bG9hZCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0b3JhZ2UuZGVmZXIoe1xuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbCxcblx0XHRcdHNlbmRlcjogdGhpcy5fY29udGV4dC5ob3N0TmFtZSxcblx0XHRcdHR5cGU6IFwicmVxdWVzdFwiLFxuXHRcdFx0cGF5bG9hZFxuXHRcdH0sIG9wdGlvbnMpO1xuXHR9XG5cdGFzeW5jIGdldFBlbmRpbmdNZXNzYWdlcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RvcmFnZS5nZXREZWZlcnJlZE1lc3NhZ2VzKHRoaXMuX2NoYW5uZWwsIHsgc3RhdHVzOiBcInBlbmRpbmdcIiB9KTtcblx0fVxuXHRnZXQgY29ubmVjdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbjtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWw7XG5cdH1cblx0Z2V0IGNvbnRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHQ7XG5cdH1cbn07XG52YXIgQ2hhbm5lbEhhbmRsZXIkMSA9IGNsYXNzIHtcblx0X2NoYW5uZWw7XG5cdF9jb250ZXh0O1xuXHRfb3B0aW9ucztcblx0X2Nvbm5lY3Rpb247XG5cdF91bmlmaWVkO1xuXHRnZXQgX2ZvclJlc29sdmVzKCkge1xuXHRcdHJldHVybiB0aGlzLl91bmlmaWVkLl9fZ2V0UHJpdmF0ZShcIl9wZW5kaW5nXCIpO1xuXHR9XG5cdGdldCBfc3Vic2NyaXB0aW9ucygpIHtcblx0XHRyZXR1cm4gdGhpcy5fdW5pZmllZC5fX2dldFByaXZhdGUoXCJfc3Vic2NyaXB0aW9uc1wiKTtcblx0fVxuXHRnZXQgX2Jyb2FkY2FzdHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3VuaWZpZWQuX19nZXRQcml2YXRlKFwiX3RyYW5zcG9ydHNcIik7XG5cdH1cblx0Y29uc3RydWN0b3IoX2NoYW5uZWwsIF9jb250ZXh0LCBfb3B0aW9ucyA9IHt9KSB7XG5cdFx0dGhpcy5fY2hhbm5lbCA9IF9jaGFubmVsO1xuXHRcdHRoaXMuX2NvbnRleHQgPSBfY29udGV4dDtcblx0XHR0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG5cdFx0dGhpcy5fY29ubmVjdGlvbiA9IGdldENvbm5lY3Rpb25Qb29sKCkuZ2V0T3JDcmVhdGUoX2NoYW5uZWwsIFwiaW50ZXJuYWxcIiwgX29wdGlvbnMpO1xuXHRcdHRoaXMuX3VuaWZpZWQgPSBuZXcgVW5pZmllZENoYW5uZWwoe1xuXHRcdFx0bmFtZTogX2NoYW5uZWwsXG5cdFx0XHRhdXRvTGlzdGVuOiBmYWxzZSxcblx0XHRcdHRpbWVvdXQ6IF9vcHRpb25zPy50aW1lb3V0XG5cdFx0fSk7XG5cdH1cblx0Y3JlYXRlUmVtb3RlQ2hhbm5lbChjaGFubmVsLCBvcHRpb25zID0ge30sIGJyb2FkY2FzdCkge1xuXHRcdGNvbnN0IHRyYW5zcG9ydCA9IG5vcm1hbGl6ZVRyYW5zcG9ydEJpbmRpbmcoYnJvYWRjYXN0ID8/IHRoaXMuX2NvbnRleHQuJGNyZWF0ZU9yVXNlRXhpc3RpbmdSZW1vdGUoY2hhbm5lbCwgb3B0aW9ucywgYnJvYWRjYXN0ID8/IG51bGwpPy5tZXNzYWdlQ2hhbm5lbD8ucG9ydDEpO1xuXHRcdGNvbnN0IHRyYW5zcG9ydFR5cGUgPSBnZXREeW5hbWljVHJhbnNwb3J0VHlwZSh0cmFuc3BvcnQ/LnRhcmdldCA/PyB0cmFuc3BvcnQpO1xuXHRcdHRoaXMuX3VuaWZpZWQubGlzdGVuKHRyYW5zcG9ydD8udGFyZ2V0LCB7IHRhcmdldENoYW5uZWw6IGNoYW5uZWwgfSk7XG5cdFx0aWYgKHRyYW5zcG9ydCkge1xuXHRcdFx0dGhpcy5fYnJvYWRjYXN0cz8uc2V0Py4oY2hhbm5lbCwgdHJhbnNwb3J0KTtcblx0XHRcdGlmICghKHRyYW5zcG9ydFR5cGUgPT09IFwic2VsZlwiICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PT0gXCJ1bmRlZmluZWRcIikpIHRoaXMuX3VuaWZpZWQuY29ubmVjdCh0cmFuc3BvcnQsIHsgdGFyZ2V0Q2hhbm5lbDogY2hhbm5lbCB9KTtcblx0XHRcdHRoaXMuX2NvbnRleHQuJHJlZ2lzdGVyQ29ubmVjdGlvbih7XG5cdFx0XHRcdGxvY2FsQ2hhbm5lbDogdGhpcy5fY2hhbm5lbCxcblx0XHRcdFx0cmVtb3RlQ2hhbm5lbDogY2hhbm5lbCxcblx0XHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsLFxuXHRcdFx0XHRkaXJlY3Rpb246IFwib3V0Z29pbmdcIixcblx0XHRcdFx0dHJhbnNwb3J0VHlwZVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLm5vdGlmeUNoYW5uZWwoY2hhbm5lbCwge1xuXHRcdFx0XHRjb250ZXh0SWQ6IHRoaXMuX2NvbnRleHQuaWQsXG5cdFx0XHRcdGNvbnRleHROYW1lOiB0aGlzLl9jb250ZXh0Lmhvc3ROYW1lXG5cdFx0XHR9LCBcImNvbm5lY3RcIik7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgUmVtb3RlQ2hhbm5lbEhlbHBlciQxKGNoYW5uZWwsIHRoaXMuX2NvbnRleHQsIG9wdGlvbnMpO1xuXHR9XG5cdGdldENoYW5uZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWw7XG5cdH1cblx0Z2V0IGNvbm5lY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb247XG5cdH1cblx0cmVxdWVzdChwYXRoLCBhY3Rpb24sIGFyZ3MsIG9wdGlvbnMgPSB7fSwgdG9DaGFubmVsID0gXCJ3b3JrZXJcIikge1xuXHRcdGxldCBub3JtYWxpemVkUGF0aCA9IHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiID8gW3BhdGhdIDogcGF0aDtcblx0XHRsZXQgbm9ybWFsaXplZEFyZ3MgPSBhcmdzO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGFjdGlvbikgJiYgaXNSZWZsZWN0QWN0aW9uKHBhdGgpKSB7XG5cdFx0XHR0b0NoYW5uZWwgPSBvcHRpb25zO1xuXHRcdFx0b3B0aW9ucyA9IGFyZ3M7XG5cdFx0XHRub3JtYWxpemVkQXJncyA9IGFjdGlvbjtcblx0XHRcdGFjdGlvbiA9IHBhdGg7XG5cdFx0XHRub3JtYWxpemVkUGF0aCA9IFtdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fdW5pZmllZC5pbnZva2UodG9DaGFubmVsLCBhY3Rpb24sIG5vcm1hbGl6ZWRQYXRoID8/IFtdLCBBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRBcmdzKSA/IG5vcm1hbGl6ZWRBcmdzIDogW25vcm1hbGl6ZWRBcmdzXSk7XG5cdH1cblx0cmVzb2x2ZVJlc3BvbnNlKHJlcUlkLCByZXN1bHQpIHtcblx0XHR0aGlzLl9mb3JSZXNvbHZlcy5nZXQocmVxSWQpPy5yZXNvbHZlPy4ocmVzdWx0KTtcblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5fZm9yUmVzb2x2ZXMuZ2V0KHJlcUlkKT8ucHJvbWlzZTtcblx0XHR0aGlzLl9mb3JSZXNvbHZlcy5kZWxldGUocmVxSWQpO1xuXHRcdHJldHVybiBwcm9taXNlO1xuXHR9XG5cdGFzeW5jIGhhbmRsZUFuZFJlc3BvbnNlKHJlcXVlc3QsIHJlcUlkLCByZXNwb25zZUZuKSB7fVxuXHRub3RpZnlDaGFubmVsKHRhcmdldENoYW5uZWwsIHBheWxvYWQgPSB7fSwgdHlwZSA9IFwibm90aWZ5XCIpIHtcblx0XHRyZXR1cm4gdGhpcy5fdW5pZmllZC5ub3RpZnkodGFyZ2V0Q2hhbm5lbCwge1xuXHRcdFx0Li4ucGF5bG9hZCxcblx0XHRcdGZyb206IHRoaXMuX2NoYW5uZWwsXG5cdFx0XHR0bzogdGFyZ2V0Q2hhbm5lbFxuXHRcdH0sIHR5cGUpO1xuXHR9XG5cdGdldENvbm5lY3RlZENoYW5uZWxzKCkge1xuXHRcdHJldHVybiB0aGlzLl91bmlmaWVkLmNvbm5lY3RlZENoYW5uZWxzO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcblx0XHR0aGlzLl9mb3JSZXNvbHZlcy5jbGVhcigpO1xuXHRcdHRoaXMuX2Jyb2FkY2FzdHM/LnZhbHVlcz8uKCk/LmZvckVhY2goKHRyYW5zcG9ydCkgPT4gdHJhbnNwb3J0LmNsb3NlPy4oKSk7XG5cdFx0dGhpcy5fYnJvYWRjYXN0cz8uY2xlYXI/LigpO1xuXHRcdHRoaXMuX3VuaWZpZWQuY2xvc2UoKTtcblx0fVxuXHRnZXQgdW5pZmllZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdW5pZmllZDtcblx0fVxufTtcbnZhciBDaGFubmVsQ29udGV4dCA9IGNsYXNzIHtcblx0X29wdGlvbnM7XG5cdF9pZCA9IFVVSUR2NCgpO1xuXHRfaG9zdE5hbWU7XG5cdF9ob3N0ID0gbnVsbDtcblx0X2VuZHBvaW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF91bmlmaWVkQnlDaGFubmVsID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3VuaWZpZWRDb25uZWN0aW9uU3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9yZW1vdGVDaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9kZWZlcnJlZENoYW5uZWxzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2Nvbm5lY3Rpb25FdmVudHMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAyMDAgfSk7XG5cdF9jb25uZWN0aW9uUmVnaXN0cnkgPSBuZXcgQ29ubmVjdGlvblJlZ2lzdHJ5KCgpID0+IFVVSUR2NCgpLCAoZXZlbnQpID0+IHRoaXMuX2VtaXRDb25uZWN0aW9uRXZlbnQoZXZlbnQpKTtcblx0X2Nsb3NlZCA9IGZhbHNlO1xuXHRfZ2xvYmFsU2VsZiA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKF9vcHRpb25zID0ge30pIHtcblx0XHR0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG5cdFx0dGhpcy5faG9zdE5hbWUgPSBfb3B0aW9ucy5uYW1lID8/IGBjdHgtJHt0aGlzLl9pZC5zbGljZSgwLCA4KX1gO1xuXHRcdGlmIChfb3B0aW9ucy51c2VHbG9iYWxTZWxmICE9PSBmYWxzZSkgdGhpcy5fZ2xvYmFsU2VsZiA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGw7XG5cdH1cblx0aW5pdEhvc3QobmFtZSkge1xuXHRcdGlmICh0aGlzLl9ob3N0ICYmICFuYW1lKSByZXR1cm4gdGhpcy5faG9zdDtcblx0XHRjb25zdCBob3N0TmFtZSA9IG5hbWUgPz8gdGhpcy5faG9zdE5hbWU7XG5cdFx0dGhpcy5faG9zdE5hbWUgPSBob3N0TmFtZTtcblx0XHRpZiAodGhpcy5fZW5kcG9pbnRzLmhhcyhob3N0TmFtZSkpIHtcblx0XHRcdHRoaXMuX2hvc3QgPSB0aGlzLl9lbmRwb2ludHMuZ2V0KGhvc3ROYW1lKS5oYW5kbGVyO1xuXHRcdFx0cmV0dXJuIHRoaXMuX2hvc3Q7XG5cdFx0fVxuXHRcdHRoaXMuX2hvc3QgPSBuZXcgQ2hhbm5lbEhhbmRsZXIkMShob3N0TmFtZSwgdGhpcywgdGhpcy5fb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyk7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSB7XG5cdFx0XHRuYW1lOiBob3N0TmFtZSxcblx0XHRcdGhhbmRsZXI6IHRoaXMuX2hvc3QsXG5cdFx0XHRjb25uZWN0aW9uOiB0aGlzLl9ob3N0LmNvbm5lY3Rpb24sXG5cdFx0XHRzdWJzY3JpcHRpb25zOiBbXSxcblx0XHRcdHJlYWR5OiBQcm9taXNlLnJlc29sdmUobnVsbCksXG5cdFx0XHR1bmlmaWVkOiB0aGlzLl9ob3N0LnVuaWZpZWRcblx0XHR9O1xuXHRcdHRoaXMuX2VuZHBvaW50cy5zZXQoaG9zdE5hbWUsIGVuZHBvaW50KTtcblx0XHR0aGlzLl9yZWdpc3RlclVuaWZpZWRDaGFubmVsKGhvc3ROYW1lLCB0aGlzLl9ob3N0LnVuaWZpZWQpO1xuXHRcdHJldHVybiB0aGlzLl9ob3N0O1xuXHR9XG5cdGdldEhvc3QoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2hvc3QgPz8gdGhpcy5pbml0SG9zdCgpO1xuXHR9XG5cdGdldCBob3N0TmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5faG9zdE5hbWU7XG5cdH1cblx0Z2V0IGlkKCkge1xuXHRcdHJldHVybiB0aGlzLl9pZDtcblx0fVxuXHRnZXQgb25Db25uZWN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uRXZlbnRzO1xuXHR9XG5cdHN1YnNjcmliZUNvbm5lY3Rpb25zKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbkV2ZW50cy5zdWJzY3JpYmUoaGFuZGxlcik7XG5cdH1cblx0bm90aWZ5Q29ubmVjdGlvbnMocGF5bG9hZCA9IHt9LCBxdWVyeSA9IHt9KSB7XG5cdFx0bGV0IHNlbnQgPSAwO1xuXHRcdGZvciAoY29uc3QgZW5kcG9pbnQgb2YgdGhpcy5fZW5kcG9pbnRzLnZhbHVlcygpKSB7XG5cdFx0XHRjb25zdCBjb25uZWN0ZWRUYXJnZXRzID0gZW5kcG9pbnQuaGFuZGxlci5nZXRDb25uZWN0ZWRDaGFubmVscygpO1xuXHRcdFx0Zm9yIChjb25zdCByZW1vdGVDaGFubmVsIG9mIGNvbm5lY3RlZFRhcmdldHMpIHtcblx0XHRcdFx0aWYgKHF1ZXJ5LmxvY2FsQ2hhbm5lbCAmJiBxdWVyeS5sb2NhbENoYW5uZWwgIT09IGVuZHBvaW50Lm5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRpZiAocXVlcnkucmVtb3RlQ2hhbm5lbCAmJiBxdWVyeS5yZW1vdGVDaGFubmVsICE9PSByZW1vdGVDaGFubmVsKSBjb250aW51ZTtcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmcgPSB0aGlzLnF1ZXJ5Q29ubmVjdGlvbnMoe1xuXHRcdFx0XHRcdGxvY2FsQ2hhbm5lbDogZW5kcG9pbnQubmFtZSxcblx0XHRcdFx0XHRyZW1vdGVDaGFubmVsLFxuXHRcdFx0XHRcdHN0YXR1czogXCJhY3RpdmVcIlxuXHRcdFx0XHR9KVswXTtcblx0XHRcdFx0aWYgKHF1ZXJ5LnNlbmRlciAmJiBleGlzdGluZz8uc2VuZGVyICE9PSBxdWVyeS5zZW5kZXIpIGNvbnRpbnVlO1xuXHRcdFx0XHRpZiAocXVlcnkudHJhbnNwb3J0VHlwZSAmJiBleGlzdGluZz8udHJhbnNwb3J0VHlwZSAhPT0gcXVlcnkudHJhbnNwb3J0VHlwZSkgY29udGludWU7XG5cdFx0XHRcdGlmIChxdWVyeS5jaGFubmVsICYmIHF1ZXJ5LmNoYW5uZWwgIT09IGVuZHBvaW50Lm5hbWUgJiYgcXVlcnkuY2hhbm5lbCAhPT0gcmVtb3RlQ2hhbm5lbCkgY29udGludWU7XG5cdFx0XHRcdGlmIChlbmRwb2ludC5oYW5kbGVyLm5vdGlmeUNoYW5uZWwocmVtb3RlQ2hhbm5lbCwgcGF5bG9hZCwgXCJub3RpZnlcIikpIHNlbnQrKztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNlbnQ7XG5cdH1cblx0cXVlcnlDb25uZWN0aW9ucyhxdWVyeSA9IHt9KSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25SZWdpc3RyeS5xdWVyeShxdWVyeSkubWFwKChjb25uZWN0aW9uKSA9PiAoe1xuXHRcdFx0Li4uY29ubmVjdGlvbixcblx0XHRcdGNvbnRleHRJZDogdGhpcy5faWRcblx0XHR9KSk7XG5cdH1cblx0Y3JlYXRlQ2hhbm5lbChuYW1lLCBvcHRpb25zID0ge30pIHtcblx0XHRpZiAodGhpcy5fZW5kcG9pbnRzLmhhcyhuYW1lKSkgcmV0dXJuIHRoaXMuX2VuZHBvaW50cy5nZXQobmFtZSk7XG5cdFx0Y29uc3QgaGFuZGxlciA9IG5ldyBDaGFubmVsSGFuZGxlciQxKG5hbWUsIHRoaXMsIHtcblx0XHRcdC4uLnRoaXMuX29wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fSk7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSB7XG5cdFx0XHRuYW1lLFxuXHRcdFx0aGFuZGxlcixcblx0XHRcdGNvbm5lY3Rpb246IGhhbmRsZXIuY29ubmVjdGlvbixcblx0XHRcdHN1YnNjcmlwdGlvbnM6IFtdLFxuXHRcdFx0cmVhZHk6IFByb21pc2UucmVzb2x2ZShudWxsKSxcblx0XHRcdHVuaWZpZWQ6IGhhbmRsZXIudW5pZmllZFxuXHRcdH07XG5cdFx0dGhpcy5fZW5kcG9pbnRzLnNldChuYW1lLCBlbmRwb2ludCk7XG5cdFx0dGhpcy5fcmVnaXN0ZXJVbmlmaWVkQ2hhbm5lbChuYW1lLCBoYW5kbGVyLnVuaWZpZWQpO1xuXHRcdHJldHVybiBlbmRwb2ludDtcblx0fVxuXHRjcmVhdGVDaGFubmVscyhuYW1lcywgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0XHRmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHJlc3VsdC5zZXQobmFtZSwgdGhpcy5jcmVhdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMpKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdGdldENoYW5uZWwobmFtZSkge1xuXHRcdHJldHVybiB0aGlzLl9lbmRwb2ludHMuZ2V0KG5hbWUpO1xuXHR9XG5cdGdldE9yQ3JlYXRlQ2hhbm5lbChuYW1lLCBvcHRpb25zID0ge30pIHtcblx0XHRyZXR1cm4gdGhpcy5fZW5kcG9pbnRzLmdldChuYW1lKSA/PyB0aGlzLmNyZWF0ZUNoYW5uZWwobmFtZSwgb3B0aW9ucyk7XG5cdH1cblx0aGFzQ2hhbm5lbChuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2VuZHBvaW50cy5oYXMobmFtZSk7XG5cdH1cblx0Z2V0Q2hhbm5lbE5hbWVzKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5fZW5kcG9pbnRzLmtleXMoKV07XG5cdH1cblx0Z2V0IHNpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2VuZHBvaW50cy5zaXplO1xuXHR9XG5cdGRlZmVyKG5hbWUsIGluaXRGbikge1xuXHRcdHRoaXMuX2RlZmVycmVkQ2hhbm5lbHMuc2V0KG5hbWUsIGluaXRGbik7XG5cdH1cblx0YXN5bmMgaW5pdERlZmVycmVkKG5hbWUpIHtcblx0XHRjb25zdCBpbml0Rm4gPSB0aGlzLl9kZWZlcnJlZENoYW5uZWxzLmdldChuYW1lKTtcblx0XHRpZiAoIWluaXRGbikgcmV0dXJuIG51bGw7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSBhd2FpdCBpbml0Rm4oKTtcblx0XHR0aGlzLl9lbmRwb2ludHMuc2V0KG5hbWUsIGVuZHBvaW50KTtcblx0XHR0aGlzLl9kZWZlcnJlZENoYW5uZWxzLmRlbGV0ZShuYW1lKTtcblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblx0aXNEZWZlcnJlZChuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2RlZmVycmVkQ2hhbm5lbHMuaGFzKG5hbWUpO1xuXHR9XG5cdGFzeW5jIGdldENoYW5uZWxBc3luYyhuYW1lKSB7XG5cdFx0aWYgKHRoaXMuX2VuZHBvaW50cy5oYXMobmFtZSkpIHJldHVybiB0aGlzLl9lbmRwb2ludHMuZ2V0KG5hbWUpO1xuXHRcdGlmICh0aGlzLl9kZWZlcnJlZENoYW5uZWxzLmhhcyhuYW1lKSkgcmV0dXJuIHRoaXMuaW5pdERlZmVycmVkKG5hbWUpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGFzeW5jIGFkZFdvcmtlcihuYW1lLCB3b3JrZXIsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IHdvcmtlckluc3RhbmNlID0gbG9hZFdvcmtlciQxKHdvcmtlcik7XG5cdFx0aWYgKCF3b3JrZXJJbnN0YW5jZSkgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIHdvcmtlciBmb3IgY2hhbm5lbDogJHtuYW1lfWApO1xuXHRcdGNvbnN0IGhhbmRsZXIgPSBuZXcgQ2hhbm5lbEhhbmRsZXIkMShuYW1lLCB0aGlzLCB7XG5cdFx0XHQuLi50aGlzLl9vcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pO1xuXHRcdGNvbnN0IHJlYWR5ID0gaGFuZGxlci5jcmVhdGVSZW1vdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMsIHdvcmtlckluc3RhbmNlKTtcblx0XHRjb25zdCBlbmRwb2ludCA9IHtcblx0XHRcdG5hbWUsXG5cdFx0XHRoYW5kbGVyLFxuXHRcdFx0Y29ubmVjdGlvbjogaGFuZGxlci5jb25uZWN0aW9uLFxuXHRcdFx0c3Vic2NyaXB0aW9uczogW10sXG5cdFx0XHR0cmFuc3BvcnRUeXBlOiBcIndvcmtlclwiLFxuXHRcdFx0cmVhZHk6IFByb21pc2UucmVzb2x2ZShyZWFkeSksXG5cdFx0XHR1bmlmaWVkOiBoYW5kbGVyLnVuaWZpZWRcblx0XHR9O1xuXHRcdHRoaXMuX2VuZHBvaW50cy5zZXQobmFtZSwgZW5kcG9pbnQpO1xuXHRcdHRoaXMuX3JlZ2lzdGVyVW5pZmllZENoYW5uZWwobmFtZSwgaGFuZGxlci51bmlmaWVkKTtcblx0XHR0aGlzLl9yZW1vdGVDaGFubmVscy5zZXQobmFtZSwge1xuXHRcdFx0Y2hhbm5lbDogbmFtZSxcblx0XHRcdGNvbnRleHQ6IHRoaXMsXG5cdFx0XHRyZW1vdGU6IFByb21pc2UucmVzb2x2ZShyZWFkeSksXG5cdFx0XHR0cmFuc3BvcnQ6IHdvcmtlckluc3RhbmNlLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogXCJ3b3JrZXJcIlxuXHRcdH0pO1xuXHRcdHJldHVybiBlbmRwb2ludDtcblx0fVxuXHRhc3luYyBhZGRQb3J0KG5hbWUsIHBvcnQsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IGhhbmRsZXIgPSBuZXcgQ2hhbm5lbEhhbmRsZXIkMShuYW1lLCB0aGlzLCB7XG5cdFx0XHQuLi50aGlzLl9vcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pO1xuXHRcdHBvcnQuc3RhcnQ/LigpO1xuXHRcdGNvbnN0IHJlYWR5ID0gaGFuZGxlci5jcmVhdGVSZW1vdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMsIHBvcnQpO1xuXHRcdGNvbnN0IGVuZHBvaW50ID0ge1xuXHRcdFx0bmFtZSxcblx0XHRcdGhhbmRsZXIsXG5cdFx0XHRjb25uZWN0aW9uOiBoYW5kbGVyLmNvbm5lY3Rpb24sXG5cdFx0XHRzdWJzY3JpcHRpb25zOiBbXSxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwibWVzc2FnZS1wb3J0XCIsXG5cdFx0XHRyZWFkeTogUHJvbWlzZS5yZXNvbHZlKHJlYWR5KSxcblx0XHRcdHVuaWZpZWQ6IGhhbmRsZXIudW5pZmllZFxuXHRcdH07XG5cdFx0dGhpcy5fZW5kcG9pbnRzLnNldChuYW1lLCBlbmRwb2ludCk7XG5cdFx0dGhpcy5fcmVnaXN0ZXJVbmlmaWVkQ2hhbm5lbChuYW1lLCBoYW5kbGVyLnVuaWZpZWQpO1xuXHRcdHRoaXMuX3JlbW90ZUNoYW5uZWxzLnNldChuYW1lLCB7XG5cdFx0XHRjaGFubmVsOiBuYW1lLFxuXHRcdFx0Y29udGV4dDogdGhpcyxcblx0XHRcdHJlbW90ZTogUHJvbWlzZS5yZXNvbHZlKHJlYWR5KSxcblx0XHRcdHRyYW5zcG9ydDogcG9ydCxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwibWVzc2FnZS1wb3J0XCJcblx0XHR9KTtcblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblx0YXN5bmMgYWRkQnJvYWRjYXN0KG5hbWUsIGJyb2FkY2FzdE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IGJjID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoYnJvYWRjYXN0TmFtZSA/PyBuYW1lKTtcblx0XHRjb25zdCBoYW5kbGVyID0gbmV3IENoYW5uZWxIYW5kbGVyJDEobmFtZSwgdGhpcywge1xuXHRcdFx0Li4udGhpcy5fb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcblx0XHRcdC4uLm9wdGlvbnNcblx0XHR9KTtcblx0XHRjb25zdCByZWFkeSA9IGhhbmRsZXIuY3JlYXRlUmVtb3RlQ2hhbm5lbChuYW1lLCBvcHRpb25zLCBiYyk7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSB7XG5cdFx0XHRuYW1lLFxuXHRcdFx0aGFuZGxlcixcblx0XHRcdGNvbm5lY3Rpb246IGhhbmRsZXIuY29ubmVjdGlvbixcblx0XHRcdHN1YnNjcmlwdGlvbnM6IFtdLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogXCJicm9hZGNhc3RcIixcblx0XHRcdHJlYWR5OiBQcm9taXNlLnJlc29sdmUocmVhZHkpLFxuXHRcdFx0dW5pZmllZDogaGFuZGxlci51bmlmaWVkXG5cdFx0fTtcblx0XHR0aGlzLl9lbmRwb2ludHMuc2V0KG5hbWUsIGVuZHBvaW50KTtcblx0XHR0aGlzLl9yZWdpc3RlclVuaWZpZWRDaGFubmVsKG5hbWUsIGhhbmRsZXIudW5pZmllZCk7XG5cdFx0dGhpcy5fcmVtb3RlQ2hhbm5lbHMuc2V0KG5hbWUsIHtcblx0XHRcdGNoYW5uZWw6IG5hbWUsXG5cdFx0XHRjb250ZXh0OiB0aGlzLFxuXHRcdFx0cmVtb3RlOiBQcm9taXNlLnJlc29sdmUocmVhZHkpLFxuXHRcdFx0dHJhbnNwb3J0OiBiYyxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwiYnJvYWRjYXN0XCJcblx0XHR9KTtcblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblx0YWRkU2VsZkNoYW5uZWwobmFtZSwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IG5ldyBDaGFubmVsSGFuZGxlciQxKG5hbWUsIHRoaXMsIHtcblx0XHRcdC4uLnRoaXMuX29wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fSk7XG5cdFx0Y29uc3Qgc2VsZlRhcmdldCA9IHRoaXMuX2dsb2JhbFNlbGYgPz8gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGwpO1xuXHRcdGNvbnN0IGVuZHBvaW50ID0ge1xuXHRcdFx0bmFtZSxcblx0XHRcdGhhbmRsZXIsXG5cdFx0XHRjb25uZWN0aW9uOiBoYW5kbGVyLmNvbm5lY3Rpb24sXG5cdFx0XHRzdWJzY3JpcHRpb25zOiBbXSxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwic2VsZlwiLFxuXHRcdFx0cmVhZHk6IFByb21pc2UucmVzb2x2ZShzZWxmVGFyZ2V0ID8gaGFuZGxlci5jcmVhdGVSZW1vdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMsIHNlbGZUYXJnZXQpIDogbnVsbCksXG5cdFx0XHR1bmlmaWVkOiBoYW5kbGVyLnVuaWZpZWRcblx0XHR9O1xuXHRcdHRoaXMuX2VuZHBvaW50cy5zZXQobmFtZSwgZW5kcG9pbnQpO1xuXHRcdHRoaXMuX3JlZ2lzdGVyVW5pZmllZENoYW5uZWwobmFtZSwgaGFuZGxlci51bmlmaWVkKTtcblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblx0YXN5bmMgYWRkVHJhbnNwb3J0KG5hbWUsIGNvbmZpZykge1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBjb25maWcub3B0aW9ucyA/PyB7fTtcblx0XHRzd2l0Y2ggKGNvbmZpZy50eXBlKSB7XG5cdFx0XHRjYXNlIFwid29ya2VyXCI6XG5cdFx0XHRcdGlmICghY29uZmlnLndvcmtlcikgdGhyb3cgbmV3IEVycm9yKFwiV29ya2VyIHJlcXVpcmVkIGZvciB3b3JrZXIgdHJhbnNwb3J0XCIpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRXb3JrZXIobmFtZSwgY29uZmlnLndvcmtlciwgb3B0aW9ucyk7XG5cdFx0XHRjYXNlIFwibWVzc2FnZS1wb3J0XCI6XG5cdFx0XHRcdGlmICghY29uZmlnLnBvcnQpIHRocm93IG5ldyBFcnJvcihcIlBvcnQgcmVxdWlyZWQgZm9yIG1lc3NhZ2UtcG9ydCB0cmFuc3BvcnRcIik7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZFBvcnQobmFtZSwgY29uZmlnLnBvcnQsIG9wdGlvbnMpO1xuXHRcdFx0Y2FzZSBcImJyb2FkY2FzdFwiOlxuXHRcdFx0XHRjb25zdCBiY05hbWUgPSB0eXBlb2YgY29uZmlnLmJyb2FkY2FzdCA9PT0gXCJzdHJpbmdcIiA/IGNvbmZpZy5icm9hZGNhc3QgOiB2b2lkIDA7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZEJyb2FkY2FzdChuYW1lLCBiY05hbWUsIG9wdGlvbnMpO1xuXHRcdFx0Y2FzZSBcInNlbGZcIjogcmV0dXJuIHRoaXMuYWRkU2VsZkNoYW5uZWwobmFtZSwgb3B0aW9ucyk7XG5cdFx0XHRkZWZhdWx0OiByZXR1cm4gdGhpcy5jcmVhdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXHRjcmVhdGVDaGFubmVsUGFpcihuYW1lMSwgbmFtZTIsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IG1jID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG5cdFx0Y29uc3QgaGFuZGxlcjEgPSBuZXcgQ2hhbm5lbEhhbmRsZXIkMShuYW1lMSwgdGhpcywge1xuXHRcdFx0Li4udGhpcy5fb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcblx0XHRcdC4uLm9wdGlvbnNcblx0XHR9KTtcblx0XHRjb25zdCBoYW5kbGVyMiA9IG5ldyBDaGFubmVsSGFuZGxlciQxKG5hbWUyLCB0aGlzLCB7XG5cdFx0XHQuLi50aGlzLl9vcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pO1xuXHRcdG1jLnBvcnQxLnN0YXJ0KCk7XG5cdFx0bWMucG9ydDIuc3RhcnQoKTtcblx0XHRjb25zdCByZWFkeTEgPSBQcm9taXNlLnJlc29sdmUoaGFuZGxlcjEuY3JlYXRlUmVtb3RlQ2hhbm5lbChuYW1lMiwgb3B0aW9ucywgbWMucG9ydDEpKTtcblx0XHRjb25zdCByZWFkeTIgPSBQcm9taXNlLnJlc29sdmUoaGFuZGxlcjIuY3JlYXRlUmVtb3RlQ2hhbm5lbChuYW1lMSwgb3B0aW9ucywgbWMucG9ydDIpKTtcblx0XHRjb25zdCBjaGFubmVsMSA9IHtcblx0XHRcdG5hbWU6IG5hbWUxLFxuXHRcdFx0aGFuZGxlcjogaGFuZGxlcjEsXG5cdFx0XHRjb25uZWN0aW9uOiBoYW5kbGVyMS5jb25uZWN0aW9uLFxuXHRcdFx0c3Vic2NyaXB0aW9uczogW10sXG5cdFx0XHR0cmFuc3BvcnRUeXBlOiBcIm1lc3NhZ2UtcG9ydFwiLFxuXHRcdFx0cmVhZHk6IHJlYWR5MSxcblx0XHRcdHVuaWZpZWQ6IGhhbmRsZXIxLnVuaWZpZWRcblx0XHR9O1xuXHRcdGNvbnN0IGNoYW5uZWwyID0ge1xuXHRcdFx0bmFtZTogbmFtZTIsXG5cdFx0XHRoYW5kbGVyOiBoYW5kbGVyMixcblx0XHRcdGNvbm5lY3Rpb246IGhhbmRsZXIyLmNvbm5lY3Rpb24sXG5cdFx0XHRzdWJzY3JpcHRpb25zOiBbXSxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwibWVzc2FnZS1wb3J0XCIsXG5cdFx0XHRyZWFkeTogcmVhZHkyLFxuXHRcdFx0dW5pZmllZDogaGFuZGxlcjIudW5pZmllZFxuXHRcdH07XG5cdFx0dGhpcy5fZW5kcG9pbnRzLnNldChuYW1lMSwgY2hhbm5lbDEpO1xuXHRcdHRoaXMuX2VuZHBvaW50cy5zZXQobmFtZTIsIGNoYW5uZWwyKTtcblx0XHR0aGlzLl9yZWdpc3RlclVuaWZpZWRDaGFubmVsKG5hbWUxLCBoYW5kbGVyMS51bmlmaWVkKTtcblx0XHR0aGlzLl9yZWdpc3RlclVuaWZpZWRDaGFubmVsKG5hbWUyLCBoYW5kbGVyMi51bmlmaWVkKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2hhbm5lbDEsXG5cdFx0XHRjaGFubmVsMixcblx0XHRcdG1lc3NhZ2VDaGFubmVsOiBtY1xuXHRcdH07XG5cdH1cblx0Z2V0IGdsb2JhbFNlbGYoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dsb2JhbFNlbGY7XG5cdH1cblx0YXN5bmMgY29ubmVjdFJlbW90ZShjaGFubmVsTmFtZSwgb3B0aW9ucyA9IHt9LCBicm9hZGNhc3QpIHtcblx0XHR0aGlzLmluaXRIb3N0KCk7XG5cdFx0cmV0dXJuIHRoaXMuX2hvc3QuY3JlYXRlUmVtb3RlQ2hhbm5lbChjaGFubmVsTmFtZSwgb3B0aW9ucywgYnJvYWRjYXN0KTtcblx0fVxuXHRhc3luYyBpbXBvcnRNb2R1bGVJbkNoYW5uZWwoY2hhbm5lbE5hbWUsIHVybCwgb3B0aW9ucyA9IHt9LCBicm9hZGNhc3QpIHtcblx0XHRyZXR1cm4gKGF3YWl0IHRoaXMuY29ubmVjdFJlbW90ZShjaGFubmVsTmFtZSwgb3B0aW9ucy5jaGFubmVsT3B0aW9ucywgYnJvYWRjYXN0KSk/LmRvSW1wb3J0TW9kdWxlPy4odXJsLCBvcHRpb25zLmltcG9ydE9wdGlvbnMpO1xuXHR9XG5cdCRjcmVhdGVPclVzZUV4aXN0aW5nUmVtb3RlKGNoYW5uZWwsIG9wdGlvbnMgPSB7fSwgYnJvYWRjYXN0KSB7XG5cdFx0aWYgKGNoYW5uZWwgPT0gbnVsbCB8fCBicm9hZGNhc3QpIHJldHVybiBudWxsO1xuXHRcdGlmICh0aGlzLl9yZW1vdGVDaGFubmVscy5oYXMoY2hhbm5lbCkpIHJldHVybiB0aGlzLl9yZW1vdGVDaGFubmVscy5nZXQoY2hhbm5lbCk7XG5cdFx0Y29uc3QgbXNnQ2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuXHRcdGNvbnN0IHByb21pc2UgPSBQcm9taXNlZChuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0Y29uc3Qgd29ya2VyID0gbG9hZFdvcmtlciQxKHdvcmtlckNvZGUpO1xuXHRcdFx0d29ya2VyPy5hZGRFdmVudExpc3RlbmVyPy4oXCJtZXNzYWdlXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQuZGF0YS50eXBlID09PSBcImNoYW5uZWxDcmVhdGVkXCIpIHtcblx0XHRcdFx0XHRtc2dDaGFubmVsLnBvcnQxPy5zdGFydD8uKCk7XG5cdFx0XHRcdFx0cmVzb2x2ZShuZXcgUmVtb3RlQ2hhbm5lbEhlbHBlciQxKGV2ZW50LmRhdGEuY2hhbm5lbCwgdGhpcywgb3B0aW9ucykpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHdvcmtlcj8ucG9zdE1lc3NhZ2U/Lih7XG5cdFx0XHRcdHR5cGU6IFwiY3JlYXRlQ2hhbm5lbFwiLFxuXHRcdFx0XHRjaGFubmVsLFxuXHRcdFx0XHRzZW5kZXI6IHRoaXMuX2hvc3ROYW1lLFxuXHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRtZXNzYWdlUG9ydDogbXNnQ2hhbm5lbC5wb3J0MlxuXHRcdFx0fSwgeyB0cmFuc2ZlcjogW21zZ0NoYW5uZWwucG9ydDJdIH0pO1xuXHRcdH0pKTtcblx0XHRjb25zdCBpbmZvID0ge1xuXHRcdFx0Y2hhbm5lbCxcblx0XHRcdGNvbnRleHQ6IHRoaXMsXG5cdFx0XHRtZXNzYWdlQ2hhbm5lbDogbXNnQ2hhbm5lbCxcblx0XHRcdHJlbW90ZTogcHJvbWlzZVxuXHRcdH07XG5cdFx0dGhpcy5fcmVtb3RlQ2hhbm5lbHMuc2V0KGNoYW5uZWwsIGluZm8pO1xuXHRcdHJldHVybiBpbmZvO1xuXHR9XG5cdCRyZWdpc3RlckNvbm5lY3Rpb24ocGFyYW1zKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLnRoaXMuX2Nvbm5lY3Rpb25SZWdpc3RyeS5yZWdpc3RlcihwYXJhbXMpLFxuXHRcdFx0Y29udGV4dElkOiB0aGlzLl9pZFxuXHRcdH07XG5cdH1cblx0JG1hcmtOb3RpZmllZChwYXJhbXMpIHtcblx0XHRjb25zdCBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LnJlZ2lzdGVyKHtcblx0XHRcdGxvY2FsQ2hhbm5lbDogcGFyYW1zLmxvY2FsQ2hhbm5lbCxcblx0XHRcdHJlbW90ZUNoYW5uZWw6IHBhcmFtcy5yZW1vdGVDaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBwYXJhbXMuc2VuZGVyLFxuXHRcdFx0ZGlyZWN0aW9uOiBwYXJhbXMuZGlyZWN0aW9uLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogcGFyYW1zLnRyYW5zcG9ydFR5cGVcblx0XHR9KTtcblx0XHR0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkubWFya05vdGlmaWVkKGNvbm5lY3Rpb24sIHBhcmFtcy5wYXlsb2FkKTtcblx0fVxuXHQkb2JzZXJ2ZVNpZ25hbChwYXJhbXMpIHtcblx0XHRjb25zdCBkaXJlY3Rpb24gPSAocGFyYW1zLnBheWxvYWQ/LnR5cGUgPz8gXCJub3RpZnlcIikgPT09IFwiY29ubmVjdFwiID8gXCJpbmNvbWluZ1wiIDogXCJpbmNvbWluZ1wiO1xuXHRcdHRoaXMuJG1hcmtOb3RpZmllZCh7XG5cdFx0XHRsb2NhbENoYW5uZWw6IHBhcmFtcy5sb2NhbENoYW5uZWwsXG5cdFx0XHRyZW1vdGVDaGFubmVsOiBwYXJhbXMucmVtb3RlQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogcGFyYW1zLnNlbmRlcixcblx0XHRcdGRpcmVjdGlvbixcblx0XHRcdHRyYW5zcG9ydFR5cGU6IHBhcmFtcy50cmFuc3BvcnRUeXBlLFxuXHRcdFx0cGF5bG9hZDogcGFyYW1zLnBheWxvYWRcblx0XHR9KTtcblx0fVxuXHQkZm9yd2FyZFVuaWZpZWRDb25uZWN0aW9uRXZlbnQoY2hhbm5lbCwgZXZlbnQpIHtcblx0XHRjb25zdCBtYXBwZWRUcmFuc3BvcnRUeXBlID0gZXZlbnQuY29ubmVjdGlvbi50cmFuc3BvcnRUeXBlID8/IFwiaW50ZXJuYWxcIjtcblx0XHRjb25zdCBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LnJlZ2lzdGVyKHtcblx0XHRcdGxvY2FsQ2hhbm5lbDogZXZlbnQuY29ubmVjdGlvbi5sb2NhbENoYW5uZWwgfHwgY2hhbm5lbCxcblx0XHRcdHJlbW90ZUNoYW5uZWw6IGV2ZW50LmNvbm5lY3Rpb24ucmVtb3RlQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogZXZlbnQuY29ubmVjdGlvbi5zZW5kZXIsXG5cdFx0XHRkaXJlY3Rpb246IGV2ZW50LmNvbm5lY3Rpb24uZGlyZWN0aW9uLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogbWFwcGVkVHJhbnNwb3J0VHlwZSxcblx0XHRcdG1ldGFkYXRhOiBldmVudC5jb25uZWN0aW9uLm1ldGFkYXRhXG5cdFx0fSk7XG5cdFx0aWYgKGV2ZW50LnR5cGUgPT09IFwibm90aWZpZWRcIikgdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5Lm1hcmtOb3RpZmllZChjb25uZWN0aW9uLCBldmVudC5wYXlsb2FkKTtcblx0XHRlbHNlIGlmIChldmVudC50eXBlID09PSBcImRpc2Nvbm5lY3RlZFwiKSB0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkuY2xvc2VCeUNoYW5uZWwoZXZlbnQuY29ubmVjdGlvbi5sb2NhbENoYW5uZWwpO1xuXHR9XG5cdGNsb3NlQ2hhbm5lbChuYW1lKSB7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSB0aGlzLl9lbmRwb2ludHMuZ2V0KG5hbWUpO1xuXHRcdGlmICghZW5kcG9pbnQpIHJldHVybiBmYWxzZTtcblx0XHRlbmRwb2ludC5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG5cdFx0ZW5kcG9pbnQuaGFuZGxlci5jbG9zZSgpO1xuXHRcdGVuZHBvaW50LnRyYW5zcG9ydD8uZGV0YWNoKCk7XG5cdFx0dGhpcy5fdW5pZmllZENvbm5lY3Rpb25TdWJzLmdldChuYW1lKT8udW5zdWJzY3JpYmUoKTtcblx0XHR0aGlzLl91bmlmaWVkQ29ubmVjdGlvblN1YnMuZGVsZXRlKG5hbWUpO1xuXHRcdHRoaXMuX3VuaWZpZWRCeUNoYW5uZWwuZGVsZXRlKG5hbWUpO1xuXHRcdHRoaXMuX2VuZHBvaW50cy5kZWxldGUobmFtZSk7XG5cdFx0aWYgKG5hbWUgPT09IHRoaXMuX2hvc3ROYW1lKSB0aGlzLl9ob3N0ID0gbnVsbDtcblx0XHR0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkuY2xvc2VCeUNoYW5uZWwobmFtZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0aWYgKHRoaXMuX2Nsb3NlZCkgcmV0dXJuO1xuXHRcdHRoaXMuX2Nsb3NlZCA9IHRydWU7XG5cdFx0Zm9yIChjb25zdCBbbmFtZV0gb2YgdGhpcy5fZW5kcG9pbnRzKSB0aGlzLmNsb3NlQ2hhbm5lbChuYW1lKTtcblx0XHR0aGlzLl9yZW1vdGVDaGFubmVscy5jbGVhcigpO1xuXHRcdHRoaXMuX2hvc3QgPSBudWxsO1xuXHRcdHRoaXMuX3VuaWZpZWRDb25uZWN0aW9uU3Vicy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcblx0XHR0aGlzLl91bmlmaWVkQ29ubmVjdGlvblN1YnMuY2xlYXIoKTtcblx0XHR0aGlzLl91bmlmaWVkQnlDaGFubmVsLmNsZWFyKCk7XG5cdFx0dGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LmNsZWFyKCk7XG5cdFx0dGhpcy5fY29ubmVjdGlvbkV2ZW50cy5jb21wbGV0ZSgpO1xuXHR9XG5cdGdldCBjbG9zZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nsb3NlZDtcblx0fVxuXHRfcmVnaXN0ZXJVbmlmaWVkQ2hhbm5lbChuYW1lLCB1bmlmaWVkKSB7XG5cdFx0dGhpcy5fdW5pZmllZEJ5Q2hhbm5lbC5zZXQobmFtZSwgdW5pZmllZCk7XG5cdFx0dGhpcy5fdW5pZmllZENvbm5lY3Rpb25TdWJzLmdldChuYW1lKT8udW5zdWJzY3JpYmUoKTtcblx0XHRjb25zdCBzdWJzY3JpcHRpb24gPSB1bmlmaWVkLnN1YnNjcmliZUNvbm5lY3Rpb25zKChldmVudCkgPT4ge1xuXHRcdFx0dGhpcy4kZm9yd2FyZFVuaWZpZWRDb25uZWN0aW9uRXZlbnQobmFtZSwgZXZlbnQpO1xuXHRcdH0pO1xuXHRcdHRoaXMuX3VuaWZpZWRDb25uZWN0aW9uU3Vicy5zZXQobmFtZSwgc3Vic2NyaXB0aW9uKTtcblx0fVxuXHRfZW1pdENvbm5lY3Rpb25FdmVudChldmVudCkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25FdmVudHMubmV4dCh7XG5cdFx0XHQuLi5ldmVudCxcblx0XHRcdGNvbm5lY3Rpb246IHtcblx0XHRcdFx0Li4uZXZlbnQuY29ubmVjdGlvbixcblx0XHRcdFx0Y29udGV4dElkOiB0aGlzLl9pZFxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59O1xuZnVuY3Rpb24gaXNSZWZsZWN0QWN0aW9uKGFjdGlvbikge1xuXHRyZXR1cm4gWy4uLk9iamVjdC52YWx1ZXMoV1JlZmxlY3RBY3Rpb24pXS5pbmNsdWRlcyhhY3Rpb24pO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplVHJhbnNwb3J0QmluZGluZyh0YXJnZXQpIHtcblx0aWYgKCF0YXJnZXQpIHJldHVybiBudWxsO1xuXHRpZiAoaXNUcmFuc3BvcnRCaW5kaW5nKHRhcmdldCkpIHJldHVybiB0YXJnZXQ7XG5cdGNvbnN0IG5hdGl2ZVRhcmdldCA9IHRhcmdldDtcblx0Y29uc3QgdHJhbnNwb3J0VHlwZSA9IGdldER5bmFtaWNUcmFuc3BvcnRUeXBlKG5hdGl2ZVRhcmdldCk7XG5cdHJldHVybiB7XG5cdFx0dGFyZ2V0OiBuYXRpdmVUYXJnZXQsXG5cdFx0dGFyZ2V0Q2hhbm5lbDogXCJ1bmtub3duXCIsXG5cdFx0dHJhbnNwb3J0VHlwZTogdHJhbnNwb3J0VHlwZSA9PT0gXCJpbnRlcm5hbFwiID8gXCJzZWxmXCIgOiB0cmFuc3BvcnRUeXBlLFxuXHRcdHNlbmRlcjogKG1lc3NhZ2UsIHRyYW5zZmVyKSA9PiB7XG5cdFx0XHRpZiAodHlwZW9mIFdlYlNvY2tldCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBuYXRpdmVUYXJnZXQgaW5zdGFuY2VvZiBXZWJTb2NrZXQpIHtcblx0XHRcdFx0bmF0aXZlVGFyZ2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRuYXRpdmVUYXJnZXQucG9zdE1lc3NhZ2U/LihtZXNzYWdlLCB0cmFuc2Zlcj8ubGVuZ3RoID8geyB0cmFuc2ZlciB9IDogdm9pZCAwKTtcblx0XHR9LFxuXHRcdHBvc3RNZXNzYWdlOiAobWVzc2FnZSwgb3B0aW9ucykgPT4ge1xuXHRcdFx0bmF0aXZlVGFyZ2V0LnBvc3RNZXNzYWdlPy4obWVzc2FnZSwgb3B0aW9ucyk7XG5cdFx0fSxcblx0XHRhZGRFdmVudExpc3RlbmVyOiBuYXRpdmVUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcj8uYmluZChuYXRpdmVUYXJnZXQpLFxuXHRcdHJlbW92ZUV2ZW50TGlzdGVuZXI6IG5hdGl2ZVRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyPy5iaW5kKG5hdGl2ZVRhcmdldCksXG5cdFx0c3RhcnQ6IG5hdGl2ZVRhcmdldC5zdGFydD8uYmluZChuYXRpdmVUYXJnZXQpLFxuXHRcdGNsb3NlOiBuYXRpdmVUYXJnZXQuY2xvc2U/LmJpbmQobmF0aXZlVGFyZ2V0KVxuXHR9O1xufVxuZnVuY3Rpb24gaXNUcmFuc3BvcnRCaW5kaW5nKHZhbHVlKSB7XG5cdHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBcInRhcmdldFwiIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5wb3N0TWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gZ2V0RHluYW1pY1RyYW5zcG9ydFR5cGUodGFyZ2V0KSB7XG5cdGNvbnN0IGVmZmVjdGl2ZVRhcmdldCA9IGlzVHJhbnNwb3J0QmluZGluZyh0YXJnZXQpID8gdGFyZ2V0LnRhcmdldCA6IHRhcmdldDtcblx0aWYgKCFlZmZlY3RpdmVUYXJnZXQpIHJldHVybiBcImludGVybmFsXCI7XG5cdGlmIChlZmZlY3RpdmVUYXJnZXQgPT09IFwiY2hyb21lLXJ1bnRpbWVcIikgcmV0dXJuIFwiY2hyb21lLXJ1bnRpbWVcIjtcblx0aWYgKGVmZmVjdGl2ZVRhcmdldCA9PT0gXCJjaHJvbWUtdGFic1wiKSByZXR1cm4gXCJjaHJvbWUtdGFic1wiO1xuXHRpZiAoZWZmZWN0aXZlVGFyZ2V0ID09PSBcImNocm9tZS1wb3J0XCIpIHJldHVybiBcImNocm9tZS1wb3J0XCI7XG5cdGlmIChlZmZlY3RpdmVUYXJnZXQgPT09IFwiY2hyb21lLWV4dGVybmFsXCIpIHJldHVybiBcImNocm9tZS1leHRlcm5hbFwiO1xuXHRpZiAodHlwZW9mIE1lc3NhZ2VQb3J0ICE9PSBcInVuZGVmaW5lZFwiICYmIGVmZmVjdGl2ZVRhcmdldCBpbnN0YW5jZW9mIE1lc3NhZ2VQb3J0KSByZXR1cm4gXCJtZXNzYWdlLXBvcnRcIjtcblx0aWYgKHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsICE9PSBcInVuZGVmaW5lZFwiICYmIGVmZmVjdGl2ZVRhcmdldCBpbnN0YW5jZW9mIEJyb2FkY2FzdENoYW5uZWwpIHJldHVybiBcImJyb2FkY2FzdFwiO1xuXHRpZiAodHlwZW9mIFdvcmtlciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlZmZlY3RpdmVUYXJnZXQgaW5zdGFuY2VvZiBXb3JrZXIpIHJldHVybiBcIndvcmtlclwiO1xuXHRpZiAodHlwZW9mIFdlYlNvY2tldCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlZmZlY3RpdmVUYXJnZXQgaW5zdGFuY2VvZiBXZWJTb2NrZXQpIHJldHVybiBcIndlYnNvY2tldFwiO1xuXHRpZiAodHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZWZmZWN0aXZlVGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIGVmZmVjdGl2ZVRhcmdldCAmJiB0eXBlb2YgZWZmZWN0aXZlVGFyZ2V0LnBvc3RNZXNzYWdlID09PSBcImZ1bmN0aW9uXCIgJiYgZWZmZWN0aXZlVGFyZ2V0Lm9uTWVzc2FnZT8uYWRkTGlzdGVuZXIpIHJldHVybiBcImNocm9tZS1wb3J0XCI7XG5cdGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlZmZlY3RpdmVUYXJnZXQgPT09IHNlbGYpIHJldHVybiBcInNlbGZcIjtcblx0cmV0dXJuIFwiaW50ZXJuYWxcIjtcbn1cbmZ1bmN0aW9uIGxvYWRXb3JrZXIkMShXWCkge1xuXHRpZiAoV1ggaW5zdGFuY2VvZiBXb3JrZXIpIHJldHVybiBXWDtcblx0aWYgKFdYIGluc3RhbmNlb2YgVVJMKSByZXR1cm4gbmV3IFdvcmtlcihXWC5ocmVmLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdGlmICh0eXBlb2YgV1ggPT09IFwiZnVuY3Rpb25cIikgdHJ5IHtcblx0XHRyZXR1cm4gbmV3IFdYKHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIFdYKHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0fVxuXHRpZiAodHlwZW9mIFdYID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKFdYLnN0YXJ0c1dpdGgoXCIvXCIpKSByZXR1cm4gbmV3IFdvcmtlcihyZXNvbHZlV29ya2VyU3BlY2lmaWVySHJlZihXWC5yZXBsYWNlKC9eXFwvLywgXCIuL1wiKSksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0XHRpZiAoVVJMLmNhblBhcnNlKFdYKSB8fCBXWC5zdGFydHNXaXRoKFwiLi9cIikpIHJldHVybiBuZXcgV29ya2VyKHJlc29sdmVXb3JrZXJTcGVjaWZpZXJIcmVmKFdYKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRcdHJldHVybiBuZXcgV29ya2VyKFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW1dYXSwgeyB0eXBlOiBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiB9KSksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0fVxuXHRpZiAoV1ggaW5zdGFuY2VvZiBCbG9iIHx8IFdYIGluc3RhbmNlb2YgRmlsZSkgcmV0dXJuIG5ldyBXb3JrZXIoVVJMLmNyZWF0ZU9iamVjdFVSTChXWCksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0cmV0dXJuIFdYID8/ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiBudWxsKTtcbn1cbnZhciBDT05URVhUX1JFR0lTVFJZID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBERUZBVUxUX0NPTlRFWFQgPSBudWxsO1xuZnVuY3Rpb24gZ2V0RGVmYXVsdENvbnRleHQoKSB7XG5cdGlmICghREVGQVVMVF9DT05URVhUKSB7XG5cdFx0REVGQVVMVF9DT05URVhUID0gbmV3IENoYW5uZWxDb250ZXh0KHtcblx0XHRcdG5hbWU6IFwiJGRlZmF1bHQkXCIsXG5cdFx0XHR1c2VHbG9iYWxTZWxmOiB0cnVlXG5cdFx0fSk7XG5cdFx0Q09OVEVYVF9SRUdJU1RSWS5zZXQoXCIkZGVmYXVsdCRcIiwgREVGQVVMVF9DT05URVhUKTtcblx0fVxuXHRyZXR1cm4gREVGQVVMVF9DT05URVhUO1xufVxuZnVuY3Rpb24gY3JlYXRlQ2hhbm5lbENvbnRleHQob3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IGN0eCA9IG5ldyBDaGFubmVsQ29udGV4dChvcHRpb25zKTtcblx0aWYgKG9wdGlvbnMubmFtZSkgQ09OVEVYVF9SRUdJU1RSWS5zZXQob3B0aW9ucy5uYW1lLCBjdHgpO1xuXHRyZXR1cm4gY3R4O1xufVxuZnVuY3Rpb24gZ2V0T3JDcmVhdGVDb250ZXh0KG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRpZiAoQ09OVEVYVF9SRUdJU1RSWS5oYXMobmFtZSkpIHJldHVybiBDT05URVhUX1JFR0lTVFJZLmdldChuYW1lKTtcblx0cmV0dXJuIGNyZWF0ZUNoYW5uZWxDb250ZXh0KHtcblx0XHQuLi5vcHRpb25zLFxuXHRcdG5hbWVcblx0fSk7XG59XG5mdW5jdGlvbiBnZXRDb250ZXh0KG5hbWUpIHtcblx0cmV0dXJuIENPTlRFWFRfUkVHSVNUUlkuZ2V0KG5hbWUpO1xufVxuZnVuY3Rpb24gZGVsZXRlQ29udGV4dChuYW1lKSB7XG5cdGNvbnN0IGN0eCA9IENPTlRFWFRfUkVHSVNUUlkuZ2V0KG5hbWUpO1xuXHRpZiAoY3R4KSB7XG5cdFx0Y3R4LmNsb3NlKCk7XG5cdFx0cmV0dXJuIENPTlRFWFRfUkVHSVNUUlkuZGVsZXRlKG5hbWUpO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lcygpIHtcblx0cmV0dXJuIFsuLi5DT05URVhUX1JFR0lTVFJZLmtleXMoKV07XG59XG5mdW5jdGlvbiBjcmVhdGVDaGFubmVsc0luQ29udGV4dChjaGFubmVsTmFtZXMsIGNvbnRleHRPcHRpb25zID0ge30pIHtcblx0Y29uc3QgY29udGV4dCA9IGNyZWF0ZUNoYW5uZWxDb250ZXh0KGNvbnRleHRPcHRpb25zKTtcblx0cmV0dXJuIHtcblx0XHRjb250ZXh0LFxuXHRcdGNoYW5uZWxzOiBjb250ZXh0LmNyZWF0ZUNoYW5uZWxzKGNoYW5uZWxOYW1lcylcblx0fTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydE1vZHVsZUluQ29udGV4dChjaGFubmVsTmFtZSwgdXJsLCBvcHRpb25zID0ge30pIHtcblx0Y29uc3QgY29udGV4dCA9IGNyZWF0ZUNoYW5uZWxDb250ZXh0KG9wdGlvbnMuY29udGV4dE9wdGlvbnMpO1xuXHRyZXR1cm4ge1xuXHRcdGNvbnRleHQsXG5cdFx0bW9kdWxlOiBhd2FpdCBjb250ZXh0LmltcG9ydE1vZHVsZUluQ2hhbm5lbChjaGFubmVsTmFtZSwgdXJsLCB7XG5cdFx0XHRjaGFubmVsT3B0aW9uczogb3B0aW9ucy5jaGFubmVsT3B0aW9ucyxcblx0XHRcdGltcG9ydE9wdGlvbnM6IG9wdGlvbnMuaW1wb3J0T3B0aW9uc1xuXHRcdH0pXG5cdH07XG59XG5hc3luYyBmdW5jdGlvbiBhZGRXb3JrZXJDaGFubmVsKG5hbWUsIHdvcmtlciwgb3B0aW9ucyA9IHt9KSB7XG5cdHJldHVybiBnZXREZWZhdWx0Q29udGV4dCgpLmFkZFdvcmtlcihuYW1lLCB3b3JrZXIsIG9wdGlvbnMpO1xufVxuYXN5bmMgZnVuY3Rpb24gYWRkUG9ydENoYW5uZWwobmFtZSwgcG9ydCwgb3B0aW9ucyA9IHt9KSB7XG5cdHJldHVybiBnZXREZWZhdWx0Q29udGV4dCgpLmFkZFBvcnQobmFtZSwgcG9ydCwgb3B0aW9ucyk7XG59XG5hc3luYyBmdW5jdGlvbiBhZGRCcm9hZGNhc3RDaGFubmVsKG5hbWUsIGJyb2FkY2FzdE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRyZXR1cm4gZ2V0RGVmYXVsdENvbnRleHQoKS5hZGRCcm9hZGNhc3QobmFtZSwgYnJvYWRjYXN0TmFtZSwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBhZGRTZWxmQ2hhbm5lbFRvRGVmYXVsdChuYW1lLCBvcHRpb25zID0ge30pIHtcblx0cmV0dXJuIGdldERlZmF1bHRDb250ZXh0KCkuYWRkU2VsZkNoYW5uZWwobmFtZSwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBkZWZlckNoYW5uZWwobmFtZSwgaW5pdEZuKSB7XG5cdGdldERlZmF1bHRDb250ZXh0KCkuZGVmZXIobmFtZSwgaW5pdEZuKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGluaXREZWZlcnJlZENoYW5uZWwobmFtZSkge1xuXHRyZXR1cm4gZ2V0RGVmYXVsdENvbnRleHQoKS5pbml0RGVmZXJyZWQobmFtZSk7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRDaGFubmVsRnJvbURlZmF1bHQobmFtZSkge1xuXHRyZXR1cm4gZ2V0RGVmYXVsdENvbnRleHQoKS5nZXRDaGFubmVsQXN5bmMobmFtZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0Q2hhbm5lbFBhaXIobmFtZTEsIG5hbWUyLCBvcHRpb25zID0ge30pIHtcblx0cmV0dXJuIGdldERlZmF1bHRDb250ZXh0KCkuY3JlYXRlQ2hhbm5lbFBhaXIobmFtZTEsIG5hbWUyLCBvcHRpb25zKTtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdHJhbnNwb3J0L1RyYW5zcG9ydE9ic2VydmFibGUudHNcbnZhciBUcmFuc3BvcnRPYnNlcnZhYmxlID0gY2xhc3Mge1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9saXN0ZW5pbmcgPSBmYWxzZTtcblx0X2NsZWFudXAgPSBudWxsO1xuXHRzdWJzY3JpYmUob2JzZXJ2ZXJPck5leHQpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXJPck5leHQgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXJPck5leHQgfSA6IG9ic2VydmVyT3JOZXh0O1xuXHRcdGNvbnN0IGZpcnN0ID0gdGhpcy5fc3Vicy5zaXplID09PSAwO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0aWYgKGZpcnN0ICYmICF0aGlzLl9saXN0ZW5pbmcpIHRoaXMuX2FjdGl2YXRlKCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0XHRpZiAodGhpcy5fc3Vicy5zaXplID09PSAwICYmIHRoaXMuX2xpc3RlbmluZykgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0X2RlYWN0aXZhdGUoKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fY2xlYW51cCA9IG51bGw7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gZmFsc2U7XG5cdH1cblx0X2Rpc3BhdGNoKHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRzLm5leHQ/Lih2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdH1cblx0fVxuXHRfZXJyb3IoZXJyKSB7XG5cdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIpO1xuXHR9XG5cdF9jb21wbGV0ZSgpIHtcblx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5jb21wbGV0ZT8uKCk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdHRoaXMuX2RlYWN0aXZhdGUoKTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9jb21wbGV0ZSgpO1xuXHR9XG5cdGdldCBzdWJzY3JpYmVyQ291bnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N1YnMuc2l6ZTtcblx0fVxuXHRnZXQgaXNMaXN0ZW5pbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xpc3RlbmluZztcblx0fVxufTtcbnZhciBXb3JrZXJPYnNlcnZhYmxlID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRPYnNlcnZhYmxlIHtcblx0X3dvcmtlcjtcblx0X3NlbmQ7XG5cdGNvbnN0cnVjdG9yKF93b3JrZXIpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX3dvcmtlciA9IF93b3JrZXI7XG5cdFx0dGhpcy5fc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0aGlzLl93b3JrZXIpO1xuXHR9XG5cdG5leHQodmFsdWUsIHRyYW5zZmVyKSB7XG5cdFx0dGhpcy5fc2VuZCh2YWx1ZSwgdHJhbnNmZXIpO1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuaW5nKSByZXR1cm47XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRoaXMuX3dvcmtlciwgKGQpID0+IHRoaXMuX2Rpc3BhdGNoKGQpLCAoZSkgPT4gdGhpcy5fZXJyb3IoZSkpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cblx0dGVybWluYXRlKCkge1xuXHRcdHRoaXMuX3dvcmtlci50ZXJtaW5hdGUoKTtcblx0XHR0aGlzLl9jb21wbGV0ZSgpO1xuXHR9XG5cdGdldCB3b3JrZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3dvcmtlcjtcblx0fVxufTtcbnZhciBNZXNzYWdlUG9ydE9ic2VydmFibGUgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydE9ic2VydmFibGUge1xuXHRfcG9ydDtcblx0X3NlbmQ7XG5cdGNvbnN0cnVjdG9yKF9wb3J0KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl9wb3J0ID0gX3BvcnQ7XG5cdFx0dGhpcy5fc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0aGlzLl9wb3J0KTtcblx0fVxuXHRuZXh0KHZhbHVlLCB0cmFuc2Zlcikge1xuXHRcdHRoaXMuX3NlbmQodmFsdWUsIHRyYW5zZmVyKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0aGlzLl9wb3J0LCAoZCkgPT4gdGhpcy5fZGlzcGF0Y2goZCkpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cblx0Z2V0IHBvcnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnQ7XG5cdH1cbn07XG52YXIgQnJvYWRjYXN0Q2hhbm5lbE9ic2VydmFibGUgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydE9ic2VydmFibGUge1xuXHRfbmFtZTtcblx0X2NoYW5uZWw7XG5cdF9zZW5kO1xuXHRjb25zdHJ1Y3RvcihfbmFtZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fbmFtZSA9IF9uYW1lO1xuXHRcdHRoaXMuX2NoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbChfbmFtZSk7XG5cdFx0dGhpcy5fc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0aGlzLl9jaGFubmVsKTtcblx0fVxuXHRuZXh0KHZhbHVlKSB7XG5cdFx0dGhpcy5fc2VuZCh2YWx1ZSk7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fY2hhbm5lbCwgKGQpID0+IHtcblx0XHRcdGlmIChkPy5zZW5kZXIgIT09IHRoaXMuX25hbWUpIHRoaXMuX2Rpc3BhdGNoKGQpO1xuXHRcdH0pO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fY2hhbm5lbC5jbG9zZSgpO1xuXHRcdHN1cGVyLmNsb3NlKCk7XG5cdH1cbn07XG52YXIgV2ViU29ja2V0T2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF91cmw7XG5cdF9wcm90b2NvbHM7XG5cdF93cyA9IG51bGw7XG5cdF9wZW5kaW5nID0gW107XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRjb25zdHJ1Y3RvcihfdXJsLCBfcHJvdG9jb2xzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl91cmwgPSBfdXJsO1xuXHRcdHRoaXMuX3Byb3RvY29scyA9IF9wcm90b2NvbHM7XG5cdH1cblx0Y29ubmVjdCgpIHtcblx0XHRpZiAodGhpcy5fd3MpIHJldHVybjtcblx0XHRjb25zdCB1cmwgPSB0eXBlb2YgdGhpcy5fdXJsID09PSBcInN0cmluZ1wiID8gdGhpcy5fdXJsIDogdGhpcy5fdXJsLmhyZWY7XG5cdFx0dGhpcy5fd3MgPSBuZXcgV2ViU29ja2V0KHVybCwgdGhpcy5fcHJvdG9jb2xzKTtcblx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiY29ubmVjdGluZ1wiKTtcblx0XHR0aGlzLl93cy5hZGRFdmVudExpc3RlbmVyKFwib3BlblwiLCAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwib3BlblwiKTtcblx0XHRcdHRoaXMuX3BlbmRpbmcuZm9yRWFjaCgobSkgPT4gdGhpcy5uZXh0KG0pKTtcblx0XHRcdHRoaXMuX3BlbmRpbmcgPSBbXTtcblx0XHR9KTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fd3MsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSwgKGUpID0+IHRoaXMuX2Vycm9yKGUpLCAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiY2xvc2VkXCIpO1xuXHRcdFx0dGhpcy5fY29tcGxldGUoKTtcblx0XHR9KTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG5cdG5leHQodmFsdWUpIHtcblx0XHRpZiAoIXRoaXMuX3dzIHx8IHRoaXMuX3dzLnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5PUEVOKSB7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLnB1c2godmFsdWUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZTogXywgLi4uZGF0YSB9ID0gdmFsdWU7XG5cdFx0dGhpcy5fd3Muc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICghdGhpcy5fd3MpIHRoaXMuY29ubmVjdCgpO1xuXHR9XG5cdGNsb3NlKGNvZGUsIHJlYXNvbikge1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjbG9zaW5nXCIpO1xuXHRcdHRoaXMuX3dzPy5jbG9zZShjb2RlLCByZWFzb24pO1xuXHRcdHRoaXMuX3dzID0gbnVsbDtcblx0XHRzdXBlci5jbG9zZSgpO1xuXHR9XG5cdGdldCBzdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGU7XG5cdH1cblx0Z2V0IGlzT3BlbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fd3M/LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOO1xuXHR9XG59O1xudmFyIENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlJDEgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydE9ic2VydmFibGUge1xuXHRfc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcihcImNocm9tZS1ydW50aW1lXCIpO1xuXHRuZXh0KHZhbHVlKSB7XG5cdFx0dGhpcy5fc2VuZCh2YWx1ZSk7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJjaHJvbWUtcnVudGltZVwiLCAoZCkgPT4gdGhpcy5fZGlzcGF0Y2goZCkpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cbn07XG52YXIgQ2hyb21lVGFic09ic2VydmFibGUkMSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF90YWJJZDtcblx0Y29uc3RydWN0b3IoX3RhYklkKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl90YWJJZCA9IF90YWJJZDtcblx0fVxuXHRzZXRUYWJJZChpZCkge1xuXHRcdHRoaXMuX3RhYklkID0gaWQ7XG5cdH1cblx0bmV4dCh2YWx1ZSkge1xuXHRcdGlmICh0aGlzLl90YWJJZCA9PSBudWxsIHx8IHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS50YWJzKSByZXR1cm47XG5cdFx0Y29uc3QgeyB0cmFuc2ZlcmFibGU6IF8sIC4uLmRhdGEgfSA9IHZhbHVlO1xuXHRcdGNocm9tZS50YWJzLnNlbmRNZXNzYWdlKHRoaXMuX3RhYklkLCBkYXRhKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcihcImNocm9tZS10YWJzXCIsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSwgdm9pZCAwLCB2b2lkIDAsIHsgdGFiSWQ6IHRoaXMuX3RhYklkIH0pO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cbn07XG52YXIgQ2hyb21lUG9ydE9ic2VydmFibGUkMSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF9wb3J0TmFtZTtcblx0X3RhYklkO1xuXHRfc2VuZDtcblx0Y29uc3RydWN0b3IoX3BvcnROYW1lLCBfdGFiSWQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX3BvcnROYW1lID0gX3BvcnROYW1lO1xuXHRcdHRoaXMuX3RhYklkID0gX3RhYklkO1xuXHRcdHRoaXMuX3NlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIoXCJjaHJvbWUtcG9ydFwiLCB7XG5cdFx0XHRwb3J0TmFtZTogX3BvcnROYW1lLFxuXHRcdFx0dGFiSWQ6IF90YWJJZFxuXHRcdH0pO1xuXHR9XG5cdG5leHQodmFsdWUpIHtcblx0XHR0aGlzLl9zZW5kKHZhbHVlKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcihcImNocm9tZS1wb3J0XCIsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSwgdm9pZCAwLCB2b2lkIDAsIHtcblx0XHRcdHBvcnROYW1lOiB0aGlzLl9wb3J0TmFtZSxcblx0XHRcdHRhYklkOiB0aGlzLl90YWJJZFxuXHRcdH0pO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cbn07XG52YXIgU2VydmljZVdvcmtlckNsaWVudE9ic2VydmFibGUgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydE9ic2VydmFibGUge1xuXHRfc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcihcInNlcnZpY2Utd29ya2VyLWNsaWVudFwiKTtcblx0bmV4dCh2YWx1ZSwgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kKHZhbHVlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJzZXJ2aWNlLXdvcmtlci1jbGllbnRcIiwgKGQpID0+IHRoaXMuX2Rpc3BhdGNoKGQpKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG59O1xudmFyIFNlcnZpY2VXb3JrZXJIb3N0T2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKFwic2VydmljZS13b3JrZXItaG9zdFwiKTtcblx0bmV4dCh2YWx1ZSwgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kKHZhbHVlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJzZXJ2aWNlLXdvcmtlci1ob3N0XCIsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxufTtcbnZhciBTZWxmT2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKFwic2VsZlwiKTtcblx0bmV4dCh2YWx1ZSwgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kKHZhbHVlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJzZWxmXCIsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxufTtcbnZhciBUcmFuc3BvcnRPYnNlcnZhYmxlRmFjdG9yeSA9IHtcblx0d29ya2VyOiAodykgPT4gbmV3IFdvcmtlck9ic2VydmFibGUodyksXG5cdHdvcmtlckZyb21Vcmw6ICh1cmwsIG9wdHMpID0+IG5ldyBXb3JrZXJPYnNlcnZhYmxlKG5ldyBXb3JrZXIodHlwZW9mIHVybCA9PT0gXCJzdHJpbmdcIiA/IHVybCA6IHVybC5ocmVmLCB7XG5cdFx0dHlwZTogXCJtb2R1bGVcIixcblx0XHQuLi5vcHRzXG5cdH0pKSxcblx0bWVzc2FnZVBvcnQ6IChwKSA9PiBuZXcgTWVzc2FnZVBvcnRPYnNlcnZhYmxlKHApLFxuXHRtZXNzYWdlQ2hhbm5lbDogKCkgPT4ge1xuXHRcdGNvbnN0IGNoID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBvcnQxOiBuZXcgTWVzc2FnZVBvcnRPYnNlcnZhYmxlKGNoLnBvcnQxKSxcblx0XHRcdHBvcnQyOiBuZXcgTWVzc2FnZVBvcnRPYnNlcnZhYmxlKGNoLnBvcnQyKVxuXHRcdH07XG5cdH0sXG5cdGJyb2FkY2FzdDogKG5hbWUpID0+IG5ldyBCcm9hZGNhc3RDaGFubmVsT2JzZXJ2YWJsZShuYW1lKSxcblx0d2Vic29ja2V0OiAodXJsLCBwcm90b2NvbHMpID0+IG5ldyBXZWJTb2NrZXRPYnNlcnZhYmxlKHVybCwgcHJvdG9jb2xzKSxcblx0Y2hyb21lUnVudGltZTogKCkgPT4gbmV3IENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlJDEoKSxcblx0Y2hyb21lVGFiczogKHRhYklkKSA9PiBuZXcgQ2hyb21lVGFic09ic2VydmFibGUkMSh0YWJJZCksXG5cdGNocm9tZVBvcnQ6IChwb3J0TmFtZSwgdGFiSWQpID0+IG5ldyBDaHJvbWVQb3J0T2JzZXJ2YWJsZSQxKHBvcnROYW1lLCB0YWJJZCksXG5cdHNlcnZpY2VXb3JrZXJDbGllbnQ6ICgpID0+IG5ldyBTZXJ2aWNlV29ya2VyQ2xpZW50T2JzZXJ2YWJsZSgpLFxuXHRzZXJ2aWNlV29ya2VySG9zdDogKCkgPT4gbmV3IFNlcnZpY2VXb3JrZXJIb3N0T2JzZXJ2YWJsZSgpLFxuXHRzZWxmOiAoKSA9PiBuZXcgU2VsZk9ic2VydmFibGUoKVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUJpZGlyZWN0aW9uYWxDaGFubmVsJDEob3V0Ym91bmQsIGluYm91bmQpIHtcblx0cmV0dXJuIHtcblx0XHRzZW5kOiAodiwgdCkgPT4gb3V0Ym91bmQubmV4dCh2LCB0KSxcblx0XHRzdWJzY3JpYmU6IChoKSA9PiBpbmJvdW5kLnN1YnNjcmliZSh7IG5leHQ6IGggfSksXG5cdFx0Y2xvc2U6ICgpID0+IHtcblx0XHRcdG91dGJvdW5kLmNsb3NlKCk7XG5cdFx0XHRpbmJvdW5kLmNsb3NlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvV29ya2VyLnRzXG52YXIgV29ya2VyQ29udGV4dCA9IGNsYXNzIHtcblx0X2NvbnRleHQ7XG5cdF9jb25maWc7XG5cdF9zdWJzY3JpcHRpb25zID0gW107XG5cdF9pbmNvbWluZ0Nvbm5lY3Rpb25zID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogMTAwIH0pO1xuXHRfY2hhbm5lbENyZWF0ZWQgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdF9jaGFubmVsQ2xvc2VkID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5fY29uZmlnID0ge1xuXHRcdFx0bmFtZTogY29uZmlnLm5hbWUgPz8gXCJ3b3JrZXJcIixcblx0XHRcdHdvcmtlck5hbWU6IGNvbmZpZy53b3JrZXJOYW1lID8/IGB3b3JrZXItJHtVVUlEdjQoKS5zbGljZSgwLCA4KX1gLFxuXHRcdFx0YXV0b0FjY2VwdENoYW5uZWxzOiBjb25maWcuYXV0b0FjY2VwdENoYW5uZWxzID8/IHRydWUsXG5cdFx0XHRhbGxvd2VkQ2hhbm5lbHM6IGNvbmZpZy5hbGxvd2VkQ2hhbm5lbHMgPz8gW10sXG5cdFx0XHRtYXhDaGFubmVsczogY29uZmlnLm1heENoYW5uZWxzID8/IDEwMCxcblx0XHRcdGF1dG9Db25uZWN0OiBjb25maWcuYXV0b0Nvbm5lY3QgPz8gdHJ1ZSxcblx0XHRcdHVzZUdsb2JhbFNlbGY6IHRydWUsXG5cdFx0XHRkZWZhdWx0T3B0aW9uczogY29uZmlnLmRlZmF1bHRPcHRpb25zID8/IHt9LFxuXHRcdFx0aXNvbGF0ZWRTdG9yYWdlOiBjb25maWcuaXNvbGF0ZWRTdG9yYWdlID8/IGZhbHNlLFxuXHRcdFx0Li4uY29uZmlnXG5cdFx0fTtcblx0XHR0aGlzLl9jb250ZXh0ID0gY3JlYXRlQ2hhbm5lbENvbnRleHQoe1xuXHRcdFx0bmFtZTogdGhpcy5fY29uZmlnLm5hbWUsXG5cdFx0XHR1c2VHbG9iYWxTZWxmOiB0cnVlLFxuXHRcdFx0ZGVmYXVsdE9wdGlvbnM6IGNvbmZpZy5kZWZhdWx0T3B0aW9uc1xuXHRcdH0pO1xuXHRcdHRoaXMuX3NldHVwTWVzc2FnZUxpc3RlbmVyKCk7XG5cdH1cblx0Z2V0IG9uQ29ubmVjdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5jb21pbmdDb25uZWN0aW9ucztcblx0fVxuXHRnZXQgb25DaGFubmVsQ3JlYXRlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbENyZWF0ZWQ7XG5cdH1cblx0Z2V0IG9uQ2hhbm5lbENsb3NlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbENsb3NlZDtcblx0fVxuXHRzdWJzY3JpYmVDb25uZWN0aW9ucyhoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luY29taW5nQ29ubmVjdGlvbnMuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdHN1YnNjcmliZUNoYW5uZWxDcmVhdGVkKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbENyZWF0ZWQuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdGFjY2VwdENvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuXHRcdGlmICghdGhpcy5fY2FuQWNjZXB0Q2hhbm5lbChjb25uZWN0aW9uLmNoYW5uZWwpKSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCBlbmRwb2ludCA9IHRoaXMuX2NvbnRleHQuY3JlYXRlQ2hhbm5lbChjb25uZWN0aW9uLmNoYW5uZWwsIGNvbm5lY3Rpb24ub3B0aW9ucyk7XG5cdFx0aWYgKGNvbm5lY3Rpb24ucG9ydCkge1xuXHRcdFx0Y29ubmVjdGlvbi5wb3J0LnN0YXJ0Py4oKTtcblx0XHRcdGVuZHBvaW50LmhhbmRsZXIuY3JlYXRlUmVtb3RlQ2hhbm5lbChjb25uZWN0aW9uLnNlbmRlciwgY29ubmVjdGlvbi5vcHRpb25zLCBjb25uZWN0aW9uLnBvcnQpO1xuXHRcdH1cblx0XHR0aGlzLl9jaGFubmVsQ3JlYXRlZC5uZXh0KHtcblx0XHRcdGNoYW5uZWw6IGNvbm5lY3Rpb24uY2hhbm5lbCxcblx0XHRcdGVuZHBvaW50LFxuXHRcdFx0c2VuZGVyOiBjb25uZWN0aW9uLnNlbmRlcixcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHRcdHRoaXMuX3Bvc3RDaGFubmVsQ3JlYXRlZChjb25uZWN0aW9uLmNoYW5uZWwsIGNvbm5lY3Rpb24uc2VuZGVyLCBjb25uZWN0aW9uLmlkKTtcblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblx0Y3JlYXRlQ2hhbm5lbChuYW1lLCBvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHQuY3JlYXRlQ2hhbm5lbChuYW1lLCBvcHRpb25zKTtcblx0fVxuXHRnZXRDaGFubmVsKG5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dC5nZXRDaGFubmVsKG5hbWUpO1xuXHR9XG5cdGhhc0NoYW5uZWwobmFtZSkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0Lmhhc0NoYW5uZWwobmFtZSk7XG5cdH1cblx0Z2V0Q2hhbm5lbE5hbWVzKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0LmdldENoYW5uZWxOYW1lcygpO1xuXHR9XG5cdHF1ZXJ5Q29ubmVjdGlvbnMocXVlcnkgPSB7fSkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0LnF1ZXJ5Q29ubmVjdGlvbnMocXVlcnkpO1xuXHR9XG5cdG5vdGlmeUNvbm5lY3Rpb25zKHBheWxvYWQgPSB7fSwgcXVlcnkgPSB7fSkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0Lm5vdGlmeUNvbm5lY3Rpb25zKHBheWxvYWQsIHF1ZXJ5KTtcblx0fVxuXHRjbG9zZUNoYW5uZWwobmFtZSkge1xuXHRcdGNvbnN0IGNsb3NlZCA9IHRoaXMuX2NvbnRleHQuY2xvc2VDaGFubmVsKG5hbWUpO1xuXHRcdGlmIChjbG9zZWQpIHRoaXMuX2NoYW5uZWxDbG9zZWQubmV4dCh7XG5cdFx0XHRjaGFubmVsOiBuYW1lLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0cmV0dXJuIGNsb3NlZDtcblx0fVxuXHRnZXQgY29udGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dDtcblx0fVxuXHRnZXQgY29uZmlnKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb25maWc7XG5cdH1cblx0X3NldHVwTWVzc2FnZUxpc3RlbmVyKCkge1xuXHRcdGFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsICgoZXZlbnQpID0+IHtcblx0XHRcdHRoaXMuX2hhbmRsZUluY29taW5nTWVzc2FnZShldmVudCk7XG5cdFx0fSkpO1xuXHR9XG5cdF9oYW5kbGVJbmNvbWluZ01lc3NhZ2UoZXZlbnQpIHtcblx0XHRjb25zdCBkYXRhID0gZXZlbnQuZGF0YTtcblx0XHRpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpIHJldHVybjtcblx0XHRzd2l0Y2ggKGRhdGEudHlwZSkge1xuXHRcdFx0Y2FzZSBcImNyZWF0ZUNoYW5uZWxcIjpcblx0XHRcdFx0dGhpcy5faGFuZGxlQ3JlYXRlQ2hhbm5lbChkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29ubmVjdENoYW5uZWxcIjpcblx0XHRcdFx0dGhpcy5faGFuZGxlQ29ubmVjdENoYW5uZWwoZGF0YSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImFkZFBvcnRcIjpcblx0XHRcdFx0dGhpcy5faGFuZGxlQWRkUG9ydChkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwibGlzdENoYW5uZWxzXCI6XG5cdFx0XHRcdHRoaXMuX2hhbmRsZUxpc3RDaGFubmVscyhkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2xvc2VDaGFubmVsXCI6XG5cdFx0XHRcdHRoaXMuX2hhbmRsZUNsb3NlQ2hhbm5lbChkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwicGluZ1wiOlxuXHRcdFx0XHRwb3N0TWVzc2FnZSh7XG5cdFx0XHRcdFx0dHlwZTogXCJwb25nXCIsXG5cdFx0XHRcdFx0aWQ6IGRhdGEuaWQsXG5cdFx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6IGlmIChkYXRhLmNoYW5uZWwgJiYgdGhpcy5fY29udGV4dC5oYXNDaGFubmVsKGRhdGEuY2hhbm5lbCkpICh0aGlzLl9jb250ZXh0LmdldENoYW5uZWwoZGF0YS5jaGFubmVsKT8uaGFuZGxlcik/LmhhbmRsZUFuZFJlc3BvbnNlPy4oZGF0YS5wYXlsb2FkLCBkYXRhLnJlcUlkKTtcblx0XHR9XG5cdH1cblx0X2hhbmRsZUNyZWF0ZUNoYW5uZWwoZGF0YSkge1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB7XG5cdFx0XHRpZDogZGF0YS5yZXFJZCA/PyBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IGRhdGEuY2hhbm5lbCxcblx0XHRcdHNlbmRlcjogZGF0YS5zZW5kZXIgPz8gXCJ1bmtub3duXCIsXG5cdFx0XHR0eXBlOiBcImNoYW5uZWxcIixcblx0XHRcdHBvcnQ6IGRhdGEubWVzc2FnZVBvcnQsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KCksXG5cdFx0XHRvcHRpb25zOiBkYXRhLm9wdGlvbnNcblx0XHR9O1xuXHRcdHRoaXMuX2luY29taW5nQ29ubmVjdGlvbnMubmV4dChjb25uZWN0aW9uKTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmF1dG9BY2NlcHRDaGFubmVscykgdGhpcy5hY2NlcHRDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuXHR9XG5cdF9oYW5kbGVDb25uZWN0Q2hhbm5lbChkYXRhKSB7XG5cdFx0Y29uc3QgY29ubmVjdGlvbiA9IHtcblx0XHRcdGlkOiBkYXRhLnJlcUlkID8/IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogZGF0YS5jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBkYXRhLnNlbmRlciA/PyBcInVua25vd25cIixcblx0XHRcdHR5cGU6IGRhdGEucG9ydFR5cGUgPz8gXCJjaGFubmVsXCIsXG5cdFx0XHRwb3J0OiBkYXRhLnBvcnQsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KCksXG5cdFx0XHRvcHRpb25zOiBkYXRhLm9wdGlvbnNcblx0XHR9O1xuXHRcdHRoaXMuX2luY29taW5nQ29ubmVjdGlvbnMubmV4dChjb25uZWN0aW9uKTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmF1dG9BY2NlcHRDaGFubmVscyAmJiB0aGlzLl9jYW5BY2NlcHRDaGFubmVsKGRhdGEuY2hhbm5lbCkpIHtcblx0XHRcdGNvbnN0IGVuZHBvaW50ID0gdGhpcy5fY29udGV4dC5nZXRPckNyZWF0ZUNoYW5uZWwoZGF0YS5jaGFubmVsLCBkYXRhLm9wdGlvbnMpO1xuXHRcdFx0aWYgKGRhdGEucG9ydCkge1xuXHRcdFx0XHRkYXRhLnBvcnQuc3RhcnQ/LigpO1xuXHRcdFx0XHRlbmRwb2ludC5oYW5kbGVyLmNyZWF0ZVJlbW90ZUNoYW5uZWwoZGF0YS5zZW5kZXIsIGRhdGEub3B0aW9ucywgZGF0YS5wb3J0KTtcblx0XHRcdH1cblx0XHRcdHBvc3RNZXNzYWdlKHtcblx0XHRcdFx0dHlwZTogXCJjaGFubmVsQ29ubmVjdGVkXCIsXG5cdFx0XHRcdGNoYW5uZWw6IGRhdGEuY2hhbm5lbCxcblx0XHRcdFx0cmVxSWQ6IGRhdGEucmVxSWRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRfaGFuZGxlQWRkUG9ydChkYXRhKSB7XG5cdFx0aWYgKCFkYXRhLnBvcnQgfHwgIWRhdGEuY2hhbm5lbCkgcmV0dXJuO1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB7XG5cdFx0XHRpZDogZGF0YS5yZXFJZCA/PyBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IGRhdGEuY2hhbm5lbCxcblx0XHRcdHNlbmRlcjogZGF0YS5zZW5kZXIgPz8gXCJ1bmtub3duXCIsXG5cdFx0XHR0eXBlOiBcInBvcnRcIixcblx0XHRcdHBvcnQ6IGRhdGEucG9ydCxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcblx0XHRcdG9wdGlvbnM6IGRhdGEub3B0aW9uc1xuXHRcdH07XG5cdFx0dGhpcy5faW5jb21pbmdDb25uZWN0aW9ucy5uZXh0KGNvbm5lY3Rpb24pO1xuXHRcdGlmICh0aGlzLl9jb25maWcuYXV0b0FjY2VwdENoYW5uZWxzKSB0aGlzLmFjY2VwdENvbm5lY3Rpb24oY29ubmVjdGlvbik7XG5cdH1cblx0X2hhbmRsZUxpc3RDaGFubmVscyhkYXRhKSB7XG5cdFx0cG9zdE1lc3NhZ2Uoe1xuXHRcdFx0dHlwZTogXCJjaGFubmVsTGlzdFwiLFxuXHRcdFx0Y2hhbm5lbHM6IHRoaXMuZ2V0Q2hhbm5lbE5hbWVzKCksXG5cdFx0XHRyZXFJZDogZGF0YS5yZXFJZFxuXHRcdH0pO1xuXHR9XG5cdF9oYW5kbGVDbG9zZUNoYW5uZWwoZGF0YSkge1xuXHRcdGlmIChkYXRhLmNoYW5uZWwpIHtcblx0XHRcdHRoaXMuY2xvc2VDaGFubmVsKGRhdGEuY2hhbm5lbCk7XG5cdFx0XHRwb3N0TWVzc2FnZSh7XG5cdFx0XHRcdHR5cGU6IFwiY2hhbm5lbENsb3NlZFwiLFxuXHRcdFx0XHRjaGFubmVsOiBkYXRhLmNoYW5uZWwsXG5cdFx0XHRcdHJlcUlkOiBkYXRhLnJlcUlkXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0X2NhbkFjY2VwdENoYW5uZWwoY2hhbm5lbCkge1xuXHRcdGlmICh0aGlzLl9jb250ZXh0LnNpemUgPj0gdGhpcy5fY29uZmlnLm1heENoYW5uZWxzKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKHRoaXMuX2NvbmZpZy5hbGxvd2VkQ2hhbm5lbHMubGVuZ3RoID4gMCkgcmV0dXJuIHRoaXMuX2NvbmZpZy5hbGxvd2VkQ2hhbm5lbHMuaW5jbHVkZXMoY2hhbm5lbCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0X3Bvc3RDaGFubmVsQ3JlYXRlZChjaGFubmVsLCBzZW5kZXIsIHJlcUlkKSB7XG5cdFx0cG9zdE1lc3NhZ2Uoe1xuXHRcdFx0dHlwZTogXCJjaGFubmVsQ3JlYXRlZFwiLFxuXHRcdFx0Y2hhbm5lbCxcblx0XHRcdHNlbmRlcixcblx0XHRcdHJlcUlkLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMgPSBbXTtcblx0XHR0aGlzLl9pbmNvbWluZ0Nvbm5lY3Rpb25zLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5fY2hhbm5lbENyZWF0ZWQuY29tcGxldGUoKTtcblx0XHR0aGlzLl9jaGFubmVsQ2xvc2VkLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5fY29udGV4dC5jbG9zZSgpO1xuXHR9XG59O1xudmFyIFdPUktFUl9DT05URVhUID0gbnVsbDtcbmZ1bmN0aW9uIGdldFdvcmtlckNvbnRleHQoY29uZmlnKSB7XG5cdGlmICghV09SS0VSX0NPTlRFWFQpIFdPUktFUl9DT05URVhUID0gbmV3IFdvcmtlckNvbnRleHQoY29uZmlnKTtcblx0cmV0dXJuIFdPUktFUl9DT05URVhUO1xufVxuZnVuY3Rpb24gaW5pdFdvcmtlckNvbnRleHQoY29uZmlnKSB7XG5cdFdPUktFUl9DT05URVhUPy5jbG9zZSgpO1xuXHRXT1JLRVJfQ09OVEVYVCA9IG5ldyBXb3JrZXJDb250ZXh0KGNvbmZpZyk7XG5cdHJldHVybiBXT1JLRVJfQ09OVEVYVDtcbn1cbmZ1bmN0aW9uIG9uV29ya2VyQ29ubmVjdGlvbihoYW5kbGVyKSB7XG5cdHJldHVybiBnZXRXb3JrZXJDb250ZXh0KCkuc3Vic2NyaWJlQ29ubmVjdGlvbnMoaGFuZGxlcik7XG59XG5mdW5jdGlvbiBvbldvcmtlckNoYW5uZWxDcmVhdGVkKGhhbmRsZXIpIHtcblx0cmV0dXJuIGdldFdvcmtlckNvbnRleHQoKS5zdWJzY3JpYmVDaGFubmVsQ3JlYXRlZChoYW5kbGVyKTtcbn1cbnZhciBXT1JLRVJfUkVTUE9OREVSID0gbnVsbDtcbnZhciBXT1JLRVJfSU5WT0tFUiA9IG51bGw7XG5mdW5jdGlvbiBnZXRXb3JrZXJSZXNwb25kZXIoY2hhbm5lbCkge1xuXHRpZiAoIVdPUktFUl9SRVNQT05ERVIpIHtcblx0XHRXT1JLRVJfUkVTUE9OREVSID0gY3JlYXRlUmVzcG9uZGVyKGNoYW5uZWwgPz8gXCJ3b3JrZXJcIik7XG5cdFx0V09SS0VSX1JFU1BPTkRFUi5saXN0ZW4oc2VsZik7XG5cdH1cblx0cmV0dXJuIFdPUktFUl9SRVNQT05ERVI7XG59XG5mdW5jdGlvbiBnZXRXb3JrZXJJbnZva2VyKGNoYW5uZWwpIHtcblx0aWYgKCFXT1JLRVJfSU5WT0tFUikge1xuXHRcdFdPUktFUl9JTlZPS0VSID0gY3JlYXRlSW52b2tlcihjaGFubmVsID8/IFwid29ya2VyXCIpO1xuXHRcdFdPUktFUl9JTlZPS0VSLmNvbm5lY3Qoc2VsZik7XG5cdH1cblx0cmV0dXJuIFdPUktFUl9JTlZPS0VSO1xufVxuZnVuY3Rpb24gZXhwb3NlRnJvbVdvcmtlcihuYW1lLCBvYmopIHtcblx0Z2V0V29ya2VyUmVzcG9uZGVyKCkuZXhwb3NlKG5hbWUsIG9iaik7XG59XG5mdW5jdGlvbiBvbldvcmtlckludm9jYXRpb24oaGFuZGxlcikge1xuXHRyZXR1cm4gZ2V0V29ya2VyUmVzcG9uZGVyKCkuc3Vic2NyaWJlSW52b2NhdGlvbnMoaGFuZGxlcik7XG59XG5mdW5jdGlvbiBjcmVhdGVIb3N0UHJveHkoaG9zdENoYW5uZWwgPSBcImhvc3RcIiwgYmFzZVBhdGggPSBbXSkge1xuXHRyZXR1cm4gZ2V0V29ya2VySW52b2tlcigpLmNyZWF0ZVByb3h5KGhvc3RDaGFubmVsLCBiYXNlUGF0aCk7XG59XG5mdW5jdGlvbiBpbXBvcnRJbkhvc3QodXJsLCBob3N0Q2hhbm5lbCA9IFwiaG9zdFwiKSB7XG5cdHJldHVybiBnZXRXb3JrZXJJbnZva2VyKCkuaW1wb3J0TW9kdWxlKGhvc3RDaGFubmVsLCB1cmwpO1xufVxudmFyIGN0eCA9IGdldFdvcmtlckNvbnRleHQoeyBuYW1lOiBcIndvcmtlclwiIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9vYnNlcnZhYmxlL0Nocm9tZU9ic2VydmFibGUudHNcbnZhciBCYXNlQ2hyb21lT2JzZXJ2YWJsZSA9IGNsYXNzIHtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfbGlzdGVuaW5nID0gZmFsc2U7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHRjb25zdCBmaXJzdCA9IHRoaXMuX3N1YnMuc2l6ZSA9PT0gMDtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdGlmIChmaXJzdCAmJiAhdGhpcy5fbGlzdGVuaW5nKSB0aGlzLl9hY3RpdmF0ZSgpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCAmJiB0aGlzLl9saXN0ZW5pbmcpIHRoaXMuX2RlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdF9kZWFjdGl2YXRlKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBudWxsO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IGZhbHNlO1xuXHR9XG5cdF9kaXNwYXRjaCh2YWx1ZSkge1xuXHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0cy5uZXh0Py4odmFsdWUpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHR9XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdHRoaXMuX2RlYWN0aXZhdGUoKTtcblx0fVxufTtcbnZhciBDaHJvbWVSdW50aW1lT2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgQmFzZUNocm9tZU9ic2VydmFibGUge1xuXHRfaGFuZGxlcjtcblx0X29wdGlvbnM7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y29uc3RydWN0b3IoX2hhbmRsZXIsIF9vcHRpb25zID0ge30pIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX2hhbmRsZXIgPSBfaGFuZGxlcjtcblx0XHR0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG5cdH1cblx0c2VuZChtc2cpIHtcblx0XHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybjtcblx0XHRjb25zdCB7IF9zZW5kZXIsIF90YWJJZCwgX2ZyYW1lSWQsIHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKGRhdGEpO1xuXHR9XG5cdHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdCxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHsgX3NlbmRlciwgX3RhYklkLCBfZnJhbWVJZCwgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSB7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWRcblx0XHRcdH07XG5cdFx0XHRjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZShkYXRhLCAocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0aWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikgcmVqZWN0KG5ldyBFcnJvcihjaHJvbWUucnVudGltZS5sYXN0RXJyb3IubWVzc2FnZSkpO1xuXHRcdFx0XHRlbHNlIHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShyZXFJZCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZyB8fCB0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUucnVudGltZSkgcmV0dXJuO1xuXHRcdGNvbnN0IGxpc3RlbmVyID0gKG1lc3NhZ2UsIHNlbmRlciwgc2VuZFJlc3BvbnNlKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fb3B0aW9ucy5maWx0ZXJTZW5kZXIgJiYgIXRoaXMuX29wdGlvbnMuZmlsdGVyU2VuZGVyKHNlbmRlcikpIHJldHVybiBmYWxzZTtcblx0XHRcdGlmICh0aGlzLl9vcHRpb25zLmZpbHRlck1lc3NhZ2UgJiYgIXRoaXMuX29wdGlvbnMuZmlsdGVyTWVzc2FnZShtZXNzYWdlKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdFx0Li4ubWVzc2FnZSxcblx0XHRcdFx0aWQ6IG1lc3NhZ2UuaWQgPz8gVVVJRHY0KCksXG5cdFx0XHRcdF9zZW5kZXI6IHNlbmRlcixcblx0XHRcdFx0X3RhYklkOiBzZW5kZXIudGFiPy5pZCxcblx0XHRcdFx0X2ZyYW1lSWQ6IHNlbmRlci5mcmFtZUlkXG5cdFx0XHR9O1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIGRhdGEucmVxSWQpIHtcblx0XHRcdFx0Y29uc3QgcCA9IHRoaXMuX3BlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdHAucmVzb2x2ZShkYXRhLnBheWxvYWQpO1xuXHRcdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5faGFuZGxlcikge1xuXHRcdFx0XHRjb25zdCByZXNwb25kID0gKHJlc3VsdCkgPT4gc2VuZFJlc3BvbnNlKHJlc3VsdCk7XG5cdFx0XHRcdGNvbnN0IHN1YnNjcmliZXIgPSB7XG5cdFx0XHRcdFx0bmV4dDogKHYpID0+IHRoaXMuX2Rpc3BhdGNoKHYpLFxuXHRcdFx0XHRcdGVycm9yOiAoKSA9PiB7fSxcblx0XHRcdFx0XHRjb21wbGV0ZTogKCkgPT4ge30sXG5cdFx0XHRcdFx0c2lnbmFsOiBuZXcgQWJvcnRDb250cm9sbGVyKCkuc2lnbmFsLFxuXHRcdFx0XHRcdGFjdGl2ZTogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5faGFuZGxlcihkYXRhLCByZXNwb25kLCBzdWJzY3JpYmVyKSBpbnN0YW5jZW9mIFByb21pc2UgPyB0cnVlIDogdGhpcy5fb3B0aW9ucy5hc3luY1Jlc3BvbnNlO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fZGlzcGF0Y2goZGF0YSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cbn07XG52YXIgQ2hyb21lVGFic09ic2VydmFibGUgPSBjbGFzcyBleHRlbmRzIEJhc2VDaHJvbWVPYnNlcnZhYmxlIHtcblx0X3RhYklkO1xuXHRfb3B0aW9ucztcblx0Y29uc3RydWN0b3IoX3RhYklkLCBfb3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl90YWJJZCA9IF90YWJJZDtcblx0XHR0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG5cdH1cblx0c2V0VGFiSWQoaWQpIHtcblx0XHR0aGlzLl90YWJJZCA9IGlkO1xuXHR9XG5cdHNlbmQobXNnKSB7XG5cdFx0aWYgKHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS50YWJzIHx8IHRoaXMuX3RhYklkID09IG51bGwpIHJldHVybjtcblx0XHRjb25zdCB7IF9zZW5kZXIsIF90YWJJZCwgX2ZyYW1lSWQsIHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGNocm9tZS50YWJzLnNlbmRNZXNzYWdlKHRoaXMuX3RhYklkLCBkYXRhKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZyB8fCB0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUucnVudGltZSkgcmV0dXJuO1xuXHRcdGNvbnN0IGxpc3RlbmVyID0gKG1lc3NhZ2UsIHNlbmRlcikgPT4ge1xuXHRcdFx0aWYgKHRoaXMuX3RhYklkICE9IG51bGwgJiYgc2VuZGVyLnRhYj8uaWQgIT09IHRoaXMuX3RhYklkKSByZXR1cm47XG5cdFx0XHRpZiAodGhpcy5fb3B0aW9ucy5maWx0ZXJTZW5kZXIgJiYgIXRoaXMuX29wdGlvbnMuZmlsdGVyU2VuZGVyKHNlbmRlcikpIHJldHVybjtcblx0XHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRcdC4uLm1lc3NhZ2UsXG5cdFx0XHRcdGlkOiBtZXNzYWdlLmlkID8/IFVVSUR2NCgpLFxuXHRcdFx0XHRfc2VuZGVyOiBzZW5kZXIsXG5cdFx0XHRcdF90YWJJZDogc2VuZGVyLnRhYj8uaWQsXG5cdFx0XHRcdF9mcmFtZUlkOiBzZW5kZXIuZnJhbWVJZFxuXHRcdFx0fTtcblx0XHRcdHRoaXMuX2Rpc3BhdGNoKGRhdGEpO1xuXHRcdH07XG5cdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gKCkgPT4gY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG59O1xudmFyIENocm9tZVBvcnRPYnNlcnZhYmxlID0gY2xhc3MgZXh0ZW5kcyBCYXNlQ2hyb21lT2JzZXJ2YWJsZSB7XG5cdF9wb3J0TmFtZTtcblx0X3RhYklkO1xuXHRfcG9ydCA9IG51bGw7XG5cdF9pbmZvID0gbnVsbDtcblx0Y29uc3RydWN0b3IoX3BvcnROYW1lLCBfdGFiSWQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX3BvcnROYW1lID0gX3BvcnROYW1lO1xuXHRcdHRoaXMuX3RhYklkID0gX3RhYklkO1xuXHR9XG5cdGNvbm5lY3QoKSB7XG5cdFx0aWYgKHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS5ydW50aW1lKSByZXR1cm47XG5cdFx0dGhpcy5fcG9ydCA9IHRoaXMuX3RhYklkICE9IG51bGwgPyBjaHJvbWUudGFicy5jb25uZWN0KHRoaXMuX3RhYklkLCB7IG5hbWU6IHRoaXMuX3BvcnROYW1lIH0pIDogY2hyb21lLnJ1bnRpbWUuY29ubmVjdCh7IG5hbWU6IHRoaXMuX3BvcnROYW1lIH0pO1xuXHRcdHRoaXMuX2luZm8gPSB7XG5cdFx0XHRuYW1lOiB0aGlzLl9wb3J0TmFtZSxcblx0XHRcdHRhYklkOiB0aGlzLl90YWJJZFxuXHRcdH07XG5cdFx0dGhpcy5fc2V0dXBMaXN0ZW5lcnMoKTtcblx0fVxuXHRzZW5kKG1zZykge1xuXHRcdGlmICghdGhpcy5fcG9ydCkgcmV0dXJuO1xuXHRcdGNvbnN0IHsgX3NlbmRlciwgX3RhYklkLCBfZnJhbWVJZCwgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0dGhpcy5fcG9ydC5wb3N0TWVzc2FnZShkYXRhKTtcblx0fVxuXHRfc2V0dXBMaXN0ZW5lcnMoKSB7XG5cdFx0aWYgKCF0aGlzLl9wb3J0KSByZXR1cm47XG5cdFx0dGhpcy5fcG9ydC5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIoKG1zZykgPT4gdGhpcy5fZGlzcGF0Y2goe1xuXHRcdFx0Li4ubXNnLFxuXHRcdFx0aWQ6IG1zZy5pZCA/PyBVVUlEdjQoKVxuXHRcdH0pKTtcblx0XHR0aGlzLl9wb3J0Lm9uRGlzY29ubmVjdC5hZGRMaXN0ZW5lcigoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHRcdHRoaXMuX3BvcnQgPSBudWxsO1xuXHRcdH0pO1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAoIXRoaXMuX3BvcnQpIHRoaXMuY29ubmVjdCgpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cblx0X2RlYWN0aXZhdGUoKSB7XG5cdFx0dGhpcy5fcG9ydD8uZGlzY29ubmVjdCgpO1xuXHRcdHRoaXMuX3BvcnQgPSBudWxsO1xuXHRcdHN1cGVyLl9kZWFjdGl2YXRlKCk7XG5cdH1cblx0Z2V0IHBvcnRJbmZvKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbmZvO1xuXHR9XG5cdGdldCBpc0Nvbm5lY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcG9ydCAhPSBudWxsO1xuXHR9XG59O1xudmFyIENocm9tZUV4dGVybmFsT2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgQmFzZUNocm9tZU9ic2VydmFibGUge1xuXHRfZXh0ZW5zaW9uSWQ7XG5cdGNvbnN0cnVjdG9yKF9leHRlbnNpb25JZCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fZXh0ZW5zaW9uSWQgPSBfZXh0ZW5zaW9uSWQ7XG5cdH1cblx0c2VuZChtc2cpIHtcblx0XHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybjtcblx0XHRjb25zdCB7IF9zZW5kZXIsIF90YWJJZCwgX2ZyYW1lSWQsIHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGlmICh0aGlzLl9leHRlbnNpb25JZCkgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UodGhpcy5fZXh0ZW5zaW9uSWQsIGRhdGEpO1xuXHRcdGVsc2UgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoZGF0YSk7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcgfHwgdHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWU/Lm9uTWVzc2FnZUV4dGVybmFsKSByZXR1cm47XG5cdFx0Y29uc3QgbGlzdGVuZXIgPSAobWVzc2FnZSwgc2VuZGVyKSA9PiB7XG5cdFx0XHR0aGlzLl9kaXNwYXRjaCh7XG5cdFx0XHRcdC4uLm1lc3NhZ2UsXG5cdFx0XHRcdGlkOiBtZXNzYWdlLmlkID8/IFVVSUR2NCgpLFxuXHRcdFx0XHRfc2VuZGVyOiBzZW5kZXJcblx0XHRcdH0pO1xuXHRcdH07XG5cdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlRXh0ZXJuYWwuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbC5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUNocm9tZVJlcXVlc3RIYW5kbGVyKGNoYW5uZWxOYW1lLCBoYW5kbGVycykge1xuXHRyZXR1cm4gYXN5bmMgKGRhdGEsIHJlc3BvbmQsIHN1YnNjcmliZXIpID0+IHtcblx0XHRpZiAoZGF0YS50eXBlICE9PSBcInJlcXVlc3RcIikge1xuXHRcdFx0c3Vic2NyaWJlci5uZXh0KGRhdGEpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBhY3Rpb24gPSBkYXRhLnBheWxvYWQ/LmFjdGlvbjtcblx0XHRpZiAoYWN0aW9uICYmIGhhbmRsZXJzW2FjdGlvbl0pIHRyeSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyc1thY3Rpb25dKGRhdGEucGF5bG9hZD8uYXJncyA/PyBbXSwgZGF0YSk7XG5cdFx0XHRyZXNwb25kKHtcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHRjaGFubmVsOiBkYXRhLnNlbmRlcixcblx0XHRcdFx0c2VuZGVyOiBjaGFubmVsTmFtZSxcblx0XHRcdFx0cmVxSWQ6IGRhdGEucmVxSWQsXG5cdFx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdFx0cGF5bG9hZDogeyByZXN1bHQgfSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0cmVzcG9uZCh7XG5cdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0Y2hhbm5lbDogZGF0YS5zZW5kZXIsXG5cdFx0XHRcdHNlbmRlcjogY2hhbm5lbE5hbWUsXG5cdFx0XHRcdHJlcUlkOiBkYXRhLnJlcUlkLFxuXHRcdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHsgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRlbHNlIHN1YnNjcmliZXIubmV4dChkYXRhKTtcblx0fTtcbn1cbnZhciBDaHJvbWVPYnNlcnZhYmxlRmFjdG9yeSA9IHtcblx0cnVudGltZTogKGhhbmRsZXIsIG9wdGlvbnMpID0+IG5ldyBDaHJvbWVSdW50aW1lT2JzZXJ2YWJsZShoYW5kbGVyLCBvcHRpb25zKSxcblx0dGFiczogKHRhYklkLCBvcHRpb25zKSA9PiBuZXcgQ2hyb21lVGFic09ic2VydmFibGUodGFiSWQsIG9wdGlvbnMpLFxuXHRwb3J0OiAobmFtZSwgdGFiSWQpID0+IG5ldyBDaHJvbWVQb3J0T2JzZXJ2YWJsZShuYW1lLCB0YWJJZCksXG5cdGV4dGVybmFsOiAoZXh0ZW5zaW9uSWQpID0+IG5ldyBDaHJvbWVFeHRlcm5hbE9ic2VydmFibGUoZXh0ZW5zaW9uSWQpXG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9vYnNlcnZhYmxlL1NvY2tldElPT2JzZXJ2YWJsZS50c1xudmFyIFNvY2tldElPT2JzZXJ2YWJsZSA9IGNsYXNzIHtcblx0X3NvY2tldDtcblx0X2NoYW5uZWxOYW1lO1xuXHRfb3B0aW9ucztcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9saXN0ZW5pbmcgPSBmYWxzZTtcblx0X2NsZWFudXBzID0gW107XG5cdF9ldmVudHM7XG5cdF9kZWZhdWx0RXZlbnQ7XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRjb25zdHJ1Y3Rvcihfc29ja2V0LCBfY2hhbm5lbE5hbWUsIF9vcHRpb25zID0ge30pIHtcblx0XHR0aGlzLl9zb2NrZXQgPSBfc29ja2V0O1xuXHRcdHRoaXMuX2NoYW5uZWxOYW1lID0gX2NoYW5uZWxOYW1lO1xuXHRcdHRoaXMuX29wdGlvbnMgPSBfb3B0aW9ucztcblx0XHR0aGlzLl9ldmVudHMgPSBfb3B0aW9ucy5ldmVudHMgPz8gW1wibWVzc2FnZVwiLCBcImNoYW5uZWxcIl07XG5cdFx0dGhpcy5fZGVmYXVsdEV2ZW50ID0gX29wdGlvbnMuZGVmYXVsdEV2ZW50ID8/IFwibWVzc2FnZVwiO1xuXHRcdGlmIChfb3B0aW9ucy5hdXRvQ29ubmVjdCAhPT0gZmFsc2UpIHRoaXMuX3NvY2tldC5jb25uZWN0Py4oKTtcblx0fVxuXHRzZW5kKG1zZywgZXZlbnQpIHtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZSwgYWNrLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0dGhpcy5fc29ja2V0LmVtaXQoZXZlbnQgPz8gbXNnLmV2ZW50ID8/IHRoaXMuX2RlZmF1bHRFdmVudCwgZGF0YSk7XG5cdH1cblx0ZW1pdChldmVudCwgZGF0YSkge1xuXHRcdHRoaXMuX3NvY2tldC5lbWl0KGV2ZW50LCBkYXRhKTtcblx0fVxuXHRyZXF1ZXN0KG1zZywgZXZlbnQpIHtcblx0XHRjb25zdCByZXFJZCA9IG1zZy5yZXFJZCA/PyBVVUlEdjQoKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5fcGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5fcGVuZGluZy5oYXMocmVxSWQpKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUmVxdWVzdCB0aW1lb3V0XCIpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgM2U0KTtcblx0XHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlLCBhY2ssIC4uLmRhdGEgfSA9IHtcblx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRyZXFJZFxuXHRcdFx0fTtcblx0XHRcdHRoaXMuX3NvY2tldC5lbWl0KGV2ZW50ID8/IHRoaXMuX2RlZmF1bHRFdmVudCwgZGF0YSwgKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0Y29uc3QgZmlyc3QgPSB0aGlzLl9zdWJzLnNpemUgPT09IDA7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRpZiAoZmlyc3QgJiYgIXRoaXMuX2xpc3RlbmluZykgdGhpcy5fYWN0aXZhdGUoKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xvc2VkOiBmYWxzZSxcblx0XHRcdHVuc3Vic2NyaWJlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3N1YnMuZGVsZXRlKG9icyk7XG5cdFx0XHRcdGlmICh0aGlzLl9zdWJzLnNpemUgPT09IDAgJiYgdGhpcy5fbGlzdGVuaW5nKSB0aGlzLl9kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdGZvciAoY29uc3QgZXZlbnQgb2YgdGhpcy5fZXZlbnRzKSB7XG5cdFx0XHRjb25zdCBoYW5kbGVyID0gKGRhdGEsIGFjaykgPT4ge1xuXHRcdFx0XHRjb25zdCBtc2cgPSB7XG5cdFx0XHRcdFx0Li4udHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgPyBkYXRhIDogeyBwYXlsb2FkOiBkYXRhIH0sXG5cdFx0XHRcdFx0aWQ6IGRhdGE/LmlkID8/IFVVSUR2NCgpLFxuXHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdGFja1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAobXNnLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBtc2cucmVxSWQpIHtcblx0XHRcdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQobXNnLnJlcUlkKTtcblx0XHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdFx0cC5yZXNvbHZlKG1zZy5wYXlsb2FkKTtcblx0XHRcdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKG1zZy5yZXFJZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRcdHMubmV4dD8uKG1zZyk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR0aGlzLl9zb2NrZXQub24oZXZlbnQsIGhhbmRsZXIpO1xuXHRcdFx0dGhpcy5fY2xlYW51cHMucHVzaCgoKSA9PiB0aGlzLl9zb2NrZXQub2ZmKGV2ZW50LCBoYW5kbGVyKSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9uQ29ubmVjdCA9ICgpID0+IHRoaXMuX3N0YXRlLm5leHQoXCJjb25uZWN0ZWRcIik7XG5cdFx0Y29uc3Qgb25EaXNjb25uZWN0ID0gKCkgPT4gdGhpcy5fc3RhdGUubmV4dChcImRpc2Nvbm5lY3RlZFwiKTtcblx0XHRjb25zdCBvbkVycm9yID0gKGVycikgPT4ge1xuXHRcdFx0dGhpcy5fc3RhdGUubmV4dChcImVycm9yXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyKSkpO1xuXHRcdH07XG5cdFx0dGhpcy5fc29ja2V0Lm9uKFwiY29ubmVjdFwiLCBvbkNvbm5lY3QpO1xuXHRcdHRoaXMuX3NvY2tldC5vbihcImRpc2Nvbm5lY3RcIiwgb25EaXNjb25uZWN0KTtcblx0XHR0aGlzLl9zb2NrZXQub24oXCJlcnJvclwiLCBvbkVycm9yKTtcblx0XHR0aGlzLl9jbGVhbnVwcy5wdXNoKCgpID0+IHRoaXMuX3NvY2tldC5vZmYoXCJjb25uZWN0XCIsIG9uQ29ubmVjdCksICgpID0+IHRoaXMuX3NvY2tldC5vZmYoXCJkaXNjb25uZWN0XCIsIG9uRGlzY29ubmVjdCksICgpID0+IHRoaXMuX3NvY2tldC5vZmYoXCJlcnJvclwiLCBvbkVycm9yKSk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxuXHRfZGVhY3RpdmF0ZSgpIHtcblx0XHR0aGlzLl9jbGVhbnVwcy5mb3JFYWNoKChmbikgPT4gZm4oKSk7XG5cdFx0dGhpcy5fY2xlYW51cHMgPSBbXTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSBmYWxzZTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHR0aGlzLl9zdWJzLmNsZWFyKCk7XG5cdFx0dGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHRcdHRoaXMuX3NvY2tldC5kaXNjb25uZWN0Py4oKTtcblx0fVxuXHRnZXQgc29ja2V0KCkge1xuXHRcdHJldHVybiB0aGlzLl9zb2NrZXQ7XG5cdH1cblx0Z2V0IGNoYW5uZWxOYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsTmFtZTtcblx0fVxuXHRnZXQgaXNDb25uZWN0ZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NvY2tldC5jb25uZWN0ZWQgPz8gZmFsc2U7XG5cdH1cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZTtcblx0fVxufTtcbnZhciBTb2NrZXRJT1Jvb21PYnNlcnZhYmxlID0gY2xhc3Mge1xuXHRfcGFyZW50O1xuXHRfcm9vbU5hbWU7XG5cdF9zdWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0X3BhcmVudFN1YiA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKF9wYXJlbnQsIF9yb29tTmFtZSkge1xuXHRcdHRoaXMuX3BhcmVudCA9IF9wYXJlbnQ7XG5cdFx0dGhpcy5fcm9vbU5hbWUgPSBfcm9vbU5hbWU7XG5cdH1cblx0c2VuZChtc2cpIHtcblx0XHR0aGlzLl9wYXJlbnQuc2VuZCh7XG5cdFx0XHQuLi5tc2csXG5cdFx0XHRyb29tOiB0aGlzLl9yb29tTmFtZVxuXHRcdH0pO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0Y29uc3QgZmlyc3QgPSB0aGlzLl9zdWJzLnNpemUgPT09IDA7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRpZiAoZmlyc3QgJiYgIXRoaXMuX3BhcmVudFN1YikgdGhpcy5fcGFyZW50U3ViID0gdGhpcy5fcGFyZW50LnN1YnNjcmliZSh7XG5cdFx0XHRuZXh0OiAobXNnKSA9PiB7XG5cdFx0XHRcdGlmIChtc2cucm9vbSA9PT0gdGhpcy5fcm9vbU5hbWUgfHwgbXNnLmNoYW5uZWwgPT09IHRoaXMuX3Jvb21OYW1lKSBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdFx0XHRzLm5leHQ/Lihtc2cpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3I6IChlKSA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSBzLmVycm9yPy4oZSk7XG5cdFx0XHR9LFxuXHRcdFx0Y29tcGxldGU6ICgpID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuY29tcGxldGU/LigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCkge1xuXHRcdFx0XHRcdHRoaXMuX3BhcmVudFN1Yj8udW5zdWJzY3JpYmUoKTtcblx0XHRcdFx0XHR0aGlzLl9wYXJlbnRTdWIgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRnZXQgcm9vbU5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3Jvb21OYW1lO1xuXHR9XG59O1xuZnVuY3Rpb24gY3JlYXRlU29ja2V0UmVxdWVzdEhhbmRsZXIoY2hhbm5lbE5hbWUsIGhhbmRsZXJzKSB7XG5cdHJldHVybiBhc3luYyAoZGF0YSkgPT4ge1xuXHRcdGlmIChkYXRhLnR5cGUgIT09IFwicmVxdWVzdFwiIHx8ICFkYXRhLmFjaykgcmV0dXJuO1xuXHRcdGNvbnN0IGFjdGlvbiA9IGRhdGEucGF5bG9hZD8uYWN0aW9uO1xuXHRcdGlmIChhY3Rpb24gJiYgaGFuZGxlcnNbYWN0aW9uXSkgdHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXJzW2FjdGlvbl0oZGF0YS5wYXlsb2FkPy5hcmdzID8/IFtdLCBkYXRhKTtcblx0XHRcdGRhdGEuYWNrKHtcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHRjaGFubmVsOiBkYXRhLnNlbmRlcixcblx0XHRcdFx0c2VuZGVyOiBjaGFubmVsTmFtZSxcblx0XHRcdFx0cmVxSWQ6IGRhdGEucmVxSWQsXG5cdFx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdFx0cGF5bG9hZDogeyByZXN1bHQgfSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0ZGF0YS5hY2soe1xuXHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdGNoYW5uZWw6IGRhdGEuc2VuZGVyLFxuXHRcdFx0XHRzZW5kZXI6IGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRyZXFJZDogZGF0YS5yZXFJZCxcblx0XHRcdFx0dHlwZTogXCJyZXNwb25zZVwiLFxuXHRcdFx0XHRwYXlsb2FkOiB7IGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikgfSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG59XG52YXIgU29ja2V0SU9PYnNlcnZhYmxlRmFjdG9yeSA9IHtcblx0Y3JlYXRlOiAoc29ja2V0LCBjaGFubmVsTmFtZSwgb3B0aW9ucykgPT4gbmV3IFNvY2tldElPT2JzZXJ2YWJsZShzb2NrZXQsIGNoYW5uZWxOYW1lLCBvcHRpb25zKSxcblx0cm9vbTogKHBhcmVudCwgcm9vbU5hbWUpID0+IG5ldyBTb2NrZXRJT1Jvb21PYnNlcnZhYmxlKHBhcmVudCwgcm9vbU5hbWUpXG59O1xuZnVuY3Rpb24gY3JlYXRlU29ja2V0T2JzZXJ2YWJsZShzb2NrZXQsIGNoYW5uZWxOYW1lLCBvcHRpb25zKSB7XG5cdHJldHVybiBuZXcgU29ja2V0SU9PYnNlcnZhYmxlKHNvY2tldCwgY2hhbm5lbE5hbWUsIG9wdGlvbnMpO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvU2hhcmVkV29ya2VyVHJhbnNwb3J0LnRzXG52YXIgU2hhcmVkV29ya2VyQ2xpZW50ID0gY2xhc3Mge1xuXHRfc2NyaXB0VXJsO1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9vcHRpb25zO1xuXHRfd29ya2VyID0gbnVsbDtcblx0X3BvcnQgPSBudWxsO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2xpc3RlbmluZyA9IGZhbHNlO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9wb3J0SWQgPSBVVUlEdjQoKTtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdGNvbnN0cnVjdG9yKF9zY3JpcHRVcmwsIF9jaGFubmVsTmFtZSwgX29wdGlvbnMgPSB7fSkge1xuXHRcdHRoaXMuX3NjcmlwdFVybCA9IF9zY3JpcHRVcmw7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuXHRcdGlmIChfb3B0aW9ucy5hdXRvQ29ubmVjdCAhPT0gZmFsc2UpIHRoaXMuY29ubmVjdCgpO1xuXHR9XG5cdGNvbm5lY3QoKSB7XG5cdFx0aWYgKHRoaXMuX3dvcmtlcikgcmV0dXJuO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLl93b3JrZXIgPSBuZXcgU2hhcmVkV29ya2VyKHRoaXMuX3NjcmlwdFVybCwge1xuXHRcdFx0XHRuYW1lOiB0aGlzLl9vcHRpb25zLm5hbWUsXG5cdFx0XHRcdGNyZWRlbnRpYWxzOiB0aGlzLl9vcHRpb25zLmNyZWRlbnRpYWxzLFxuXHRcdFx0XHR0eXBlOiB0aGlzLl9vcHRpb25zLnR5cGVcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5fcG9ydCA9IHRoaXMuX3dvcmtlci5wb3J0O1xuXHRcdFx0dGhpcy5fc2V0dXBMaXN0ZW5lcnMoKTtcblx0XHRcdHRoaXMuX3BvcnQuc3RhcnQoKTtcblx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjb25uZWN0aW5nXCIpO1xuXHRcdFx0dGhpcy5zZW5kKHtcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdFx0c2VuZGVyOiB0aGlzLl9wb3J0SWQsXG5cdFx0XHRcdHR5cGU6IFwic2lnbmFsXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRhY3Rpb246IFwiY29ubmVjdFwiLFxuXHRcdFx0XHRcdHBvcnRJZDogdGhpcy5fcG9ydElkXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJlcnJvclwiKTtcblx0XHRcdHRocm93IGU7XG5cdFx0fVxuXHR9XG5cdHNlbmQobXNnLCB0cmFuc2Zlcikge1xuXHRcdGlmICghdGhpcy5fcG9ydCkgcmV0dXJuO1xuXHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0dGhpcy5fcG9ydC5wb3N0TWVzc2FnZSh7XG5cdFx0XHQuLi5kYXRhLFxuXHRcdFx0cG9ydElkOiB0aGlzLl9wb3J0SWRcblx0XHR9LCB0cmFuc2ZlciA/PyBbXSk7XG5cdH1cblx0cmVxdWVzdChtc2cpIHtcblx0XHRjb25zdCByZXFJZCA9IG1zZy5yZXFJZCA/PyBVVUlEdjQoKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5fcGVuZGluZy5oYXMocmVxSWQpKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUmVxdWVzdCB0aW1lb3V0XCIpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgM2U0KTtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmU6ICh2KSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdHJlc29sdmUodik7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlamVjdDogKGUpID0+IHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zZW5kKHtcblx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRyZXFJZCxcblx0XHRcdFx0dHlwZTogXCJyZXF1ZXN0XCJcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdGJyb2FkY2FzdChtc2csIHRyYW5zZmVyKSB7XG5cdFx0dGhpcy5zZW5kKHtcblx0XHRcdC4uLm1zZyxcblx0XHRcdGJyb2FkY2FzdDogdHJ1ZVxuXHRcdH0sIHRyYW5zZmVyKTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0aWYgKCF0aGlzLl9saXN0ZW5pbmcpIHRoaXMuX2FjdGl2YXRlKCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0XHRpZiAodGhpcy5fc3Vicy5zaXplID09PSAwKSB0aGlzLl9kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRfc2V0dXBMaXN0ZW5lcnMoKSB7XG5cdFx0aWYgKCF0aGlzLl9wb3J0KSByZXR1cm47XG5cdFx0Y29uc3QgbXNnSGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0gZS5kYXRhO1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJzaWduYWxcIiAmJiBkYXRhLnBheWxvYWQ/LmFjdGlvbiA9PT0gXCJjb25uZWN0ZWRcIikgdGhpcy5fc3RhdGUubmV4dChcImNvbm5lY3RlZFwiKTtcblx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRcdGNvbnN0IHAgPSB0aGlzLl9wZW5kaW5nLmdldChkYXRhLnJlcUlkKTtcblx0XHRcdFx0aWYgKHApIHtcblx0XHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0XHRpZiAoZGF0YS5wYXlsb2FkPy5lcnJvcikgcC5yZWplY3QobmV3IEVycm9yKGRhdGEucGF5bG9hZC5lcnJvcikpO1xuXHRcdFx0XHRcdGVsc2UgcC5yZXNvbHZlKGRhdGEucGF5bG9hZD8ucmVzdWx0ID8/IGRhdGEucGF5bG9hZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/LihkYXRhKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgZXJySGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiZXJyb3JcIik7XG5cdFx0XHRjb25zdCBlcnIgPSAvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiU2hhcmVkV29ya2VyIGVycm9yXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIpO1xuXHRcdH07XG5cdFx0dGhpcy5fcG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtc2dIYW5kbGVyKTtcblx0XHR0aGlzLl9wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlZXJyb3JcIiwgZXJySGFuZGxlcik7XG5cdFx0dGhpcy5fY2xlYW51cCA9ICgpID0+IHtcblx0XHRcdHRoaXMuX3BvcnQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0dGhpcy5fcG9ydD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VlcnJvclwiLCBlcnJIYW5kbGVyKTtcblx0XHR9O1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG5cdF9kZWFjdGl2YXRlKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBudWxsO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IGZhbHNlO1xuXHR9XG5cdGRpc2Nvbm5lY3QoKSB7XG5cdFx0dGhpcy5zZW5kKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9wb3J0SWQsXG5cdFx0XHR0eXBlOiBcInNpZ25hbFwiLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRhY3Rpb246IFwiZGlzY29ubmVjdFwiLFxuXHRcdFx0XHRwb3J0SWQ6IHRoaXMuX3BvcnRJZFxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuX2RlYWN0aXZhdGUoKTtcblx0XHR0aGlzLl9wb3J0Py5jbG9zZSgpO1xuXHRcdHRoaXMuX3BvcnQgPSBudWxsO1xuXHRcdHRoaXMuX3dvcmtlciA9IG51bGw7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImRpc2Nvbm5lY3RlZFwiKTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHR0aGlzLl9zdWJzLmNsZWFyKCk7XG5cdFx0dGhpcy5kaXNjb25uZWN0KCk7XG5cdH1cblx0Z2V0IHBvcnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnQ7XG5cdH1cblx0Z2V0IHBvcnRJZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcG9ydElkO1xuXHR9XG5cdGdldCBpc0Nvbm5lY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWUoKSA9PT0gXCJjb25uZWN0ZWRcIjtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbE5hbWU7XG5cdH1cbn07XG52YXIgU2hhcmVkV29ya2VySG9zdCA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfcG9ydHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRjb25zdHJ1Y3RvcihfY2hhbm5lbE5hbWUpIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9zZXR1cEdsb2JhbEhhbmRsZXIoKTtcblx0fVxuXHRfc2V0dXBHbG9iYWxIYW5kbGVyKCkge1xuXHRcdGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBcIm9uY29ubmVjdFwiIGluIHNlbGYpIHtcblx0XHRcdHNlbGYub25jb25uZWN0ID0gKGUpID0+IHtcblx0XHRcdFx0Y29uc3QgcG9ydCA9IGUucG9ydHNbMF07XG5cdFx0XHRcdGNvbnN0IHBvcnRJZCA9IFVVSUR2NCgpO1xuXHRcdFx0XHR0aGlzLl9yZWdpc3RlclBvcnQocG9ydElkLCBwb3J0KTtcblx0XHRcdH07XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwicmVhZHlcIik7XG5cdFx0fVxuXHR9XG5cdF9yZWdpc3RlclBvcnQocG9ydElkLCBwb3J0KSB7XG5cdFx0Y29uc3QgaW5mbyA9IHtcblx0XHRcdGlkOiBwb3J0SWQsXG5cdFx0XHRjb25uZWN0ZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdGxhc3RTZWVuOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHRwb3J0Lm9ubWVzc2FnZSA9IChlKSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0gZS5kYXRhO1xuXHRcdFx0aW5mby5sYXN0U2VlbiA9IERhdGUubm93KCk7XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInNpZ25hbFwiKSB7XG5cdFx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmFjdGlvbiA9PT0gXCJjb25uZWN0XCIpIHtcblx0XHRcdFx0XHRjb25zdCByZWFsUG9ydElkID0gZGF0YS5wYXlsb2FkLnBvcnRJZCB8fCBwb3J0SWQ7XG5cdFx0XHRcdFx0dGhpcy5fcG9ydHMuZGVsZXRlKHBvcnRJZCk7XG5cdFx0XHRcdFx0aW5mby5pZCA9IHJlYWxQb3J0SWQ7XG5cdFx0XHRcdFx0dGhpcy5fcG9ydHMuc2V0KHJlYWxQb3J0SWQsIHtcblx0XHRcdFx0XHRcdHBvcnQsXG5cdFx0XHRcdFx0XHRpbmZvXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cG9ydC5wb3N0TWVzc2FnZSh7XG5cdFx0XHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdFx0XHRcdHNlbmRlcjogXCJob3N0XCIsXG5cdFx0XHRcdFx0XHR0eXBlOiBcInNpZ25hbFwiLFxuXHRcdFx0XHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRcdFx0XHRhY3Rpb246IFwiY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0XHRcdHBvcnRJZDogcmVhbFBvcnRJZFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5wYXlsb2FkPy5hY3Rpb24gPT09IFwiZGlzY29ubmVjdFwiKSB7XG5cdFx0XHRcdFx0dGhpcy5fdW5yZWdpc3RlclBvcnQoZGF0YS5wb3J0SWQgPz8gcG9ydElkKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChkYXRhLmJyb2FkY2FzdCkgdGhpcy5icm9hZGNhc3QoZGF0YSwgZGF0YS5wb3J0SWQgPz8gcG9ydElkKTtcblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/Lih7XG5cdFx0XHRcdFx0Li4uZGF0YSxcblx0XHRcdFx0XHRwb3J0SWQ6IGRhdGEucG9ydElkID8/IHBvcnRJZFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0cG9ydC5vbm1lc3NhZ2VlcnJvciA9IChlKSA9PiB7XG5cdFx0XHRjb25zdCBlcnIgPSAvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUG9ydCBtZXNzYWdlIGVycm9yXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIpO1xuXHRcdH07XG5cdFx0cG9ydC5zdGFydCgpO1xuXHRcdHRoaXMuX3BvcnRzLnNldChwb3J0SWQsIHtcblx0XHRcdHBvcnQsXG5cdFx0XHRpbmZvXG5cdFx0fSk7XG5cdH1cblx0X3VucmVnaXN0ZXJQb3J0KHBvcnRJZCkge1xuXHRcdGNvbnN0IGVudHJ5ID0gdGhpcy5fcG9ydHMuZ2V0KHBvcnRJZCk7XG5cdFx0aWYgKGVudHJ5KSB7XG5cdFx0XHRlbnRyeS5wb3J0LmNsb3NlKCk7XG5cdFx0XHR0aGlzLl9wb3J0cy5kZWxldGUocG9ydElkKTtcblx0XHR9XG5cdH1cblx0c2VuZChwb3J0SWQsIG1zZywgdHJhbnNmZXIpIHtcblx0XHRjb25zdCBlbnRyeSA9IHRoaXMuX3BvcnRzLmdldChwb3J0SWQpO1xuXHRcdGlmICghZW50cnkpIHJldHVybjtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGVudHJ5LnBvcnQucG9zdE1lc3NhZ2UoZGF0YSwgdHJhbnNmZXIgPz8gW10pO1xuXHR9XG5cdGJyb2FkY2FzdChtc2csIGV4Y2x1ZGVQb3J0SWQpIHtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGZvciAoY29uc3QgW2lkLCBlbnRyeV0gb2YgdGhpcy5fcG9ydHMpIGlmIChpZCAhPT0gZXhjbHVkZVBvcnRJZCkgZW50cnkucG9ydC5wb3N0TWVzc2FnZSh7XG5cdFx0XHQuLi5kYXRhLFxuXHRcdFx0YnJvYWRjYXN0OiB0cnVlXG5cdFx0fSk7XG5cdH1cblx0cmVzcG9uZChtc2csIHJlc3VsdCwgdHJhbnNmZXIpIHtcblx0XHRpZiAoIW1zZy5wb3J0SWQgfHwgIW1zZy5yZXFJZCkgcmV0dXJuO1xuXHRcdHRoaXMuc2VuZChtc2cucG9ydElkLCB7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBtc2cuc2VuZGVyLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdHJlcUlkOiBtc2cucmVxSWQsXG5cdFx0XHRwYXlsb2FkOiB7IHJlc3VsdCB9XG5cdFx0fSwgdHJhbnNmZXIpO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xvc2VkOiBmYWxzZSxcblx0XHRcdHVuc3Vic2NyaWJlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3N1YnMuZGVsZXRlKG9icyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRnZXRQb3J0cygpIHtcblx0XHRjb25zdCByZXN1bHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdGZvciAoY29uc3QgW2lkLCBlbnRyeV0gb2YgdGhpcy5fcG9ydHMpIHJlc3VsdC5zZXQoaWQsIHsgLi4uZW50cnkuaW5mbyB9KTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdGdldCBwb3J0Q291bnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnRzLnNpemU7XG5cdH1cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZTtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxOYW1lO1xuXHR9XG59O1xuZnVuY3Rpb24gY3JlYXRlU2hhcmVkV29ya2VyT2JzZXJ2YWJsZShzY3JpcHRVcmwsIGNoYW5uZWxOYW1lLCBvcHRpb25zKSB7XG5cdHJldHVybiBuZXcgU2hhcmVkV29ya2VyQ2xpZW50KHNjcmlwdFVybCwgY2hhbm5lbE5hbWUsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gY3JlYXRlU2hhcmVkV29ya2VySG9zdE9ic2VydmFibGUoY2hhbm5lbE5hbWUpIHtcblx0cmV0dXJuIG5ldyBTaGFyZWRXb3JrZXJIb3N0KGNoYW5uZWxOYW1lKTtcbn1cbnZhciBTaGFyZWRXb3JrZXJPYnNlcnZhYmxlRmFjdG9yeSA9IHtcblx0Y2xpZW50OiAodXJsLCBuYW1lLCBvcHRzKSA9PiBuZXcgU2hhcmVkV29ya2VyQ2xpZW50KHVybCwgbmFtZSwgb3B0cyksXG5cdGhvc3Q6IChuYW1lKSA9PiBuZXcgU2hhcmVkV29ya2VySG9zdChuYW1lKVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdHJhbnNwb3J0L0F0b21pY3NUcmFuc3BvcnQudHNcbnZhciBjYm9yRW5jb2RlciA9IG51bGw7XG5hc3luYyBmdW5jdGlvbiBnZXRDQk9SRW5jb2RlcigpIHtcblx0aWYgKGNib3JFbmNvZGVyKSByZXR1cm4gY2JvckVuY29kZXI7XG5cdHRyeSB7XG5cdFx0Y29uc3QgY2JvcnggPSBhd2FpdCBpbXBvcnQoXCIuL2Nib3IteC0hfnswMDB9fi5qc1wiKTtcblx0XHRjYm9yRW5jb2RlciA9IHtcblx0XHRcdGVuY29kZTogKHYpID0+IGNib3J4LmVuY29kZSh2KSxcblx0XHRcdGRlY29kZTogKGQpID0+IGNib3J4LmRlY29kZShkKVxuXHRcdH07XG5cdH0gY2F0Y2gge1xuXHRcdGNib3JFbmNvZGVyID0ge1xuXHRcdFx0ZW5jb2RlOiAodikgPT4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHYsIHJlcGxhY2VyKSksXG5cdFx0XHRkZWNvZGU6IChkKSA9PiBKU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShkKSwgcmV2aXZlcilcblx0XHR9O1xuXHR9XG5cdHJldHVybiBjYm9yRW5jb2Rlcjtcbn1cbmZ1bmN0aW9uIHJlcGxhY2VyKF9rZXksIHZhbHVlKSB7XG5cdGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRhVmlldykpIHJldHVybiB7XG5cdFx0X190eXBlZEFycmF5OiB0cnVlLFxuXHRcdHR5cGU6IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUsXG5cdFx0ZGF0YTogQXJyYXkuZnJvbSh2YWx1ZSlcblx0fTtcblx0aWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHJldHVybiB7XG5cdFx0X19hcnJheUJ1ZmZlcjogdHJ1ZSxcblx0XHRkYXRhOiBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KHZhbHVlKSlcblx0fTtcblx0cmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gcmV2aXZlcihfa2V5LCB2YWx1ZSkge1xuXHRpZiAodmFsdWU/Ll9fdHlwZWRBcnJheSkge1xuXHRcdGNvbnN0IFR5cGVkQXJyYXlDdG9yID0gZ2xvYmFsVGhpc1t2YWx1ZS50eXBlXTtcblx0XHRyZXR1cm4gVHlwZWRBcnJheUN0b3IgPyBuZXcgVHlwZWRBcnJheUN0b3IodmFsdWUuZGF0YSkgOiB2YWx1ZS5kYXRhO1xuXHR9XG5cdGlmICh2YWx1ZT8uX19hcnJheUJ1ZmZlcikgcmV0dXJuIG5ldyBVaW50OEFycmF5KHZhbHVlLmRhdGEpLmJ1ZmZlcjtcblx0cmV0dXJuIHZhbHVlO1xufVxudmFyIEhFQURFUl9TSVpFID0gMzI7XG52YXIgTE9DS19PRkZTRVQgPSAwO1xudmFyIFNFUV9PRkZTRVQgPSA0O1xudmFyIFNJWkVfT0ZGU0VUID0gODtcbnZhciBGTEFHU19PRkZTRVQgPSAxMjtcbnZhciBSRUFEWV9PRkZTRVQgPSAxNjtcbnZhciBBQ0tfT0ZGU0VUID0gMjA7XG52YXIgREFUQV9PRkZTRVQgPSBIRUFERVJfU0laRTtcbnZhciBGTEFHX0hBU19UUkFOU0ZFUiA9IDE7XG52YXIgRkxBR19DT01QUkVTU0VEID0gMjtcbnZhciBGTEFHX1JFU1BPTlNFID0gNDtcbnZhciBBdG9taWNzQnVmZmVyID0gY2xhc3Mge1xuXHRfY29uZmlnO1xuXHRfc2hhcmVkQnVmZmVyO1xuXHRfaW50MzJWaWV3O1xuXHRfdWludDhWaWV3O1xuXHRfbWF4RGF0YVNpemU7XG5cdGNvbnN0cnVjdG9yKGJ1ZmZlck9yU2l6ZSA9IDY1NTM2LCBfY29uZmlnID0ge30pIHtcblx0XHR0aGlzLl9jb25maWcgPSBfY29uZmlnO1xuXHRcdGlmICh0eXBlb2YgYnVmZmVyT3JTaXplID09PSBcIm51bWJlclwiKSB0aGlzLl9zaGFyZWRCdWZmZXIgPSBuZXcgU2hhcmVkQXJyYXlCdWZmZXIoYnVmZmVyT3JTaXplKTtcblx0XHRlbHNlIHRoaXMuX3NoYXJlZEJ1ZmZlciA9IGJ1ZmZlck9yU2l6ZTtcblx0XHR0aGlzLl9pbnQzMlZpZXcgPSBuZXcgSW50MzJBcnJheSh0aGlzLl9zaGFyZWRCdWZmZXIpO1xuXHRcdHRoaXMuX3VpbnQ4VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuX3NoYXJlZEJ1ZmZlcik7XG5cdFx0dGhpcy5fbWF4RGF0YVNpemUgPSB0aGlzLl9jb25maWcubWF4TWVzc2FnZVNpemUgPz8gdGhpcy5fc2hhcmVkQnVmZmVyLmJ5dGVMZW5ndGggLSBIRUFERVJfU0laRTtcblx0fVxuXHRhc3luYyB3cml0ZShkYXRhLCBmbGFncyA9IDApIHtcblx0XHRpZiAoZGF0YS5ieXRlTGVuZ3RoID4gdGhpcy5fbWF4RGF0YVNpemUpIHRocm93IG5ldyBFcnJvcihgTWVzc2FnZSB0b28gbGFyZ2U6ICR7ZGF0YS5ieXRlTGVuZ3RofSA+ICR7dGhpcy5fbWF4RGF0YVNpemV9YCk7XG5cdFx0d2hpbGUgKEF0b21pY3MuY29tcGFyZUV4Y2hhbmdlKHRoaXMuX2ludDMyVmlldywgTE9DS19PRkZTRVQgLyA0LCAwLCAxKSAhPT0gMCkgaWYgKCh0aGlzLl9jb25maWcudXNlQXN5bmNXYWl0ICYmIFwid2FpdEFzeW5jXCIgaW4gQXRvbWljcyA/IGF3YWl0IEF0b21pY3Mud2FpdEFzeW5jKHRoaXMuX2ludDMyVmlldywgTE9DS19PRkZTRVQgLyA0LCAxLCB0aGlzLl9jb25maWcud2FpdFRpbWVvdXQgPz8gMTAwKS52YWx1ZSA6IEF0b21pY3Mud2FpdCh0aGlzLl9pbnQzMlZpZXcsIExPQ0tfT0ZGU0VUIC8gNCwgMSwgdGhpcy5fY29uZmlnLndhaXRUaW1lb3V0ID8/IDEwMCkpID09PSBcInRpbWVkLW91dFwiKSBjb250aW51ZTtcblx0XHR0cnkge1xuXHRcdFx0QXRvbWljcy5zdG9yZSh0aGlzLl9pbnQzMlZpZXcsIFNJWkVfT0ZGU0VUIC8gNCwgZGF0YS5ieXRlTGVuZ3RoKTtcblx0XHRcdEF0b21pY3Muc3RvcmUodGhpcy5faW50MzJWaWV3LCBGTEFHU19PRkZTRVQgLyA0LCBmbGFncyk7XG5cdFx0XHR0aGlzLl91aW50OFZpZXcuc2V0KGRhdGEsIERBVEFfT0ZGU0VUKTtcblx0XHRcdEF0b21pY3MuYWRkKHRoaXMuX2ludDMyVmlldywgU0VRX09GRlNFVCAvIDQsIDEpO1xuXHRcdFx0QXRvbWljcy5zdG9yZSh0aGlzLl9pbnQzMlZpZXcsIFJFQURZX09GRlNFVCAvIDQsIDEpO1xuXHRcdFx0QXRvbWljcy5ub3RpZnkodGhpcy5faW50MzJWaWV3LCBSRUFEWV9PRkZTRVQgLyA0KTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRBdG9taWNzLnN0b3JlKHRoaXMuX2ludDMyVmlldywgTE9DS19PRkZTRVQgLyA0LCAwKTtcblx0XHRcdEF0b21pY3Mubm90aWZ5KHRoaXMuX2ludDMyVmlldywgTE9DS19PRkZTRVQgLyA0KTtcblx0XHR9XG5cdH1cblx0YXN5bmMgcmVhZCgpIHtcblx0XHRpZiAoQXRvbWljcy5sb2FkKHRoaXMuX2ludDMyVmlldywgUkVBRFlfT0ZGU0VUIC8gNCkgPT09IDApIHtcblx0XHRcdGlmICgodGhpcy5fY29uZmlnLnVzZUFzeW5jV2FpdCAmJiBcIndhaXRBc3luY1wiIGluIEF0b21pY3MgPyBhd2FpdCBBdG9taWNzLndhaXRBc3luYyh0aGlzLl9pbnQzMlZpZXcsIFJFQURZX09GRlNFVCAvIDQsIDAsIHRoaXMuX2NvbmZpZy53YWl0VGltZW91dCA/PyAxZTMpLnZhbHVlIDogQXRvbWljcy53YWl0KHRoaXMuX2ludDMyVmlldywgUkVBRFlfT0ZGU0VUIC8gNCwgMCwgdGhpcy5fY29uZmlnLndhaXRUaW1lb3V0ID8/IDFlMykpID09PSBcInRpbWVkLW91dFwiKSByZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3Qgc2l6ZSA9IEF0b21pY3MubG9hZCh0aGlzLl9pbnQzMlZpZXcsIFNJWkVfT0ZGU0VUIC8gNCk7XG5cdFx0Y29uc3QgZmxhZ3MgPSBBdG9taWNzLmxvYWQodGhpcy5faW50MzJWaWV3LCBGTEFHU19PRkZTRVQgLyA0KTtcblx0XHRjb25zdCBzZXEgPSBBdG9taWNzLmxvYWQodGhpcy5faW50MzJWaWV3LCBTRVFfT0ZGU0VUIC8gNCk7XG5cdFx0aWYgKHNpemUgPD0gMCB8fCBzaXplID4gdGhpcy5fbWF4RGF0YVNpemUpIHJldHVybiBudWxsO1xuXHRcdGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheShzaXplKTtcblx0XHRkYXRhLnNldCh0aGlzLl91aW50OFZpZXcuc3ViYXJyYXkoREFUQV9PRkZTRVQsIERBVEFfT0ZGU0VUICsgc2l6ZSkpO1xuXHRcdEF0b21pY3Muc3RvcmUodGhpcy5faW50MzJWaWV3LCBSRUFEWV9PRkZTRVQgLyA0LCAwKTtcblx0XHRBdG9taWNzLmFkZCh0aGlzLl9pbnQzMlZpZXcsIEFDS19PRkZTRVQgLyA0LCAxKTtcblx0XHRBdG9taWNzLm5vdGlmeSh0aGlzLl9pbnQzMlZpZXcsIEFDS19PRkZTRVQgLyA0KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZGF0YSxcblx0XHRcdGZsYWdzLFxuXHRcdFx0c2VxXG5cdFx0fTtcblx0fVxuXHRhc3luYyB3YWl0QWNrKGV4cGVjdGVkU2VxKSB7XG5cdFx0Y29uc3QgdGltZW91dCA9IHRoaXMuX2NvbmZpZy53YWl0VGltZW91dCA/PyA1ZTM7XG5cdFx0Y29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuXHRcdHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0KSB7XG5cdFx0XHRjb25zdCBhY2sgPSBBdG9taWNzLmxvYWQodGhpcy5faW50MzJWaWV3LCBBQ0tfT0ZGU0VUIC8gNCk7XG5cdFx0XHRpZiAoYWNrID49IGV4cGVjdGVkU2VxKSByZXR1cm4gdHJ1ZTtcblx0XHRcdGlmICh0aGlzLl9jb25maWcudXNlQXN5bmNXYWl0ICYmIFwid2FpdEFzeW5jXCIgaW4gQXRvbWljcykgYXdhaXQgQXRvbWljcy53YWl0QXN5bmModGhpcy5faW50MzJWaWV3LCBBQ0tfT0ZGU0VUIC8gNCwgYWNrLCAxMDApLnZhbHVlO1xuXHRcdFx0ZWxzZSBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCAxMCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Z2V0IGJ1ZmZlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5fc2hhcmVkQnVmZmVyO1xuXHR9XG5cdGdldCBjdXJyZW50U2VxKCkge1xuXHRcdHJldHVybiBBdG9taWNzLmxvYWQodGhpcy5faW50MzJWaWV3LCBTRVFfT0ZGU0VUIC8gNCk7XG5cdH1cbn07XG52YXIgQXRvbWljc1RyYW5zcG9ydCA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfY29uZmlnO1xuXHRfc2VuZEJ1ZmZlcjtcblx0X3JlY3ZCdWZmZXI7XG5cdF9lbmNvZGVyID0gbnVsbDtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9wb2xsaW5nID0gZmFsc2U7XG5cdF9wb2xsQWJvcnQgPSBudWxsO1xuXHRfd29ya2VySWQgPSBVVUlEdjQoKTtcblx0X2xhc3RTZXEgPSAwO1xuXHRfc3RhdGUgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0Y29uc3RydWN0b3IoX2NoYW5uZWxOYW1lLCBzZW5kQnVmZmVyLCByZWN2QnVmZmVyLCBfY29uZmlnID0ge30pIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9jb25maWcgPSBfY29uZmlnO1xuXHRcdHRoaXMuX3NlbmRCdWZmZXIgPSBzZW5kQnVmZmVyIGluc3RhbmNlb2YgQXRvbWljc0J1ZmZlciA/IHNlbmRCdWZmZXIgOiBuZXcgQXRvbWljc0J1ZmZlcihzZW5kQnVmZmVyLCBfY29uZmlnKTtcblx0XHR0aGlzLl9yZWN2QnVmZmVyID0gcmVjdkJ1ZmZlciBpbnN0YW5jZW9mIEF0b21pY3NCdWZmZXIgPyByZWN2QnVmZmVyIDogbmV3IEF0b21pY3NCdWZmZXIocmVjdkJ1ZmZlciwgX2NvbmZpZyk7XG5cdFx0dGhpcy5faW5pdCgpO1xuXHR9XG5cdGFzeW5jIF9pbml0KCkge1xuXHRcdHRoaXMuX2VuY29kZXIgPSBhd2FpdCBnZXRDQk9SRW5jb2RlcigpO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJyZWFkeVwiKTtcblx0fVxuXHRhc3luYyBzZW5kKG1zZywgdHJhbnNmZXIpIHtcblx0XHRpZiAoIXRoaXMuX2VuY29kZXIpIGF3YWl0IHRoaXMuX2luaXQoKTtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGxldCBmbGFncyA9IDA7XG5cdFx0aWYgKHRyYW5zZmVyPy5sZW5ndGgpIHtcblx0XHRcdGZsYWdzIHw9IEZMQUdfSEFTX1RSQU5TRkVSO1xuXHRcdFx0ZGF0YS5fdHJhbnNmZXJNZXRhID0gdHJhbnNmZXIubWFwKCh0LCBpKSA9PiAoe1xuXHRcdFx0XHRpbmRleDogaSxcblx0XHRcdFx0dHlwZTogdC5jb25zdHJ1Y3Rvci5uYW1lLFxuXHRcdFx0XHR0cmFuc2ZlcnJlZDogdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyICYmIFwidHJhbnNmZXJcIiBpbiB0XG5cdFx0XHR9KSk7XG5cdFx0fVxuXHRcdGNvbnN0IGVuY29kZWQgPSB0aGlzLl9lbmNvZGVyLmVuY29kZShkYXRhKTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmNvbXByZXNzaW9uICYmIGVuY29kZWQubGVuZ3RoID4gMTAyNCkgZmxhZ3MgfD0gRkxBR19DT01QUkVTU0VEO1xuXHRcdGF3YWl0IHRoaXMuX3NlbmRCdWZmZXIud3JpdGUoZW5jb2RlZCwgZmxhZ3MpO1xuXHR9XG5cdGFzeW5jIHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIlJlcXVlc3QgdGltZW91dFwiKSk7XG5cdFx0XHR9LCB0aGlzLl9jb25maWcud2FpdFRpbWVvdXQgPz8gM2U0KTtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmU6ICh2KSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdHJlc29sdmUodik7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlamVjdDogKGUpID0+IHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zZW5kKHtcblx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRyZXFJZCxcblx0XHRcdFx0dHlwZTogXCJyZXF1ZXN0XCJcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRpZiAoIXRoaXMuX3BvbGxpbmcpIHRoaXMuX3N0YXJ0UG9sbGluZygpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCkgdGhpcy5fc3RvcFBvbGxpbmcoKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdGFzeW5jIF9zdGFydFBvbGxpbmcoKSB7XG5cdFx0aWYgKHRoaXMuX3BvbGxpbmcpIHJldHVybjtcblx0XHR0aGlzLl9wb2xsaW5nID0gdHJ1ZTtcblx0XHR0aGlzLl9wb2xsQWJvcnQgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcInBvbGxpbmdcIik7XG5cdFx0d2hpbGUgKHRoaXMuX3BvbGxpbmcgJiYgIXRoaXMuX3BvbGxBYm9ydC5zaWduYWwuYWJvcnRlZCkgdHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX3JlY3ZCdWZmZXIucmVhZCgpO1xuXHRcdFx0aWYgKCFyZXN1bHQpIGNvbnRpbnVlO1xuXHRcdFx0aWYgKHJlc3VsdC5zZXEgPD0gdGhpcy5fbGFzdFNlcSkgY29udGludWU7XG5cdFx0XHR0aGlzLl9sYXN0U2VxID0gcmVzdWx0LnNlcTtcblx0XHRcdGNvbnN0IGRhdGEgPSB0aGlzLl9lbmNvZGVyLmRlY29kZShyZXN1bHQuZGF0YSk7XG5cdFx0XHRkYXRhLnNlcSA9IHJlc3VsdC5zZXE7XG5cdFx0XHRkYXRhLndvcmtlcklkID0gZGF0YS53b3JrZXJJZCA/PyB0aGlzLl93b3JrZXJJZDtcblx0XHRcdGlmIChyZXN1bHQuZmxhZ3MgJiBGTEFHX1JFU1BPTlNFIHx8IGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiKSB7XG5cdFx0XHRcdGlmIChkYXRhLnJlcUlkKSB7XG5cdFx0XHRcdFx0Y29uc3QgcCA9IHRoaXMuX3BlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRcdGlmIChwKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmVycm9yKSBwLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRcdFx0XHRlbHNlIHAucmVzb2x2ZShkYXRhLnBheWxvYWQ/LnJlc3VsdCA/PyBkYXRhLnBheWxvYWQpO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdFx0cy5uZXh0Py4oZGF0YSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5lcnJvcj8uKGUpO1xuXHRcdH1cblx0fVxuXHRfc3RvcFBvbGxpbmcoKSB7XG5cdFx0dGhpcy5fcG9sbGluZyA9IGZhbHNlO1xuXHRcdHRoaXMuX3BvbGxBYm9ydD8uYWJvcnQoKTtcblx0XHR0aGlzLl9wb2xsQWJvcnQgPSBudWxsO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJzdG9wcGVkXCIpO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpO1xuXHRcdHRoaXMuX3N1YnMuY2xlYXIoKTtcblx0XHR0aGlzLl9zdG9wUG9sbGluZygpO1xuXHR9XG5cdGdldCBzZW5kQnVmZmVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9zZW5kQnVmZmVyLmJ1ZmZlcjtcblx0fVxuXHRnZXQgcmVjdkJ1ZmZlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5fcmVjdkJ1ZmZlci5idWZmZXI7XG5cdH1cblx0Z2V0IHdvcmtlcklkKCkge1xuXHRcdHJldHVybiB0aGlzLl93b3JrZXJJZDtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbE5hbWU7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVBdG9taWNzQ2hhbm5lbFBhaXIoY2hhbm5lbE5hbWUsIGNvbmZpZyA9IHt9KSB7XG5cdGNvbnN0IGJ1ZmZlclNpemUgPSBjb25maWcuYnVmZmVyU2l6ZSA/PyA2NTUzNjtcblx0Y29uc3QgYnVmZmVyQSA9IG5ldyBTaGFyZWRBcnJheUJ1ZmZlcihidWZmZXJTaXplKTtcblx0Y29uc3QgYnVmZmVyQiA9IG5ldyBTaGFyZWRBcnJheUJ1ZmZlcihidWZmZXJTaXplKTtcblx0cmV0dXJuIHtcblx0XHRtYWluOiBuZXcgQXRvbWljc1RyYW5zcG9ydChjaGFubmVsTmFtZSwgYnVmZmVyQSwgYnVmZmVyQiwgY29uZmlnKSxcblx0XHR3b3JrZXI6IHtcblx0XHRcdHNlbmRCdWZmZXI6IGJ1ZmZlckIsXG5cdFx0XHRyZWN2QnVmZmVyOiBidWZmZXJBXG5cdFx0fVxuXHR9O1xufVxuZnVuY3Rpb24gY3JlYXRlV29ya2VyQXRvbWljc1RyYW5zcG9ydChjaGFubmVsTmFtZSwgc2VuZEJ1ZmZlciwgcmVjdkJ1ZmZlciwgY29uZmlnID0ge30pIHtcblx0cmV0dXJuIG5ldyBBdG9taWNzVHJhbnNwb3J0KGNoYW5uZWxOYW1lLCBzZW5kQnVmZmVyLCByZWN2QnVmZmVyLCBjb25maWcpO1xufVxudmFyIEF0b21pY3NSaW5nQnVmZmVyID0gY2xhc3MgQXRvbWljc1JpbmdCdWZmZXIge1xuXHRfYnVmZmVyO1xuXHRfbWV0YTtcblx0X2RhdGE7XG5cdF9zbG90U2l6ZTtcblx0X3Nsb3RDb3VudDtcblx0X21hc2s7XG5cdHN0YXRpYyBNRVRBX1NJWkUgPSAxNjtcblx0c3RhdGljIFdSSVRFX0lEWCA9IDA7XG5cdHN0YXRpYyBSRUFEX0lEWCA9IDQ7XG5cdHN0YXRpYyBPVkVSRkxPVyA9IDg7XG5cdGNvbnN0cnVjdG9yKGJ1ZmZlck9yQ29uZmlnID0ge30pIHtcblx0XHRpZiAoYnVmZmVyT3JDb25maWcgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcikge1xuXHRcdFx0dGhpcy5fYnVmZmVyID0gYnVmZmVyT3JDb25maWc7XG5cdFx0XHR0aGlzLl9zbG90Q291bnQgPSA2NDtcblx0XHRcdHRoaXMuX3Nsb3RTaXplID0gKHRoaXMuX2J1ZmZlci5ieXRlTGVuZ3RoIC0gQXRvbWljc1JpbmdCdWZmZXIuTUVUQV9TSVpFKSAvIHRoaXMuX3Nsb3RDb3VudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fc2xvdFNpemUgPSBidWZmZXJPckNvbmZpZy5zbG90U2l6ZSA/PyAxMDI0O1xuXHRcdFx0dGhpcy5fc2xvdENvdW50ID0gYnVmZmVyT3JDb25maWcuc2xvdENvdW50ID8/IDY0O1xuXHRcdFx0dGhpcy5fc2xvdENvdW50ID0gMSA8PCBNYXRoLmNlaWwoTWF0aC5sb2cyKHRoaXMuX3Nsb3RDb3VudCkpO1xuXHRcdFx0Y29uc3QgdG90YWxTaXplID0gQXRvbWljc1JpbmdCdWZmZXIuTUVUQV9TSVpFICsgdGhpcy5fc2xvdFNpemUgKiB0aGlzLl9zbG90Q291bnQ7XG5cdFx0XHR0aGlzLl9idWZmZXIgPSBuZXcgU2hhcmVkQXJyYXlCdWZmZXIodG90YWxTaXplKTtcblx0XHR9XG5cdFx0dGhpcy5fbWV0YSA9IG5ldyBJbnQzMkFycmF5KHRoaXMuX2J1ZmZlciwgMCwgQXRvbWljc1JpbmdCdWZmZXIuTUVUQV9TSVpFIC8gNCk7XG5cdFx0dGhpcy5fZGF0YSA9IG5ldyBVaW50OEFycmF5KHRoaXMuX2J1ZmZlciwgQXRvbWljc1JpbmdCdWZmZXIuTUVUQV9TSVpFKTtcblx0XHR0aGlzLl9tYXNrID0gdGhpcy5fc2xvdENvdW50IC0gMTtcblx0fVxuXHR3cml0ZShkYXRhKSB7XG5cdFx0aWYgKGRhdGEuYnl0ZUxlbmd0aCA+IHRoaXMuX3Nsb3RTaXplIC0gNCkgcmV0dXJuIGZhbHNlO1xuXHRcdGNvbnN0IHdyaXRlSWR4ID0gQXRvbWljcy5sb2FkKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLldSSVRFX0lEWCk7XG5cdFx0Y29uc3QgcmVhZElkeCA9IEF0b21pY3MubG9hZCh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5SRUFEX0lEWCk7XG5cdFx0aWYgKCh3cml0ZUlkeCArIDEgJiB0aGlzLl9tYXNrKSA9PT0gKHJlYWRJZHggJiB0aGlzLl9tYXNrKSkge1xuXHRcdFx0QXRvbWljcy5hZGQodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuT1ZFUkZMT1csIDEpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCBzbG90ID0gKHdyaXRlSWR4ICYgdGhpcy5fbWFzaykgKiB0aGlzLl9zbG90U2l6ZTtcblx0XHRuZXcgRGF0YVZpZXcodGhpcy5fYnVmZmVyLCBBdG9taWNzUmluZ0J1ZmZlci5NRVRBX1NJWkUgKyBzbG90KS5zZXRVaW50MzIoMCwgZGF0YS5ieXRlTGVuZ3RoLCB0cnVlKTtcblx0XHR0aGlzLl9kYXRhLnNldChkYXRhLCBzbG90ICsgNCk7XG5cdFx0QXRvbWljcy5zdG9yZSh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5XUklURV9JRFgsIHdyaXRlSWR4ICsgMSk7XG5cdFx0QXRvbWljcy5ub3RpZnkodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuV1JJVEVfSURYKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZWFkKCkge1xuXHRcdGNvbnN0IHdyaXRlSWR4ID0gQXRvbWljcy5sb2FkKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLldSSVRFX0lEWCk7XG5cdFx0Y29uc3QgcmVhZElkeCA9IEF0b21pY3MubG9hZCh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5SRUFEX0lEWCk7XG5cdFx0aWYgKHJlYWRJZHggPT09IHdyaXRlSWR4KSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCBzbG90ID0gKHJlYWRJZHggJiB0aGlzLl9tYXNrKSAqIHRoaXMuX3Nsb3RTaXplO1xuXHRcdGNvbnN0IHNpemUgPSBuZXcgRGF0YVZpZXcodGhpcy5fYnVmZmVyLCBBdG9taWNzUmluZ0J1ZmZlci5NRVRBX1NJWkUgKyBzbG90KS5nZXRVaW50MzIoMCwgdHJ1ZSk7XG5cdFx0aWYgKHNpemUgPT09IDAgfHwgc2l6ZSA+IHRoaXMuX3Nsb3RTaXplIC0gNCkgcmV0dXJuIG51bGw7XG5cdFx0Y29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuXHRcdGRhdGEuc2V0KHRoaXMuX2RhdGEuc3ViYXJyYXkoc2xvdCArIDQsIHNsb3QgKyA0ICsgc2l6ZSkpO1xuXHRcdEF0b21pY3Muc3RvcmUodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuUkVBRF9JRFgsIHJlYWRJZHggKyAxKTtcblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXHRhc3luYyB3YWl0UmVhZCh0aW1lb3V0KSB7XG5cdFx0Y29uc3Qgd3JpdGVJZHggPSBBdG9taWNzLmxvYWQodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuV1JJVEVfSURYKTtcblx0XHRpZiAoQXRvbWljcy5sb2FkKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLlJFQURfSURYKSA8IHdyaXRlSWR4KSByZXR1cm4gdGhpcy5yZWFkKCk7XG5cdFx0aWYgKFwid2FpdEFzeW5jXCIgaW4gQXRvbWljcykge1xuXHRcdFx0aWYgKGF3YWl0IEF0b21pY3Mud2FpdEFzeW5jKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLldSSVRFX0lEWCwgd3JpdGVJZHgsIHRpbWVvdXQgPz8gMWUzKS52YWx1ZSA9PT0gXCJva1wiKSByZXR1cm4gdGhpcy5yZWFkKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIE1hdGgubWluKHRpbWVvdXQgPz8gMWUzLCAxMDApKSk7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZWFkKCk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGdldCBidWZmZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0fVxuXHRnZXQgYXZhaWxhYmxlKCkge1xuXHRcdHJldHVybiBBdG9taWNzLmxvYWQodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuV1JJVEVfSURYKSAtIEF0b21pY3MubG9hZCh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5SRUFEX0lEWCkgJiB0aGlzLl9tYXNrO1xuXHR9XG5cdGdldCBvdmVyZmxvdygpIHtcblx0XHRyZXR1cm4gQXRvbWljcy5sb2FkKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLk9WRVJGTE9XKTtcblx0fVxufTtcbnZhciBBdG9taWNzVHJhbnNwb3J0RmFjdG9yeSA9IHtcblx0Y3JlYXRlOiAobmFtZSwgc2VuZCwgcmVjdiwgY29uZmlnKSA9PiBuZXcgQXRvbWljc1RyYW5zcG9ydChuYW1lLCBzZW5kLCByZWN2LCBjb25maWcpLFxuXHRjcmVhdGVQYWlyOiAobmFtZSwgY29uZmlnKSA9PiBjcmVhdGVBdG9taWNzQ2hhbm5lbFBhaXIobmFtZSwgY29uZmlnKSxcblx0Y3JlYXRlQnVmZmVyOiAoc2l6ZU9yQnVmZmVyLCBjb25maWcpID0+IG5ldyBBdG9taWNzQnVmZmVyKHNpemVPckJ1ZmZlciwgY29uZmlnKSxcblx0Y3JlYXRlUmluZ0J1ZmZlcjogKGNvbmZpZykgPT4gbmV3IEF0b21pY3NSaW5nQnVmZmVyKGNvbmZpZyksXG5cdGdldENCT1I6IGdldENCT1JFbmNvZGVyXG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvUlRDRGF0YUNoYW5uZWxUcmFuc3BvcnQudHNcbnZhciBERUZBVUxUX0lDRV9TRVJWRVJTID0gW1xuXHR7IHVybHM6IFwic3R1bjpzdHVuLmwuZ29vZ2xlLmNvbToxOTMwMlwiIH0sXG5cdHsgdXJsczogXCJzdHVuOnN0dW4xLmwuZ29vZ2xlLmNvbToxOTMwMlwiIH0sXG5cdHsgdXJsczogXCJzdHVuOnN0dW4yLmwuZ29vZ2xlLmNvbToxOTMwMlwiIH1cbl07XG52YXIgUlRDUGVlclRyYW5zcG9ydCA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfY29uZmlnO1xuXHRfcGM7XG5cdF9jaGFubmVsID0gbnVsbDtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9sb2NhbElkID0gVVVJRHY0KCk7XG5cdF9yZW1vdGVJZCA9IG51bGw7XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRfY2hhbm5lbFN0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9pY2VDYW5kaWRhdGVzID0gW107XG5cdF9pY2VHYXRoZXJpbmdDb21wbGV0ZSA9IGZhbHNlO1xuXHRjb25zdHJ1Y3RvcihfY2hhbm5lbE5hbWUsIF9jb25maWcgPSB7fSkge1xuXHRcdHRoaXMuX2NoYW5uZWxOYW1lID0gX2NoYW5uZWxOYW1lO1xuXHRcdHRoaXMuX2NvbmZpZyA9IF9jb25maWc7XG5cdFx0dGhpcy5fcGMgPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oeyBpY2VTZXJ2ZXJzOiBfY29uZmlnLmljZVNlcnZlcnMgPz8gREVGQVVMVF9JQ0VfU0VSVkVSUyB9KTtcblx0XHR0aGlzLl9zZXR1cFBlZXJDb25uZWN0aW9uKCk7XG5cdH1cblx0X3NldHVwUGVlckNvbm5lY3Rpb24oKSB7XG5cdFx0dGhpcy5fcGMub25pY2VjYW5kaWRhdGUgPSAoZSkgPT4ge1xuXHRcdFx0aWYgKGUuY2FuZGlkYXRlKSB7XG5cdFx0XHRcdHRoaXMuX2ljZUNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZS50b0pTT04oKSk7XG5cdFx0XHRcdGlmICh0aGlzLl9yZW1vdGVJZCAmJiB0aGlzLl9jb25maWcuc2lnbmFsaW5nKSB0aGlzLl9jb25maWcuc2lnbmFsaW5nLnNlbmQodGhpcy5fcmVtb3RlSWQsIHtcblx0XHRcdFx0XHR0eXBlOiBcImljZS1jYW5kaWRhdGVcIixcblx0XHRcdFx0XHRmcm9tUGVlcklkOiB0aGlzLl9sb2NhbElkLFxuXHRcdFx0XHRcdHRvUGVlcklkOiB0aGlzLl9yZW1vdGVJZCxcblx0XHRcdFx0XHRjYW5kaWRhdGU6IGUuY2FuZGlkYXRlLnRvSlNPTigpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dGhpcy5fcGMub25pY2VnYXRoZXJpbmdzdGF0ZWNoYW5nZSA9ICgpID0+IHtcblx0XHRcdGlmICh0aGlzLl9wYy5pY2VHYXRoZXJpbmdTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB0aGlzLl9pY2VHYXRoZXJpbmdDb21wbGV0ZSA9IHRydWU7XG5cdFx0fTtcblx0XHR0aGlzLl9wYy5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9ICgpID0+IHtcblx0XHRcdHRoaXMuX3N0YXRlLm5leHQodGhpcy5fcGMuY29ubmVjdGlvblN0YXRlKTtcblx0XHRcdGlmICh0aGlzLl9wYy5jb25uZWN0aW9uU3RhdGUgPT09IFwiZmFpbGVkXCIgfHwgdGhpcy5fcGMuY29ubmVjdGlvblN0YXRlID09PSBcImRpc2Nvbm5lY3RlZFwiKSBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5lcnJvcj8uKC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYENvbm5lY3Rpb24gJHt0aGlzLl9wYy5jb25uZWN0aW9uU3RhdGV9YCkpO1xuXHRcdH07XG5cdFx0dGhpcy5fcGMub25kYXRhY2hhbm5lbCA9IChlKSA9PiB7XG5cdFx0XHR0aGlzLl9zZXR1cERhdGFDaGFubmVsKGUuY2hhbm5lbCk7XG5cdFx0fTtcblx0fVxuXHRfc2V0dXBEYXRhQ2hhbm5lbChjaGFubmVsKSB7XG5cdFx0dGhpcy5fY2hhbm5lbCA9IGNoYW5uZWw7XG5cdFx0Y2hhbm5lbC5iaW5hcnlUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xuXHRcdGNoYW5uZWwub25vcGVuID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5fY2hhbm5lbFN0YXRlLm5leHQoXCJvcGVuXCIpO1xuXHRcdH07XG5cdFx0Y2hhbm5lbC5vbmNsb3NlID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5fY2hhbm5lbFN0YXRlLm5leHQoXCJjbG9zZWRcIik7XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5jb21wbGV0ZT8uKCk7XG5cdFx0fTtcblx0XHRjaGFubmVsLm9uZXJyb3IgPSAoZSkgPT4ge1xuXHRcdFx0Y29uc3QgZXJyID0gLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkRhdGFDaGFubmVsIGVycm9yXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIpO1xuXHRcdH07XG5cdFx0Y2hhbm5lbC5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuXHRcdFx0bGV0IGRhdGE7XG5cdFx0XHRpZiAodHlwZW9mIGUuZGF0YSA9PT0gXCJzdHJpbmdcIikgZGF0YSA9IEpTT04ucGFyc2UoZS5kYXRhKTtcblx0XHRcdGVsc2UgZGF0YSA9IHRoaXMuX2RlY29kZUJpbmFyeShlLmRhdGEpO1xuXHRcdFx0ZGF0YS5wZWVySWQgPSB0aGlzLl9yZW1vdGVJZCA/PyB2b2lkIDA7XG5cdFx0XHRkYXRhLmRhdGFDaGFubmVsTGFiZWwgPSBjaGFubmVsLmxhYmVsO1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIGRhdGEucmVxSWQpIHtcblx0XHRcdFx0Y29uc3QgcCA9IHRoaXMuX3BlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmVycm9yKSBwLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRcdFx0ZWxzZSBwLnJlc29sdmUoZGF0YS5wYXlsb2FkPy5yZXN1bHQgPz8gZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/LihkYXRhKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0YXN5bmMgY3JlYXRlT2ZmZXIocmVtb3RlSWQpIHtcblx0XHR0aGlzLl9yZW1vdGVJZCA9IHJlbW90ZUlkO1xuXHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLl9wYy5jcmVhdGVEYXRhQ2hhbm5lbCh0aGlzLl9jaGFubmVsTmFtZSwgdGhpcy5fY29uZmlnLmRhdGFDaGFubmVsT3B0aW9ucyk7XG5cdFx0dGhpcy5fc2V0dXBEYXRhQ2hhbm5lbChjaGFubmVsKTtcblx0XHRjb25zdCBvZmZlciA9IGF3YWl0IHRoaXMuX3BjLmNyZWF0ZU9mZmVyKCk7XG5cdFx0YXdhaXQgdGhpcy5fcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcik7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IFwib2ZmZXJcIixcblx0XHRcdGZyb21QZWVySWQ6IHRoaXMuX2xvY2FsSWQsXG5cdFx0XHR0b1BlZXJJZDogcmVtb3RlSWQsXG5cdFx0XHRzZHA6IG9mZmVyLnNkcFxuXHRcdH07XG5cdH1cblx0YXN5bmMgaGFuZGxlT2ZmZXIoc2lnbmFsKSB7XG5cdFx0dGhpcy5fcmVtb3RlSWQgPSBzaWduYWwuZnJvbVBlZXJJZDtcblx0XHRhd2FpdCB0aGlzLl9wYy5zZXRSZW1vdGVEZXNjcmlwdGlvbih7XG5cdFx0XHR0eXBlOiBcIm9mZmVyXCIsXG5cdFx0XHRzZHA6IHNpZ25hbC5zZHBcblx0XHR9KTtcblx0XHRjb25zdCBhbnN3ZXIgPSBhd2FpdCB0aGlzLl9wYy5jcmVhdGVBbnN3ZXIoKTtcblx0XHRhd2FpdCB0aGlzLl9wYy5zZXRMb2NhbERlc2NyaXB0aW9uKGFuc3dlcik7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IFwiYW5zd2VyXCIsXG5cdFx0XHRmcm9tUGVlcklkOiB0aGlzLl9sb2NhbElkLFxuXHRcdFx0dG9QZWVySWQ6IHNpZ25hbC5mcm9tUGVlcklkLFxuXHRcdFx0c2RwOiBhbnN3ZXIuc2RwXG5cdFx0fTtcblx0fVxuXHRhc3luYyBoYW5kbGVBbnN3ZXIoc2lnbmFsKSB7XG5cdFx0YXdhaXQgdGhpcy5fcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oe1xuXHRcdFx0dHlwZTogXCJhbnN3ZXJcIixcblx0XHRcdHNkcDogc2lnbmFsLnNkcFxuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGFkZEljZUNhbmRpZGF0ZShzaWduYWwpIHtcblx0XHRpZiAoc2lnbmFsLmNhbmRpZGF0ZSkgYXdhaXQgdGhpcy5fcGMuYWRkSWNlQ2FuZGlkYXRlKHNpZ25hbC5jYW5kaWRhdGUpO1xuXHR9XG5cdHNlbmQobXNnLCBiaW5hcnkpIHtcblx0XHRpZiAoIXRoaXMuX2NoYW5uZWwgfHwgdGhpcy5fY2hhbm5lbC5yZWFkeVN0YXRlICE9PSBcIm9wZW5cIikgcmV0dXJuO1xuXHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlLCBwZWVySWQsIGRhdGFDaGFubmVsTGFiZWwsIC4uLmRhdGEgfSA9IG1zZztcblx0XHRpZiAoYmluYXJ5IHx8IG1zZy5iaW5hcnkpIHRoaXMuX2NoYW5uZWwuc2VuZCh0aGlzLl9lbmNvZGVCaW5hcnkoZGF0YSkpO1xuXHRcdGVsc2UgdGhpcy5fY2hhbm5lbC5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcblx0fVxuXHRyZXF1ZXN0KG1zZykge1xuXHRcdGNvbnN0IHJlcUlkID0gbXNnLnJlcUlkID8/IFVVSUR2NCgpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKHJlcUlkKTtcblx0XHRcdFx0cmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJSZXF1ZXN0IHRpbWVvdXRcIikpO1xuXHRcdFx0fSwgdGhpcy5fY29uZmlnLmNvbm5lY3Rpb25UaW1lb3V0ID8/IDNlNCk7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLnNldChyZXFJZCwge1xuXHRcdFx0XHRyZXNvbHZlOiAodikgPT4ge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRyZXNvbHZlKHYpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZWplY3Q6IChlKSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuc2VuZCh7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWQsXG5cdFx0XHRcdHR5cGU6IFwicmVxdWVzdFwiXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0X2VuY29kZUJpbmFyeShkYXRhKSB7XG5cdFx0Y29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuXHRcdHJldHVybiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoanNvbikuYnVmZmVyO1xuXHR9XG5cdF9kZWNvZGVCaW5hcnkoYnVmZmVyKSB7XG5cdFx0Y29uc3QganNvbiA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShidWZmZXIpO1xuXHRcdHJldHVybiBKU09OLnBhcnNlKGpzb24pO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpO1xuXHRcdHRoaXMuX3N1YnMuY2xlYXIoKTtcblx0XHRpZiAodGhpcy5fcmVtb3RlSWQgJiYgdGhpcy5fY29uZmlnLnNpZ25hbGluZykgdGhpcy5fY29uZmlnLnNpZ25hbGluZy5zZW5kKHRoaXMuX3JlbW90ZUlkLCB7XG5cdFx0XHR0eXBlOiBcImRpc2Nvbm5lY3RcIixcblx0XHRcdGZyb21QZWVySWQ6IHRoaXMuX2xvY2FsSWQsXG5cdFx0XHR0b1BlZXJJZDogdGhpcy5fcmVtb3RlSWRcblx0XHR9KTtcblx0XHR0aGlzLl9jaGFubmVsPy5jbG9zZSgpO1xuXHRcdHRoaXMuX3BjLmNsb3NlKCk7XG5cdH1cblx0Z2V0IGxvY2FsSWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xvY2FsSWQ7XG5cdH1cblx0Z2V0IHJlbW90ZUlkKCkge1xuXHRcdHJldHVybiB0aGlzLl9yZW1vdGVJZDtcblx0fVxuXHRnZXQgY29ubmVjdGlvblN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9wYy5jb25uZWN0aW9uU3RhdGU7XG5cdH1cblx0Z2V0IGNoYW5uZWxTdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbD8ucmVhZHlTdGF0ZSA/PyBudWxsO1xuXHR9XG5cdGdldCBzdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGU7XG5cdH1cblx0Z2V0IGNoYW5uZWxTdGF0ZU9ic2VydmFibGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxTdGF0ZTtcblx0fVxuXHRnZXQgaWNlQ2FuZGlkYXRlcygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2ljZUNhbmRpZGF0ZXNdO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbE5hbWU7XG5cdH1cbn07XG52YXIgUlRDUGVlck1hbmFnZXIgPSBjbGFzcyB7XG5cdF9jaGFubmVsTmFtZTtcblx0X2NvbmZpZztcblx0X3BlZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2xvY2FsSWQgPSBVVUlEdjQoKTtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfc2lnbmFsaW5nQ2xlYW51cCA9IG51bGw7XG5cdF9wZWVyRXZlbnRzID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdGNvbnN0cnVjdG9yKF9jaGFubmVsTmFtZSwgX2NvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fY29uZmlnID0gX2NvbmZpZztcblx0XHR0aGlzLl9zZXR1cFNpZ25hbGluZygpO1xuXHR9XG5cdF9zZXR1cFNpZ25hbGluZygpIHtcblx0XHRpZiAoIXRoaXMuX2NvbmZpZy5zaWduYWxpbmcpIHJldHVybjtcblx0XHRjb25zdCBjbGVhbnVwID0gdGhpcy5fY29uZmlnLnNpZ25hbGluZy5vbk1lc3NhZ2UoYXN5bmMgKHNpZ25hbCkgPT4ge1xuXHRcdFx0aWYgKHNpZ25hbC50b1BlZXJJZCAhPT0gdGhpcy5fbG9jYWxJZCkgcmV0dXJuO1xuXHRcdFx0c3dpdGNoIChzaWduYWwudHlwZSkge1xuXHRcdFx0XHRjYXNlIFwib2ZmZXJcIjoge1xuXHRcdFx0XHRcdGNvbnN0IGFuc3dlciA9IGF3YWl0IHRoaXMuX2dldE9yQ3JlYXRlUGVlcihzaWduYWwuZnJvbVBlZXJJZCkuaGFuZGxlT2ZmZXIoc2lnbmFsKTtcblx0XHRcdFx0XHR0aGlzLl9jb25maWcuc2lnbmFsaW5nLnNlbmQoc2lnbmFsLmZyb21QZWVySWQsIGFuc3dlcik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBcImFuc3dlclwiOiB7XG5cdFx0XHRcdFx0Y29uc3QgcGVlciA9IHRoaXMuX3BlZXJzLmdldChzaWduYWwuZnJvbVBlZXJJZCk7XG5cdFx0XHRcdFx0aWYgKHBlZXIpIGF3YWl0IHBlZXIuaGFuZGxlQW5zd2VyKHNpZ25hbCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBcImljZS1jYW5kaWRhdGVcIjoge1xuXHRcdFx0XHRcdGNvbnN0IHBlZXIgPSB0aGlzLl9wZWVycy5nZXQoc2lnbmFsLmZyb21QZWVySWQpO1xuXHRcdFx0XHRcdGlmIChwZWVyKSBhd2FpdCBwZWVyLmFkZEljZUNhbmRpZGF0ZShzaWduYWwpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgXCJkaXNjb25uZWN0XCI6IHRoaXMuX3JlbW92ZVBlZXIoc2lnbmFsLmZyb21QZWVySWQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmICh0eXBlb2YgY2xlYW51cCA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLl9zaWduYWxpbmdDbGVhbnVwID0gY2xlYW51cDtcblx0XHRlbHNlIGlmIChjbGVhbnVwICYmIFwidW5zdWJzY3JpYmVcIiBpbiBjbGVhbnVwKSB0aGlzLl9zaWduYWxpbmdDbGVhbnVwID0gKCkgPT4gY2xlYW51cC51bnN1YnNjcmliZSgpO1xuXHR9XG5cdF9nZXRPckNyZWF0ZVBlZXIocGVlcklkKSB7XG5cdFx0bGV0IHBlZXIgPSB0aGlzLl9wZWVycy5nZXQocGVlcklkKTtcblx0XHRpZiAoIXBlZXIpIHtcblx0XHRcdHBlZXIgPSBuZXcgUlRDUGVlclRyYW5zcG9ydCh0aGlzLl9jaGFubmVsTmFtZSwgdGhpcy5fY29uZmlnKTtcblx0XHRcdHRoaXMuX3BlZXJzLnNldChwZWVySWQsIHBlZXIpO1xuXHRcdFx0cGVlci5zdGF0ZS5zdWJzY3JpYmUoeyBuZXh0OiAoc3RhdGUpID0+IHtcblx0XHRcdFx0aWYgKHN0YXRlID09PSBcImNvbm5lY3RlZFwiKSB0aGlzLl9wZWVyRXZlbnRzLm5leHQoe1xuXHRcdFx0XHRcdHR5cGU6IFwiY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0cGVlcklkLFxuXHRcdFx0XHRcdHBlZXJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGVsc2UgaWYgKHN0YXRlID09PSBcImRpc2Nvbm5lY3RlZFwiIHx8IHN0YXRlID09PSBcImNsb3NlZFwiKSB0aGlzLl9wZWVyRXZlbnRzLm5leHQoe1xuXHRcdFx0XHRcdHR5cGU6IFwiZGlzY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0cGVlcklkXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRlbHNlIGlmIChzdGF0ZSA9PT0gXCJmYWlsZWRcIikge1xuXHRcdFx0XHRcdHRoaXMuX3BlZXJFdmVudHMubmV4dCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBcImZhaWxlZFwiLFxuXHRcdFx0XHRcdFx0cGVlcklkXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5fcmVtb3ZlUGVlcihwZWVySWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IH0pO1xuXHRcdFx0cGVlci5zdWJzY3JpYmUoe1xuXHRcdFx0XHRuZXh0OiAobXNnKSA9PiB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRcdFx0XHRzLm5leHQ/Lihtc2cpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9yOiAoZSkgPT4ge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSBzLmVycm9yPy4oZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gcGVlcjtcblx0fVxuXHRfcmVtb3ZlUGVlcihwZWVySWQpIHtcblx0XHRjb25zdCBwZWVyID0gdGhpcy5fcGVlcnMuZ2V0KHBlZXJJZCk7XG5cdFx0aWYgKHBlZXIpIHtcblx0XHRcdHBlZXIuY2xvc2UoKTtcblx0XHRcdHRoaXMuX3BlZXJzLmRlbGV0ZShwZWVySWQpO1xuXHRcdFx0dGhpcy5fcGVlckV2ZW50cy5uZXh0KHtcblx0XHRcdFx0dHlwZTogXCJkaXNjb25uZWN0ZWRcIixcblx0XHRcdFx0cGVlcklkXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0YXN5bmMgY29ubmVjdChwZWVySWQpIHtcblx0XHRjb25zdCBwZWVyID0gdGhpcy5fZ2V0T3JDcmVhdGVQZWVyKHBlZXJJZCk7XG5cdFx0Y29uc3Qgb2ZmZXIgPSBhd2FpdCBwZWVyLmNyZWF0ZU9mZmVyKHBlZXJJZCk7XG5cdFx0aWYgKHRoaXMuX2NvbmZpZy5zaWduYWxpbmcpIGF3YWl0IHRoaXMuX2NvbmZpZy5zaWduYWxpbmcuc2VuZChwZWVySWQsIG9mZmVyKTtcblx0XHRyZXR1cm4gcGVlcjtcblx0fVxuXHRzZW5kKHBlZXJJZCwgbXNnKSB7XG5cdFx0dGhpcy5fcGVlcnMuZ2V0KHBlZXJJZCk/LnNlbmQobXNnKTtcblx0fVxuXHRicm9hZGNhc3QobXNnKSB7XG5cdFx0Zm9yIChjb25zdCBwZWVyIG9mIHRoaXMuX3BlZXJzLnZhbHVlcygpKSBwZWVyLnNlbmQobXNnKTtcblx0fVxuXHRyZXF1ZXN0KHBlZXJJZCwgbXNnKSB7XG5cdFx0Y29uc3QgcGVlciA9IHRoaXMuX3BlZXJzLmdldChwZWVySWQpO1xuXHRcdGlmICghcGVlcikgcmV0dXJuIFByb21pc2UucmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJQZWVyIG5vdCBmb3VuZFwiKSk7XG5cdFx0cmV0dXJuIHBlZXIucmVxdWVzdChtc2cpO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xvc2VkOiBmYWxzZSxcblx0XHRcdHVuc3Vic2NyaWJlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3N1YnMuZGVsZXRlKG9icyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRvblBlZXJFdmVudChoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BlZXJFdmVudHMuc3Vic2NyaWJlKHsgbmV4dDogaGFuZGxlciB9KTtcblx0fVxuXHRnZXRQZWVycygpIHtcblx0XHRjb25zdCByZXN1bHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdGZvciAoY29uc3QgW2lkLCBwZWVyXSBvZiB0aGlzLl9wZWVycykgcmVzdWx0LnNldChpZCwge1xuXHRcdFx0aWQsXG5cdFx0XHRjb25uZWN0aW9uU3RhdGU6IHBlZXIuY29ubmVjdGlvblN0YXRlLFxuXHRcdFx0aWNlQ29ubmVjdGlvblN0YXRlOiBcIm5ld1wiLFxuXHRcdFx0ZGF0YUNoYW5uZWxTdGF0ZTogcGVlci5jaGFubmVsU3RhdGUgPz8gXCJjbG9zZWRcIlxuXHRcdH0pO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc2lnbmFsaW5nQ2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdGZvciAoY29uc3QgcGVlciBvZiB0aGlzLl9wZWVycy52YWx1ZXMoKSkgcGVlci5jbG9zZSgpO1xuXHRcdHRoaXMuX3BlZXJzLmNsZWFyKCk7XG5cdH1cblx0Z2V0IGxvY2FsSWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xvY2FsSWQ7XG5cdH1cblx0Z2V0IHBlZXJDb3VudCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcGVlcnMuc2l6ZTtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxOYW1lO1xuXHR9XG59O1xuZnVuY3Rpb24gY3JlYXRlQnJvYWRjYXN0U2lnbmFsaW5nKGNoYW5uZWxOYW1lKSB7XG5cdGNvbnN0IGJjID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoYHJ0Yy1zaWduYWxpbmc6JHtjaGFubmVsTmFtZX1gKTtcblx0Y29uc3QgaGFuZGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRiYy5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuXHRcdGZvciAoY29uc3QgaCBvZiBoYW5kbGVycykgaChlLmRhdGEpO1xuXHR9O1xuXHRyZXR1cm4ge1xuXHRcdHNlbmQocGVlcklkLCBtZXNzYWdlKSB7XG5cdFx0XHRiYy5wb3N0TWVzc2FnZShtZXNzYWdlKTtcblx0XHR9LFxuXHRcdG9uTWVzc2FnZShoYW5kbGVyKSB7XG5cdFx0XHRoYW5kbGVycy5hZGQoaGFuZGxlcik7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR1bnN1YnNjcmliZTogKCkgPT4gaGFuZGxlcnMuZGVsZXRlKGhhbmRsZXIpLFxuXHRcdFx0XHRjbG9zZWQ6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0Y2xvc2UoKSB7XG5cdFx0XHRiYy5jbG9zZSgpO1xuXHRcdFx0aGFuZGxlcnMuY2xlYXIoKTtcblx0XHR9XG5cdH07XG59XG52YXIgUlRDVHJhbnNwb3J0RmFjdG9yeSA9IHtcblx0Y3JlYXRlUGVlcjogKG5hbWUsIGNvbmZpZykgPT4gbmV3IFJUQ1BlZXJUcmFuc3BvcnQobmFtZSwgY29uZmlnKSxcblx0Y3JlYXRlTWFuYWdlcjogKG5hbWUsIGNvbmZpZykgPT4gbmV3IFJUQ1BlZXJNYW5hZ2VyKG5hbWUsIGNvbmZpZyksXG5cdGNyZWF0ZVNpZ25hbGluZzogKG5hbWUpID0+IGNyZWF0ZUJyb2FkY2FzdFNpZ25hbGluZyhuYW1lKVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdHJhbnNwb3J0L1BvcnRUcmFuc3BvcnQudHNcbnZhciBQb3J0VHJhbnNwb3J0ID0gY2xhc3Mge1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9jb25maWc7XG5cdF9wb3J0O1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2xpc3RlbmluZyA9IGZhbHNlO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9wb3J0SWQgPSBVVUlEdjQoKTtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9rZWVwQWxpdmVUaW1lciA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKHBvcnQsIF9jaGFubmVsTmFtZSwgX2NvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fY29uZmlnID0gX2NvbmZpZztcblx0XHR0aGlzLl9wb3J0ID0gcG9ydDtcblx0XHR0aGlzLl9zZXR1cFBvcnQoKTtcblx0XHRpZiAoX2NvbmZpZy5hdXRvU3RhcnQgIT09IGZhbHNlKSB0aGlzLnN0YXJ0KCk7XG5cdH1cblx0X3NldHVwUG9ydCgpIHtcblx0XHRjb25zdCBtc2dIYW5kbGVyID0gKGUpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSBlLmRhdGE7XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIgJiYgZGF0YS5yZXFJZCkge1xuXHRcdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdGlmIChwKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdFx0aWYgKGRhdGEucGF5bG9hZD8uZXJyb3IpIHAucmVqZWN0KG5ldyBFcnJvcihkYXRhLnBheWxvYWQuZXJyb3IpKTtcblx0XHRcdFx0XHRlbHNlIHAucmVzb2x2ZShkYXRhLnBheWxvYWQ/LnJlc3VsdCA/PyBkYXRhLnBheWxvYWQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJzaWduYWxcIiAmJiBkYXRhLnBheWxvYWQ/LmFjdGlvbiA9PT0gXCJwaW5nXCIpIHtcblx0XHRcdFx0dGhpcy5zZW5kKHtcblx0XHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdFx0c2VuZGVyOiB0aGlzLl9wb3J0SWQsXG5cdFx0XHRcdFx0dHlwZTogXCJzaWduYWxcIixcblx0XHRcdFx0XHRwYXlsb2FkOiB7IGFjdGlvbjogXCJwb25nXCIgfVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZGF0YS5wb3J0SWQgPSBkYXRhLnBvcnRJZCA/PyB0aGlzLl9wb3J0SWQ7XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdFx0cy5uZXh0Py4oZGF0YSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IGVyckhhbmRsZXIgPSAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiZXJyb3JcIik7XG5cdFx0XHRjb25zdCBlcnIgPSAvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUG9ydCBlcnJvclwiKTtcblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSBzLmVycm9yPy4oZXJyKTtcblx0XHR9O1xuXHRcdHRoaXMuX3BvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0dGhpcy5fcG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZWVycm9yXCIsIGVyckhhbmRsZXIpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSAoKSA9PiB7XG5cdFx0XHR0aGlzLl9wb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0dGhpcy5fcG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZWVycm9yXCIsIGVyckhhbmRsZXIpO1xuXHRcdH07XG5cdH1cblx0c3RhcnQoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX3BvcnQuc3RhcnQoKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJyZWFkeVwiKTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmtlZXBBbGl2ZSkgdGhpcy5fc3RhcnRLZWVwQWxpdmUoKTtcblx0fVxuXHRzZW5kKG1zZywgdHJhbnNmZXIpIHtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdHRoaXMuX3BvcnQucG9zdE1lc3NhZ2Uoe1xuXHRcdFx0Li4uZGF0YSxcblx0XHRcdHBvcnRJZDogdGhpcy5fcG9ydElkXG5cdFx0fSwgdHJhbnNmZXIgPz8gW10pO1xuXHR9XG5cdHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIlJlcXVlc3QgdGltZW91dFwiKSk7XG5cdFx0XHR9LCB0aGlzLl9jb25maWcudGltZW91dCA/PyAzZTQpO1xuXHRcdFx0dGhpcy5fcGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdFx0cmVzb2x2ZTogKHYpID0+IHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0cmVzb2x2ZSh2KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVqZWN0OiAoZSkgPT4ge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnNlbmQoe1xuXHRcdFx0XHQuLi5tc2csXG5cdFx0XHRcdHJlcUlkLFxuXHRcdFx0XHR0eXBlOiBcInJlcXVlc3RcIlxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdF9zdGFydEtlZXBBbGl2ZSgpIHtcblx0XHR0aGlzLl9rZWVwQWxpdmVUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdHRoaXMuc2VuZCh7XG5cdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdHNlbmRlcjogdGhpcy5fcG9ydElkLFxuXHRcdFx0XHR0eXBlOiBcInNpZ25hbFwiLFxuXHRcdFx0XHRwYXlsb2FkOiB7IGFjdGlvbjogXCJwaW5nXCIgfVxuXHRcdFx0fSk7XG5cdFx0fSwgdGhpcy5fY29uZmlnLmtlZXBBbGl2ZUludGVydmFsID8/IDNlNCk7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0aWYgKHRoaXMuX2tlZXBBbGl2ZVRpbWVyKSB7XG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMuX2tlZXBBbGl2ZVRpbWVyKTtcblx0XHRcdHRoaXMuX2tlZXBBbGl2ZVRpbWVyID0gbnVsbDtcblx0XHR9XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdHRoaXMuX3BvcnQuY2xvc2UoKTtcblx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiY2xvc2VkXCIpO1xuXHR9XG5cdGdldCBwb3J0KCkge1xuXHRcdHJldHVybiB0aGlzLl9wb3J0O1xuXHR9XG5cdGdldCBwb3J0SWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnRJZDtcblx0fVxuXHRnZXQgaXNMaXN0ZW5pbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xpc3RlbmluZztcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbE5hbWU7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVDaGFubmVsUGFpcihjaGFubmVsTmFtZSwgY29uZmlnKSB7XG5cdGNvbnN0IGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcblx0cmV0dXJuIHtcblx0XHRsb2NhbDogbmV3IFBvcnRUcmFuc3BvcnQoY2hhbm5lbC5wb3J0MSwgY2hhbm5lbE5hbWUsIGNvbmZpZyksXG5cdFx0cmVtb3RlOiBjaGFubmVsLnBvcnQyLFxuXHRcdHRyYW5zZmVyOiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gY2hhbm5lbC5wb3J0Mjtcblx0XHR9XG5cdH07XG59XG5mdW5jdGlvbiBjcmVhdGVGcm9tUG9ydChwb3J0LCBjaGFubmVsTmFtZSwgY29uZmlnKSB7XG5cdHJldHVybiBuZXcgUG9ydFRyYW5zcG9ydChwb3J0LCBjaGFubmVsTmFtZSwgY29uZmlnKTtcbn1cbnZhciBQb3J0UG9vbCA9IGNsYXNzIHtcblx0X2RlZmF1bHRDb25maWc7XG5cdF9jaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9tYWluUG9ydCA9IG51bGw7XG5cdF9zdWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0Y29uc3RydWN0b3IoX2RlZmF1bHRDb25maWcgPSB7fSkge1xuXHRcdHRoaXMuX2RlZmF1bHRDb25maWcgPSBfZGVmYXVsdENvbmZpZztcblx0fVxuXHRjcmVhdGUoY2hhbm5lbE5hbWUsIGNvbmZpZykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUNoYW5uZWxQYWlyKGNoYW5uZWxOYW1lLCB7XG5cdFx0XHQuLi50aGlzLl9kZWZhdWx0Q29uZmlnLFxuXHRcdFx0Li4uY29uZmlnXG5cdFx0fSk7XG5cdFx0cmVzdWx0LmxvY2FsLnN1YnNjcmliZSh7IG5leHQ6IChtc2cpID0+IHtcblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/Lihtc2cpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHR9XG5cdFx0fSB9KTtcblx0XHR0aGlzLl9jaGFubmVscy5zZXQoY2hhbm5lbE5hbWUsIHJlc3VsdC5sb2NhbCk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXHRhZGQoY2hhbm5lbE5hbWUsIHBvcnQsIGNvbmZpZykge1xuXHRcdGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBQb3J0VHJhbnNwb3J0KHBvcnQsIGNoYW5uZWxOYW1lLCB7XG5cdFx0XHQuLi50aGlzLl9kZWZhdWx0Q29uZmlnLFxuXHRcdFx0Li4uY29uZmlnXG5cdFx0fSk7XG5cdFx0dHJhbnNwb3J0LnN1YnNjcmliZSh7IG5leHQ6IChtc2cpID0+IHtcblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/Lihtc2cpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHR9XG5cdFx0fSB9KTtcblx0XHR0aGlzLl9jaGFubmVscy5zZXQoY2hhbm5lbE5hbWUsIHRyYW5zcG9ydCk7XG5cdFx0cmV0dXJuIHRyYW5zcG9ydDtcblx0fVxuXHRnZXQoY2hhbm5lbE5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbHMuZ2V0KGNoYW5uZWxOYW1lKTtcblx0fVxuXHRzZW5kKGNoYW5uZWxOYW1lLCBtc2csIHRyYW5zZmVyKSB7XG5cdFx0dGhpcy5fY2hhbm5lbHMuZ2V0KGNoYW5uZWxOYW1lKT8uc2VuZChtc2csIHRyYW5zZmVyKTtcblx0fVxuXHRicm9hZGNhc3QobXNnLCB0cmFuc2Zlcikge1xuXHRcdGZvciAoY29uc3QgdHJhbnNwb3J0IG9mIHRoaXMuX2NoYW5uZWxzLnZhbHVlcygpKSB0cmFuc3BvcnQuc2VuZChtc2csIHRyYW5zZmVyKTtcblx0fVxuXHRyZXF1ZXN0KGNoYW5uZWxOYW1lLCBtc2cpIHtcblx0XHRjb25zdCBjaGFubmVsID0gdGhpcy5fY2hhbm5lbHMuZ2V0KGNoYW5uZWxOYW1lKTtcblx0XHRpZiAoIWNoYW5uZWwpIHJldHVybiBQcm9taXNlLnJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBDaGFubmVsICR7Y2hhbm5lbE5hbWV9IG5vdCBmb3VuZGApKTtcblx0XHRyZXR1cm4gY2hhbm5lbC5yZXF1ZXN0KG1zZyk7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdHJlbW92ZShjaGFubmVsTmFtZSkge1xuXHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLl9jaGFubmVscy5nZXQoY2hhbm5lbE5hbWUpO1xuXHRcdGlmIChjaGFubmVsKSB7XG5cdFx0XHRjaGFubmVsLmNsb3NlKCk7XG5cdFx0XHR0aGlzLl9jaGFubmVscy5kZWxldGUoY2hhbm5lbE5hbWUpO1xuXHRcdH1cblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHR0aGlzLl9zdWJzLmNsZWFyKCk7XG5cdFx0Zm9yIChjb25zdCBjaGFubmVsIG9mIHRoaXMuX2NoYW5uZWxzLnZhbHVlcygpKSBjaGFubmVsLmNsb3NlKCk7XG5cdFx0dGhpcy5fY2hhbm5lbHMuY2xlYXIoKTtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWVzKCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMuX2NoYW5uZWxzLmtleXMoKSk7XG5cdH1cblx0Z2V0IHNpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxzLnNpemU7XG5cdH1cbn07XG52YXIgV2luZG93UG9ydENvbm5lY3RvciA9IGNsYXNzIHtcblx0X3RhcmdldDtcblx0X2NoYW5uZWxOYW1lO1xuXHRfY29uZmlnO1xuXHRfdHJhbnNwb3J0ID0gbnVsbDtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9oYW5kc2hha2VDb21wbGV0ZSA9IGZhbHNlO1xuXHRjb25zdHJ1Y3RvcihfdGFyZ2V0LCBfY2hhbm5lbE5hbWUsIF9jb25maWcgPSB7fSkge1xuXHRcdHRoaXMuX3RhcmdldCA9IF90YXJnZXQ7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fY29uZmlnID0gX2NvbmZpZztcblx0fVxuXHRhc3luYyBjb25uZWN0KCkge1xuXHRcdGlmICh0aGlzLl90cmFuc3BvcnQgJiYgdGhpcy5faGFuZHNoYWtlQ29tcGxldGUpIHJldHVybiB0aGlzLl90cmFuc3BvcnQ7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImNvbm5lY3RpbmdcIik7XG5cdFx0Y29uc3QgeyBsb2NhbCwgcmVtb3RlIH0gPSBjcmVhdGVDaGFubmVsUGFpcih0aGlzLl9jaGFubmVsTmFtZSwgdGhpcy5fY29uZmlnKTtcblx0XHR0aGlzLl90YXJnZXQucG9zdE1lc3NhZ2Uoe1xuXHRcdFx0dHlwZTogXCJwb3J0LWNvbm5lY3RcIixcblx0XHRcdGNoYW5uZWxOYW1lOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHBvcnRJZDogbG9jYWwucG9ydElkXG5cdFx0fSwgdGhpcy5fY29uZmlnLnRhcmdldE9yaWdpbiA/PyBcIipcIiwgW3JlbW90ZV0pO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiSGFuZHNoYWtlIHRpbWVvdXRcIikpO1xuXHRcdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiZXJyb3JcIik7XG5cdFx0XHR9LCB0aGlzLl9jb25maWcuaGFuZHNoYWtlVGltZW91dCA/PyAxZTQpO1xuXHRcdFx0Y29uc3Qgc3ViID0gbG9jYWwuc3Vic2NyaWJlKHsgbmV4dDogKG1zZykgPT4ge1xuXHRcdFx0XHRpZiAobXNnLnR5cGUgPT09IFwic2lnbmFsXCIgJiYgbXNnLnBheWxvYWQ/LmFjdGlvbiA9PT0gXCJoYW5kc2hha2UtYWNrXCIpIHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0dGhpcy5faGFuZHNoYWtlQ29tcGxldGUgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuX3RyYW5zcG9ydCA9IGxvY2FsO1xuXHRcdFx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjb25uZWN0ZWRcIik7XG5cdFx0XHRcdFx0c3ViLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHRcdFx0cmVzb2x2ZShsb2NhbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gfSk7XG5cdFx0fSk7XG5cdH1cblx0c3RhdGljIGxpc3RlbihjaGFubmVsTmFtZSwgaGFuZGxlciwgY29uZmlnKSB7XG5cdFx0Y29uc3QgbXNnSGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHRpZiAoZS5kYXRhPy50eXBlICE9PSBcInBvcnQtY29ubmVjdFwiIHx8IGUuZGF0YT8uY2hhbm5lbE5hbWUgIT09IGNoYW5uZWxOYW1lKSByZXR1cm47XG5cdFx0XHRpZiAoIWUucG9ydHNbMF0pIHJldHVybjtcblx0XHRcdGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBQb3J0VHJhbnNwb3J0KGUucG9ydHNbMF0sIGNoYW5uZWxOYW1lLCBjb25maWcpO1xuXHRcdFx0dHJhbnNwb3J0LnNlbmQoe1xuXHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdGNoYW5uZWw6IGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRzZW5kZXI6IHRyYW5zcG9ydC5wb3J0SWQsXG5cdFx0XHRcdHR5cGU6IFwic2lnbmFsXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHsgYWN0aW9uOiBcImhhbmRzaGFrZS1hY2tcIiB9XG5cdFx0XHR9KTtcblx0XHRcdGhhbmRsZXIodHJhbnNwb3J0KTtcblx0XHR9O1xuXHRcdGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0cmV0dXJuICgpID0+IGdsb2JhbFRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdH1cblx0ZGlzY29ubmVjdCgpIHtcblx0XHR0aGlzLl90cmFuc3BvcnQ/LmNsb3NlKCk7XG5cdFx0dGhpcy5fdHJhbnNwb3J0ID0gbnVsbDtcblx0XHR0aGlzLl9oYW5kc2hha2VDb21wbGV0ZSA9IGZhbHNlO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJkaXNjb25uZWN0ZWRcIik7XG5cdH1cblx0Z2V0IGlzQ29ubmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzLl9oYW5kc2hha2VDb21wbGV0ZTtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCB0cmFuc3BvcnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3RyYW5zcG9ydDtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVBvcnRQcm94eSh0cmFuc3BvcnQsIHRhcmdldFBhdGggPSBbXSkge1xuXHRyZXR1cm4gY3JlYXRlU2VuZGVyUHJveHkoe1xuXHRcdHJlcXVlc3Q6IChtc2cpID0+IHRyYW5zcG9ydC5yZXF1ZXN0KG1zZyksXG5cdFx0Y2hhbm5lbE5hbWU6IHRyYW5zcG9ydC5jaGFubmVsTmFtZSxcblx0XHRzZW5kZXJJZDogdHJhbnNwb3J0LnBvcnRJZFxuXHR9LCB0YXJnZXRQYXRoKTtcbn1cbmZ1bmN0aW9uIGV4cG9zZU92ZXJQb3J0KHRyYW5zcG9ydCwgdGFyZ2V0KSB7XG5cdGNvbnN0IGhhbmRsZXIgPSBjcmVhdGVFeHBvc2VIYW5kbGVyKHRhcmdldCk7XG5cdHJldHVybiB0cmFuc3BvcnQuc3Vic2NyaWJlKHsgbmV4dDogYXN5bmMgKG1zZykgPT4ge1xuXHRcdGlmIChtc2cudHlwZSAhPT0gXCJyZXF1ZXN0XCIgfHwgIW1zZy5wYXlsb2FkPy5wYXRoKSByZXR1cm47XG5cdFx0Y29uc3QgeyBhY3Rpb24sIHBhdGgsIGFyZ3MgfSA9IG1zZy5wYXlsb2FkO1xuXHRcdGxldCByZXN1bHQ7XG5cdFx0bGV0IGVycm9yO1xuXHRcdHRyeSB7XG5cdFx0XHRyZXN1bHQgPSBhd2FpdCBoYW5kbGVyKGFjdGlvbiwgcGF0aCwgYXJncyA/PyBbXSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0ZXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG5cdFx0fVxuXHRcdHRyYW5zcG9ydC5zZW5kKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IG1zZy5zZW5kZXIsXG5cdFx0XHRzZW5kZXI6IHRyYW5zcG9ydC5wb3J0SWQsXG5cdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRyZXFJZDogbXNnLnJlcUlkLFxuXHRcdFx0cGF5bG9hZDogZXJyb3IgPyB7IGVycm9yIH0gOiB7IHJlc3VsdCB9XG5cdFx0fSk7XG5cdH0gfSk7XG59XG52YXIgUG9ydFRyYW5zcG9ydEZhY3RvcnkgPSB7XG5cdGNyZWF0ZTogKHBvcnQsIG5hbWUsIGNvbmZpZykgPT4gbmV3IFBvcnRUcmFuc3BvcnQocG9ydCwgbmFtZSwgY29uZmlnKSxcblx0Y3JlYXRlUGFpcjogKG5hbWUsIGNvbmZpZykgPT4gY3JlYXRlQ2hhbm5lbFBhaXIobmFtZSwgY29uZmlnKSxcblx0Y3JlYXRlUG9vbDogKGNvbmZpZykgPT4gbmV3IFBvcnRQb29sKGNvbmZpZyksXG5cdGNyZWF0ZVdpbmRvd0Nvbm5lY3RvcjogKHRhcmdldCwgbmFtZSwgY29uZmlnKSA9PiBuZXcgV2luZG93UG9ydENvbm5lY3Rvcih0YXJnZXQsIG5hbWUsIGNvbmZpZyksXG5cdGxpc3RlbjogV2luZG93UG9ydENvbm5lY3Rvci5saXN0ZW4sXG5cdGNyZWF0ZVByb3h5OiBjcmVhdGVQb3J0UHJveHksXG5cdGV4cG9zZTogZXhwb3NlT3ZlclBvcnRcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3N0b3JhZ2UvVHJhbnNmZXJhYmxlU3RvcmFnZS50c1xudmFyIFRyYW5zZmVyYWJsZVN0b3JhZ2UgPSBjbGFzcyB7XG5cdF9kYiA9IG51bGw7XG5cdF9jb25maWc7XG5cdF9jaGFuZ2VzID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRfY2xlYW51cFRpbWVyID0gbnVsbDtcblx0Y29uc3RydWN0b3IoY29uZmlnKSB7XG5cdFx0dGhpcy5fY29uZmlnID0ge1xuXHRcdFx0c3RvcmVOYW1lOiBcInRyYW5zZmVyYWJsZVwiLFxuXHRcdFx0dmVyc2lvbjogMSxcblx0XHRcdGluZGV4ZXM6IFtdLFxuXHRcdFx0ZW5hYmxlQ2hhbmdlVHJhY2tpbmc6IHRydWUsXG5cdFx0XHRhdXRvQ2xlYW51cEV4cGlyZWQ6IHRydWUsXG5cdFx0XHRjbGVhbnVwSW50ZXJ2YWw6IDZlNCxcblx0XHRcdC4uLmNvbmZpZ1xuXHRcdH07XG5cdH1cblx0YXN5bmMgb3BlbigpIHtcblx0XHRpZiAodGhpcy5fZGIpIHJldHVybjtcblx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwib3BlbmluZ1wiKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKHRoaXMuX2NvbmZpZy5kYk5hbWUsIHRoaXMuX2NvbmZpZy52ZXJzaW9uKTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3RhdGUubmV4dChcImVycm9yXCIpO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2U6ICR7cmVxdWVzdC5lcnJvcj8ubWVzc2FnZX1gKSk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2RiID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJvcGVuXCIpO1xuXHRcdFx0XHRpZiAodGhpcy5fY29uZmlnLmF1dG9DbGVhbnVwRXhwaXJlZCkgdGhpcy5fc3RhcnRDbGVhbnVwVGltZXIoKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcblx0XHRcdFx0aWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLl9jb25maWcuc3RvcmVOYW1lLCB7IGtleVBhdGg6IFwiaWRcIiB9KTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcImNyZWF0ZWRBdFwiLCBcImNyZWF0ZWRBdFwiKTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcInVwZGF0ZWRBdFwiLCBcInVwZGF0ZWRBdFwiKTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcImV4cGlyZXNBdFwiLCBcImV4cGlyZXNBdFwiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGlkeCBvZiB0aGlzLl9jb25maWcuaW5kZXhlcykgc3RvcmUuY3JlYXRlSW5kZXgoaWR4Lm5hbWUsIGlkeC5rZXlQYXRoLCB7IHVuaXF1ZTogaWR4LnVuaXF1ZSA/PyBmYWxzZSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHRpZiAodGhpcy5fY2xlYW51cFRpbWVyKSB7XG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMuX2NsZWFudXBUaW1lcik7XG5cdFx0XHR0aGlzLl9jbGVhbnVwVGltZXIgPSBudWxsO1xuXHRcdH1cblx0XHR0aGlzLl9kYj8uY2xvc2UoKTtcblx0XHR0aGlzLl9kYiA9IG51bGw7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImNsb3NlZFwiKTtcblx0fVxuXHRhc3luYyBwdXQoaWQsIGRhdGEsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGF3YWl0IHRoaXMuX2Vuc3VyZU9wZW4oKTtcblx0XHRsZXQgYnVmZmVycyA9IG9wdGlvbnMuYnVmZmVycyA/PyBbXTtcblx0XHRpZiAob3B0aW9ucy50cmFuc2ZlciAmJiBidWZmZXJzLmxlbmd0aCA+IDApIGJ1ZmZlcnMgPSBidWZmZXJzLm1hcCgoYnVmKSA9PiB7XG5cdFx0XHRpZiAoXCJ0cmFuc2ZlclwiIGluIGJ1ZiAmJiB0eXBlb2YgYnVmLnRyYW5zZmVyID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBidWYudHJhbnNmZXIoKTtcblx0XHRcdHJldHVybiBidWY7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMuZ2V0KGlkKTtcblx0XHRjb25zdCByZWNvcmQgPSB7XG5cdFx0XHRpZCxcblx0XHRcdGRhdGEsXG5cdFx0XHRidWZmZXJzOiBidWZmZXJzLmxlbmd0aCA+IDAgPyBidWZmZXJzIDogdm9pZCAwLFxuXHRcdFx0bWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG5cdFx0XHRjcmVhdGVkQXQ6IGV4aXN0aW5nPy5jcmVhdGVkQXQgPz8gbm93LFxuXHRcdFx0dXBkYXRlZEF0OiBub3csXG5cdFx0XHRleHBpcmVzQXQ6IG9wdGlvbnMuZXhwaXJlc0luID8gbm93ICsgb3B0aW9ucy5leHBpcmVzSW4gOiB2b2lkIDBcblx0XHR9O1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gdGhpcy5fZGIudHJhbnNhY3Rpb24odGhpcy5fY29uZmlnLnN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUodGhpcy5fY29uZmlnLnN0b3JlTmFtZSkucHV0KHJlY29yZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuX2NvbmZpZy5lbmFibGVDaGFuZ2VUcmFja2luZykgdGhpcy5fY2hhbmdlcy5uZXh0KHtcblx0XHRcdFx0XHR0eXBlOiBleGlzdGluZyA/IFwicHV0XCIgOiBcImFkZFwiLFxuXHRcdFx0XHRcdGtleTogaWQsXG5cdFx0XHRcdFx0cmVjb3JkLFxuXHRcdFx0XHRcdHByZXZpb3VzUmVjb3JkOiBleGlzdGluZyA/PyB2b2lkIDAsXG5cdFx0XHRcdFx0dGltZXN0YW1wOiBub3dcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJlc29sdmUocmVjb3JkKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgUHV0IGZhaWxlZDogJHtyZXF1ZXN0LmVycm9yPy5tZXNzYWdlfWApKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBwdXRCdWZmZXIoaWQsIGJ1ZmZlciwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0cmV0dXJuIHRoaXMucHV0KGlkLCBidWZmZXIsIHtcblx0XHRcdGJ1ZmZlcnM6IFtidWZmZXJdLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIHB1dFR5cGVkQXJyYXkoaWQsIGFycmF5LCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCBkYXRhID0ge1xuXHRcdFx0dHlwZTogYXJyYXkuY29uc3RydWN0b3IubmFtZSxcblx0XHRcdGRhdGE6IEFycmF5LmZyb20oYXJyYXkpXG5cdFx0fTtcblx0XHRyZXR1cm4gdGhpcy5wdXQoaWQsIGRhdGEsIHtcblx0XHRcdGJ1ZmZlcnM6IG9wdGlvbnMudHJhbnNmZXIgPyBbYXJyYXkuYnVmZmVyXSA6IHZvaWQgMCxcblx0XHRcdC4uLm9wdGlvbnNcblx0XHR9KTtcblx0fVxuXHRhc3luYyBnZXQoaWQpIHtcblx0XHRhd2FpdCB0aGlzLl9lbnN1cmVPcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9kYi50cmFuc2FjdGlvbih0aGlzLl9jb25maWcuc3RvcmVOYW1lLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUpLmdldChpZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChyZWNvcmQ/LmV4cGlyZXNBdCAmJiByZWNvcmQuZXhwaXJlc0F0IDwgRGF0ZS5ub3coKSkge1xuXHRcdFx0XHRcdHRoaXMuZGVsZXRlKGlkKTtcblx0XHRcdFx0XHRyZXNvbHZlKG51bGwpO1xuXHRcdFx0XHR9IGVsc2UgcmVzb2x2ZShyZWNvcmQgPz8gbnVsbCk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYEdldCBmYWlsZWQ6ICR7cmVxdWVzdC5lcnJvcj8ubWVzc2FnZX1gKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgZ2V0QnVmZmVyKGlkLCB0cmFuc2Zlcikge1xuXHRcdGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuZ2V0KGlkKTtcblx0XHRpZiAoIXJlY29yZCkgcmV0dXJuIG51bGw7XG5cdFx0bGV0IGJ1ZmZlciA9IHJlY29yZC5idWZmZXJzPy5bMF0gPz8gKHJlY29yZC5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyByZWNvcmQuZGF0YSA6IG51bGwpO1xuXHRcdGlmIChidWZmZXIgJiYgdHJhbnNmZXIpIHtcblx0XHRcdGlmIChcInRyYW5zZmVyXCIgaW4gYnVmZmVyICYmIHR5cGVvZiBidWZmZXIudHJhbnNmZXIgPT09IFwiZnVuY3Rpb25cIikgYnVmZmVyID0gYnVmZmVyLnRyYW5zZmVyKCk7XG5cdFx0fVxuXHRcdHJldHVybiBidWZmZXI7XG5cdH1cblx0YXN5bmMgZ2V0VHlwZWRBcnJheShpZCkge1xuXHRcdGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuZ2V0KGlkKTtcblx0XHRpZiAoIXJlY29yZCB8fCAhcmVjb3JkLmRhdGEgfHwgdHlwZW9mIHJlY29yZC5kYXRhICE9PSBcIm9iamVjdFwiKSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCB7IHR5cGUsIGRhdGEgfSA9IHJlY29yZC5kYXRhO1xuXHRcdGNvbnN0IFR5cGVkQXJyYXlDdG9yID0gZ2xvYmFsVGhpc1t0eXBlXTtcblx0XHRpZiAoIVR5cGVkQXJyYXlDdG9yKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gbmV3IFR5cGVkQXJyYXlDdG9yKGRhdGEpO1xuXHR9XG5cdGFzeW5jIGRlbGV0ZShpZCkge1xuXHRcdGF3YWl0IHRoaXMuX2Vuc3VyZU9wZW4oKTtcblx0XHRjb25zdCBleGlzdGluZyA9IHRoaXMuX2NvbmZpZy5lbmFibGVDaGFuZ2VUcmFja2luZyA/IGF3YWl0IHRoaXMuZ2V0KGlkKSA6IG51bGw7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9kYi50cmFuc2FjdGlvbih0aGlzLl9jb25maWcuc3RvcmVOYW1lLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZSh0aGlzLl9jb25maWcuc3RvcmVOYW1lKS5kZWxldGUoaWQpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLl9jb25maWcuZW5hYmxlQ2hhbmdlVHJhY2tpbmcgJiYgZXhpc3RpbmcpIHRoaXMuX2NoYW5nZXMubmV4dCh7XG5cdFx0XHRcdFx0dHlwZTogXCJkZWxldGVcIixcblx0XHRcdFx0XHRrZXk6IGlkLFxuXHRcdFx0XHRcdHByZXZpb3VzUmVjb3JkOiBleGlzdGluZyxcblx0XHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYERlbGV0ZSBmYWlsZWQ6ICR7cmVxdWVzdC5lcnJvcj8ubWVzc2FnZX1gKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgcXVlcnkocXVlcnkgPSB7fSkge1xuXHRcdGF3YWl0IHRoaXMuX2Vuc3VyZU9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSB0aGlzLl9kYi50cmFuc2FjdGlvbih0aGlzLl9jb25maWcuc3RvcmVOYW1lLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUpO1xuXHRcdFx0Y29uc3Qgc291cmNlID0gcXVlcnkuaW5kZXggPyBzdG9yZS5pbmRleChxdWVyeS5pbmRleCkgOiBzdG9yZTtcblx0XHRcdGNvbnN0IHJlc3VsdHMgPSBbXTtcblx0XHRcdGxldCBza2lwcGVkID0gMDtcblx0XHRcdGNvbnN0IG9mZnNldCA9IHF1ZXJ5Lm9mZnNldCA/PyAwO1xuXHRcdFx0Y29uc3QgbGltaXQgPSBxdWVyeS5saW1pdCA/PyBJbmZpbml0eTtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBzb3VyY2Uub3BlbkN1cnNvcihxdWVyeS5yYW5nZSwgcXVlcnkuZGlyZWN0aW9uKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjdXJzb3IgPSByZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0aWYgKCFjdXJzb3IgfHwgcmVzdWx0cy5sZW5ndGggPj0gbGltaXQpIHtcblx0XHRcdFx0XHRyZXNvbHZlKHJlc3VsdHMpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZWNvcmQgPSBjdXJzb3IudmFsdWU7XG5cdFx0XHRcdGlmIChyZWNvcmQuZXhwaXJlc0F0ICYmIHJlY29yZC5leHBpcmVzQXQgPCBEYXRlLm5vdygpKSB7XG5cdFx0XHRcdFx0Y3Vyc29yLmNvbnRpbnVlKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChxdWVyeS5maWx0ZXIgJiYgIXF1ZXJ5LmZpbHRlcihyZWNvcmQpKSB7XG5cdFx0XHRcdFx0Y3Vyc29yLmNvbnRpbnVlKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChza2lwcGVkIDwgb2Zmc2V0KSB7XG5cdFx0XHRcdFx0c2tpcHBlZCsrO1xuXHRcdFx0XHRcdGN1cnNvci5jb250aW51ZSgpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXN1bHRzLnB1c2gocmVjb3JkKTtcblx0XHRcdFx0Y3Vyc29yLmNvbnRpbnVlKCk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYFF1ZXJ5IGZhaWxlZDogJHtyZXF1ZXN0LmVycm9yPy5tZXNzYWdlfWApKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBiYXRjaChvcGVyYXRpb25zKSB7XG5cdFx0YXdhaXQgdGhpcy5fZW5zdXJlT3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IHRoaXMuX2RiLnRyYW5zYWN0aW9uKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUsIFwicmVhZHdyaXRlXCIpO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSB0eC5vYmplY3RTdG9yZSh0aGlzLl9jb25maWcuc3RvcmVOYW1lKTtcblx0XHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0XHRmb3IgKGNvbnN0IG9wIG9mIG9wZXJhdGlvbnMpIGlmIChvcC50eXBlID09PSBcInB1dFwiKSB7XG5cdFx0XHRcdGNvbnN0IHJlY29yZCA9IHtcblx0XHRcdFx0XHRpZDogb3AuaWQsXG5cdFx0XHRcdFx0ZGF0YTogb3AuZGF0YSxcblx0XHRcdFx0XHRtZXRhZGF0YTogb3Aub3B0aW9ucz8ubWV0YWRhdGEsXG5cdFx0XHRcdFx0Y3JlYXRlZEF0OiBub3csXG5cdFx0XHRcdFx0dXBkYXRlZEF0OiBub3csXG5cdFx0XHRcdFx0ZXhwaXJlc0F0OiBvcC5vcHRpb25zPy5leHBpcmVzSW4gPyBub3cgKyBvcC5vcHRpb25zLmV4cGlyZXNJbiA6IHZvaWQgMFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRzdG9yZS5wdXQocmVjb3JkKTtcblx0XHRcdH0gZWxzZSBpZiAob3AudHlwZSA9PT0gXCJkZWxldGVcIikgc3RvcmUuZGVsZXRlKG9wLmlkKTtcblx0XHRcdHR4Lm9uY29tcGxldGUgPSAoKSA9PiByZXNvbHZlKCk7XG5cdFx0XHR0eC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYEJhdGNoIGZhaWxlZDogJHt0eC5lcnJvcj8ubWVzc2FnZX1gKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgY2xlYXIoKSB7XG5cdFx0YXdhaXQgdGhpcy5fZW5zdXJlT3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gdGhpcy5fZGIudHJhbnNhY3Rpb24odGhpcy5fY29uZmlnLnN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUodGhpcy5fY29uZmlnLnN0b3JlTmFtZSkuY2xlYXIoKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5fY29uZmlnLmVuYWJsZUNoYW5nZVRyYWNraW5nKSB0aGlzLl9jaGFuZ2VzLm5leHQoe1xuXHRcdFx0XHRcdHR5cGU6IFwiY2xlYXJcIixcblx0XHRcdFx0XHRrZXk6IFwiKlwiLFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBDbGVhciBmYWlsZWQ6ICR7cmVxdWVzdC5lcnJvcj8ubWVzc2FnZX1gKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgY291bnQocXVlcnkpIHtcblx0XHRhd2FpdCB0aGlzLl9lbnN1cmVPcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHN0b3JlID0gdGhpcy5fZGIudHJhbnNhY3Rpb24odGhpcy5fY29uZmlnLnN0b3JlTmFtZSwgXCJyZWFkb25seVwiKS5vYmplY3RTdG9yZSh0aGlzLl9jb25maWcuc3RvcmVOYW1lKTtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSAocXVlcnk/LmluZGV4ID8gc3RvcmUuaW5kZXgocXVlcnkuaW5kZXgpIDogc3RvcmUpLmNvdW50KHF1ZXJ5Py5yYW5nZSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYENvdW50IGZhaWxlZDogJHtyZXF1ZXN0LmVycm9yPy5tZXNzYWdlfWApKTtcblx0XHR9KTtcblx0fVxuXHRvbkNoYW5nZXMoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9jaGFuZ2VzLnN1YnNjcmliZSh7IG5leHQ6IGhhbmRsZXIgfSk7XG5cdH1cblx0b25TdGF0ZShoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlLnN1YnNjcmliZSh7IG5leHQ6IGhhbmRsZXIgfSk7XG5cdH1cblx0YXN5bmMgY2xlYW51cEV4cGlyZWQoKSB7XG5cdFx0YXdhaXQgdGhpcy5fZW5zdXJlT3BlbigpO1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0Y29uc3QgZXhwaXJlZCA9IGF3YWl0IHRoaXMucXVlcnkoe1xuXHRcdFx0aW5kZXg6IFwiZXhwaXJlc0F0XCIsXG5cdFx0XHRyYW5nZTogSURCS2V5UmFuZ2UudXBwZXJCb3VuZChub3cpXG5cdFx0fSk7XG5cdFx0Zm9yIChjb25zdCByZWNvcmQgb2YgZXhwaXJlZCkgYXdhaXQgdGhpcy5kZWxldGUocmVjb3JkLmlkKTtcblx0XHRyZXR1cm4gZXhwaXJlZC5sZW5ndGg7XG5cdH1cblx0YXN5bmMgX2Vuc3VyZU9wZW4oKSB7XG5cdFx0aWYgKCF0aGlzLl9kYikgYXdhaXQgdGhpcy5vcGVuKCk7XG5cdH1cblx0X3N0YXJ0Q2xlYW51cFRpbWVyKCkge1xuXHRcdHRoaXMuX2NsZWFudXBUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdHRoaXMuY2xlYW51cEV4cGlyZWQoKS5jYXRjaChjb25zb2xlLmVycm9yKTtcblx0XHR9LCB0aGlzLl9jb25maWcuY2xlYW51cEludGVydmFsKTtcblx0fVxuXHRnZXQgaXNPcGVuKCkge1xuXHRcdHJldHVybiB0aGlzLl9kYiAhPT0gbnVsbDtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCBjaGFuZ2VzKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFuZ2VzO1xuXHR9XG59O1xudmFyIE1lc3NhZ2VRdWV1ZVN0b3JhZ2UgPSBjbGFzcyBleHRlbmRzIFRyYW5zZmVyYWJsZVN0b3JhZ2Uge1xuXHRjb25zdHJ1Y3RvcihkYk5hbWUgPSBcInVuaWZvcm0tbWVzc2FnZS1xdWV1ZVwiKSB7XG5cdFx0c3VwZXIoe1xuXHRcdFx0ZGJOYW1lLFxuXHRcdFx0c3RvcmVOYW1lOiBcIm1lc3NhZ2VzXCIsXG5cdFx0XHRpbmRleGVzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcImNoYW5uZWxcIixcblx0XHRcdFx0XHRrZXlQYXRoOiBcImNoYW5uZWxcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogXCJzdGF0dXNcIixcblx0XHRcdFx0XHRrZXlQYXRoOiBcInN0YXR1c1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcInByaW9yaXR5XCIsXG5cdFx0XHRcdFx0a2V5UGF0aDogXCJwcmlvcml0eVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcInNjaGVkdWxlZEZvclwiLFxuXHRcdFx0XHRcdGtleVBhdGg6IFwic2NoZWR1bGVkRm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFwiY2hhbm5lbC1zdGF0dXNcIixcblx0XHRcdFx0XHRrZXlQYXRoOiBbXCJjaGFubmVsXCIsIFwic3RhdHVzXCJdXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9KTtcblx0fVxuXHRhc3luYyBlbnF1ZXVlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGNvbnN0IGlkID0gVVVJRHY0KCk7XG5cdFx0Y29uc3QgcXVldWVkTWVzc2FnZSA9IHtcblx0XHRcdGlkLFxuXHRcdFx0Y2hhbm5lbDogbWVzc2FnZS5jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBtZXNzYWdlLnNlbmRlcixcblx0XHRcdHR5cGU6IG1lc3NhZ2UudHlwZSxcblx0XHRcdHBheWxvYWQ6IG1lc3NhZ2UucGF5bG9hZCxcblx0XHRcdHByaW9yaXR5OiBtZXNzYWdlLnByaW9yaXR5ID8/IDAsXG5cdFx0XHRhdHRlbXB0czogMCxcblx0XHRcdG1heEF0dGVtcHRzOiBtZXNzYWdlLm1heEF0dGVtcHRzID8/IDMsXG5cdFx0XHRzdGF0dXM6IFwicGVuZGluZ1wiLFxuXHRcdFx0Y3JlYXRlZEF0OiBub3csXG5cdFx0XHRzY2hlZHVsZWRGb3I6IG5vdyArIChtZXNzYWdlLmRlbGF5ID8/IDApLFxuXHRcdFx0ZXhwaXJlc0F0OiBtZXNzYWdlLmV4cGlyZXNJbiA/IG5vdyArIG1lc3NhZ2UuZXhwaXJlc0luIDogdm9pZCAwXG5cdFx0fTtcblx0XHRhd2FpdCB0aGlzLnB1dChpZCwgcXVldWVkTWVzc2FnZSk7XG5cdFx0cmV0dXJuIHF1ZXVlZE1lc3NhZ2U7XG5cdH1cblx0YXN5bmMgZGVxdWV1ZShjaGFubmVsKSB7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMucXVlcnkoe1xuXHRcdFx0ZmlsdGVyOiAocikgPT4gci5kYXRhLmNoYW5uZWwgPT09IGNoYW5uZWwgJiYgci5kYXRhLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCIgJiYgci5kYXRhLnNjaGVkdWxlZEZvciA8PSBub3cgJiYgKCFyLmRhdGEuZXhwaXJlc0F0IHx8IHIuZGF0YS5leHBpcmVzQXQgPiBub3cpLFxuXHRcdFx0bGltaXQ6IDFcblx0XHR9KTtcblx0XHRpZiAobWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNbMF0uZGF0YTtcblx0XHRtZXNzYWdlLnN0YXR1cyA9IFwicHJvY2Vzc2luZ1wiO1xuXHRcdG1lc3NhZ2UuYXR0ZW1wdHMrKztcblx0XHRtZXNzYWdlLmxhc3RBdHRlbXB0QXQgPSBub3c7XG5cdFx0YXdhaXQgdGhpcy5wdXQobWVzc2FnZS5pZCwgbWVzc2FnZSk7XG5cdFx0cmV0dXJuIG1lc3NhZ2U7XG5cdH1cblx0YXN5bmMgY29tcGxldGUoaWQpIHtcblx0XHRjb25zdCByZWNvcmQgPSBhd2FpdCB0aGlzLmdldChpZCk7XG5cdFx0aWYgKCFyZWNvcmQpIHJldHVybjtcblx0XHRyZWNvcmQuZGF0YS5zdGF0dXMgPSBcImNvbXBsZXRlZFwiO1xuXHRcdGF3YWl0IHRoaXMucHV0KGlkLCByZWNvcmQuZGF0YSk7XG5cdH1cblx0YXN5bmMgZmFpbChpZCwgZXJyb3IpIHtcblx0XHRjb25zdCByZWNvcmQgPSBhd2FpdCB0aGlzLmdldChpZCk7XG5cdFx0aWYgKCFyZWNvcmQpIHJldHVybjtcblx0XHRpZiAocmVjb3JkLmRhdGEuYXR0ZW1wdHMgPj0gcmVjb3JkLmRhdGEubWF4QXR0ZW1wdHMpIHJlY29yZC5kYXRhLnN0YXR1cyA9IFwiZmFpbGVkXCI7XG5cdFx0ZWxzZSByZWNvcmQuZGF0YS5zdGF0dXMgPSBcInBlbmRpbmdcIjtcblx0XHRyZWNvcmQuZGF0YS5lcnJvciA9IGVycm9yO1xuXHRcdGF3YWl0IHRoaXMucHV0KGlkLCByZWNvcmQuZGF0YSk7XG5cdH1cblx0YXN5bmMgZ2V0UGVuZGluZ0NvdW50KGNoYW5uZWwpIHtcblx0XHRyZXR1cm4gKGF3YWl0IHRoaXMucXVlcnkoeyBmaWx0ZXI6IChyKSA9PiByLmRhdGEuY2hhbm5lbCA9PT0gY2hhbm5lbCAmJiByLmRhdGEuc3RhdHVzID09PSBcInBlbmRpbmdcIiB9KSkubGVuZ3RoO1xuXHR9XG59O1xudmFyIFRyYW5zZmVyYWJsZVN0b3JhZ2VGYWN0b3J5ID0ge1xuXHRjcmVhdGU6IChjb25maWcpID0+IG5ldyBUcmFuc2ZlcmFibGVTdG9yYWdlKGNvbmZpZyksXG5cdGNyZWF0ZU1lc3NhZ2VRdWV1ZTogKGRiTmFtZSkgPT4gbmV3IE1lc3NhZ2VRdWV1ZVN0b3JhZ2UoZGJOYW1lKVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdHJhbnNwb3J0L1NlcnZpY2VXb3JrZXJIb3N0LnRzXG52YXIgU2VydmljZVdvcmtlckhvc3QgPSBjbGFzcyB7XG5cdF9jb25uZWN0aW9uO1xuXHRfc3RvcmFnZTtcblx0X2NsaWVudHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfY2hhbm5lbFN1YnNjcmliZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3N1YnNjcmlwdGlvbnMgPSBbXTtcblx0X2NsZWFudXBJbnRlcnZhbCA9IG51bGw7XG5cdF9jbGllbnRFdmVudHMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0X2NvbmZpZztcblx0Y29uc3RydWN0b3IoY29uZmlnKSB7XG5cdFx0dGhpcy5fY29uZmlnID0ge1xuXHRcdFx0ZW5hYmxlT2ZmbGluZVF1ZXVlOiB0cnVlLFxuXHRcdFx0bWF4T2ZmbGluZVF1ZXVlU2l6ZTogMTAwLFxuXHRcdFx0bWVzc2FnZVRUTDogODY0ZTUsXG5cdFx0XHRhdXRvQ2xlYW51cDogdHJ1ZSxcblx0XHRcdGNsZWFudXBJbnRlcnZhbDogNmU0LFxuXHRcdFx0Li4uY29uZmlnXG5cdFx0fTtcblx0XHR0aGlzLl9jb25uZWN0aW9uID0gZ2V0Q29ubmVjdGlvblBvb2woKS5nZXRPckNyZWF0ZSh0aGlzLl9jb25maWcuY2hhbm5lbE5hbWUsIFwic2VydmljZS13b3JrZXJcIiwgeyBtZXRhZGF0YTogeyBpc0hvc3Q6IHRydWUgfSB9KTtcblx0XHR0aGlzLl9zdG9yYWdlID0gZ2V0Q2hhbm5lbFN0b3JhZ2UodGhpcy5fY29uZmlnLmNoYW5uZWxOYW1lKTtcblx0XHR0aGlzLl9zZXR1cE1lc3NhZ2VIYW5kbGVycygpO1xuXHRcdGlmICh0aGlzLl9jb25maWcuYXV0b0NsZWFudXApIHRoaXMuX3N0YXJ0Q2xlYW51cEludGVydmFsKCk7XG5cdH1cblx0YXN5bmMgcmVnaXN0ZXJDbGllbnQoY2xpZW50SWQsIGNsaWVudEluZm8gPSB7fSkge1xuXHRcdGNvbnN0IGluZm8gPSB7XG5cdFx0XHRpZDogY2xpZW50SWQsXG5cdFx0XHR0eXBlOiBjbGllbnRJbmZvLnR5cGUgPz8gXCJ3aW5kb3dcIixcblx0XHRcdHVybDogY2xpZW50SW5mby51cmwgPz8gXCJcIixcblx0XHRcdHZpc2liaWxpdHlTdGF0ZTogY2xpZW50SW5mby52aXNpYmlsaXR5U3RhdGUgPz8gXCJ2aXNpYmxlXCIsXG5cdFx0XHRmb2N1c2VkOiBjbGllbnRJbmZvLmZvY3VzZWQgPz8gZmFsc2UsXG5cdFx0XHRjb25uZWN0ZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdGxhc3RTZWVuOiBEYXRlLm5vdygpLFxuXHRcdFx0Y2hhbm5lbHM6IG5ldyBTZXQoY2xpZW50SW5mby5jaGFubmVscyA/PyBbXSlcblx0XHR9O1xuXHRcdHRoaXMuX2NsaWVudHMuc2V0KGNsaWVudElkLCBpbmZvKTtcblx0XHR0aGlzLl9jbGllbnRFdmVudHMubmV4dCh7XG5cdFx0XHR0eXBlOiBcImNvbm5lY3RlZFwiLFxuXHRcdFx0Y2xpZW50OiBpbmZvXG5cdFx0fSk7XG5cdFx0YXdhaXQgdGhpcy5fZGVsaXZlclF1ZXVlZE1lc3NhZ2VzKGNsaWVudElkKTtcblx0fVxuXHR1bnJlZ2lzdGVyQ2xpZW50KGNsaWVudElkKSB7XG5cdFx0Y29uc3QgY2xpZW50ID0gdGhpcy5fY2xpZW50cy5nZXQoY2xpZW50SWQpO1xuXHRcdGlmIChjbGllbnQpIHtcblx0XHRcdGZvciAoY29uc3Qgc3Vic2NyaWJlcnMgb2YgdGhpcy5fY2hhbm5lbFN1YnNjcmliZXJzLnZhbHVlcygpKSBzdWJzY3JpYmVycy5kZWxldGUoY2xpZW50SWQpO1xuXHRcdFx0dGhpcy5fY2xpZW50cy5kZWxldGUoY2xpZW50SWQpO1xuXHRcdFx0dGhpcy5fY2xpZW50RXZlbnRzLm5leHQoe1xuXHRcdFx0XHR0eXBlOiBcImRpc2Nvbm5lY3RlZFwiLFxuXHRcdFx0XHRjbGllbnRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHR1cGRhdGVDbGllbnQoY2xpZW50SWQsIHVwZGF0ZXMpIHtcblx0XHRjb25zdCBjbGllbnQgPSB0aGlzLl9jbGllbnRzLmdldChjbGllbnRJZCk7XG5cdFx0aWYgKGNsaWVudCkge1xuXHRcdFx0T2JqZWN0LmFzc2lnbihjbGllbnQsIHVwZGF0ZXMsIHsgbGFzdFNlZW46IERhdGUubm93KCkgfSk7XG5cdFx0XHR0aGlzLl9jbGllbnRFdmVudHMubmV4dCh7XG5cdFx0XHRcdHR5cGU6IFwidXBkYXRlZFwiLFxuXHRcdFx0XHRjbGllbnRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRzdWJzY3JpYmVDbGllbnRUb0NoYW5uZWwoY2xpZW50SWQsIGNoYW5uZWwpIHtcblx0XHRjb25zdCBjbGllbnQgPSB0aGlzLl9jbGllbnRzLmdldChjbGllbnRJZCk7XG5cdFx0aWYgKGNsaWVudCkgY2xpZW50LmNoYW5uZWxzLmFkZChjaGFubmVsKTtcblx0XHRpZiAoIXRoaXMuX2NoYW5uZWxTdWJzY3JpYmVycy5oYXMoY2hhbm5lbCkpIHRoaXMuX2NoYW5uZWxTdWJzY3JpYmVycy5zZXQoY2hhbm5lbCwgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG5cdFx0dGhpcy5fY2hhbm5lbFN1YnNjcmliZXJzLmdldChjaGFubmVsKS5hZGQoY2xpZW50SWQpO1xuXHR9XG5cdHVuc3Vic2NyaWJlQ2xpZW50RnJvbUNoYW5uZWwoY2xpZW50SWQsIGNoYW5uZWwpIHtcblx0XHRjb25zdCBjbGllbnQgPSB0aGlzLl9jbGllbnRzLmdldChjbGllbnRJZCk7XG5cdFx0aWYgKGNsaWVudCkgY2xpZW50LmNoYW5uZWxzLmRlbGV0ZShjaGFubmVsKTtcblx0XHR0aGlzLl9jaGFubmVsU3Vic2NyaWJlcnMuZ2V0KGNoYW5uZWwpPy5kZWxldGUoY2xpZW50SWQpO1xuXHR9XG5cdGdldENsaWVudHMoKSB7XG5cdFx0cmV0dXJuIG5ldyBNYXAodGhpcy5fY2xpZW50cyk7XG5cdH1cblx0Z2V0Q2hhbm5lbFN1YnNjcmliZXJzKGNoYW5uZWwpIHtcblx0XHRyZXR1cm4gbmV3IFNldCh0aGlzLl9jaGFubmVsU3Vic2NyaWJlcnMuZ2V0KGNoYW5uZWwpID8/IFtdKTtcblx0fVxuXHRhc3luYyBzZW5kVG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpIHtcblx0XHRpZiAoIXRoaXMuX2NsaWVudHMuZ2V0KGNsaWVudElkKSkge1xuXHRcdFx0aWYgKHRoaXMuX2NvbmZpZy5lbmFibGVPZmZsaW5lUXVldWUpIGF3YWl0IHRoaXMuX3F1ZXVlTWVzc2FnZShjbGllbnRJZCwgbWVzc2FnZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9wb3N0VG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpO1xuXHR9XG5cdGFzeW5jIGJyb2FkY2FzdFRvQ2hhbm5lbChjaGFubmVsLCBtZXNzYWdlKSB7XG5cdFx0Y29uc3Qgc3Vic2NyaWJlcnMgPSB0aGlzLl9jaGFubmVsU3Vic2NyaWJlcnMuZ2V0KGNoYW5uZWwpO1xuXHRcdGlmICghc3Vic2NyaWJlcnMgfHwgc3Vic2NyaWJlcnMuc2l6ZSA9PT0gMCkgcmV0dXJuIDA7XG5cdFx0bGV0IGRlbGl2ZXJlZENvdW50ID0gMDtcblx0XHRmb3IgKGNvbnN0IGNsaWVudElkIG9mIHN1YnNjcmliZXJzKSBpZiAoYXdhaXQgdGhpcy5zZW5kVG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpKSBkZWxpdmVyZWRDb3VudCsrO1xuXHRcdHJldHVybiBkZWxpdmVyZWRDb3VudDtcblx0fVxuXHRhc3luYyBicm9hZGNhc3RUb0FsbChtZXNzYWdlKSB7XG5cdFx0bGV0IGRlbGl2ZXJlZENvdW50ID0gMDtcblx0XHRmb3IgKGNvbnN0IGNsaWVudElkIG9mIHRoaXMuX2NsaWVudHMua2V5cygpKSBpZiAoYXdhaXQgdGhpcy5zZW5kVG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpKSBkZWxpdmVyZWRDb3VudCsrO1xuXHRcdHJldHVybiBkZWxpdmVyZWRDb3VudDtcblx0fVxuXHRhc3luYyBoYW5kbGVDbGllbnRNZXNzYWdlKGNsaWVudElkLCBkYXRhKSB7XG5cdFx0dGhpcy51cGRhdGVDbGllbnQoY2xpZW50SWQsIHsgbGFzdFNlZW46IERhdGUubm93KCkgfSk7XG5cdFx0aWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKSByZXR1cm47XG5cdFx0c3dpdGNoIChkYXRhLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb25uZWN0XCI6XG5cdFx0XHRcdGF3YWl0IHRoaXMucmVnaXN0ZXJDbGllbnQoY2xpZW50SWQsIGRhdGEucGF5bG9hZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImRpc2Nvbm5lY3RcIjpcblx0XHRcdFx0dGhpcy51bnJlZ2lzdGVyQ2xpZW50KGNsaWVudElkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic3Vic2NyaWJlXCI6XG5cdFx0XHRcdHRoaXMuc3Vic2NyaWJlQ2xpZW50VG9DaGFubmVsKGNsaWVudElkLCBkYXRhLnBheWxvYWQ/LmNoYW5uZWwpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ1bnN1YnNjcmliZVwiOlxuXHRcdFx0XHR0aGlzLnVuc3Vic2NyaWJlQ2xpZW50RnJvbUNoYW5uZWwoY2xpZW50SWQsIGRhdGEucGF5bG9hZD8uY2hhbm5lbCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInJlcXVlc3RcIjpcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9oYW5kbGVSZXF1ZXN0KGRhdGEpO1xuXHRcdFx0XHRpZiAocmVzcG9uc2UpIGF3YWl0IHRoaXMuc2VuZFRvQ2xpZW50KGNsaWVudElkLCByZXNwb25zZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImV2ZW50XCI6XG5cdFx0XHRcdGlmIChkYXRhLmNoYW5uZWwpIGF3YWl0IHRoaXMuYnJvYWRjYXN0VG9DaGFubmVsKGRhdGEuY2hhbm5lbCwgZGF0YSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogdGhpcy5fY29ubmVjdGlvbi5wdXNoSW5ib3VuZCh7XG5cdFx0XHRcdC4uLmRhdGEsXG5cdFx0XHRcdF9jbGllbnRJZDogY2xpZW50SWRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRvbkNsaWVudEV2ZW50KGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2xpZW50RXZlbnRzLnN1YnNjcmliZSh7IG5leHQ6IGhhbmRsZXIgfSk7XG5cdH1cblx0b25NZXNzYWdlKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5zdWJzY3JpYmUoaGFuZGxlcik7XG5cdH1cblx0b25NZXNzYWdlVHlwZSh0eXBlLCBoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24uc3Vic2NyaWJlKChtc2cpID0+IHtcblx0XHRcdGlmIChtc2cudHlwZSA9PT0gdHlwZSkgaGFuZGxlcihtc2cpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIF9xdWV1ZU1lc3NhZ2UoY2xpZW50SWQsIG1lc3NhZ2UpIHtcblx0XHRhd2FpdCB0aGlzLl9zdG9yYWdlLmRlZmVyKHtcblx0XHRcdGNoYW5uZWw6IG1lc3NhZ2UuY2hhbm5lbCxcblx0XHRcdHNlbmRlcjogbWVzc2FnZS5zZW5kZXIsXG5cdFx0XHR0eXBlOiBtZXNzYWdlLnR5cGUsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdC4uLm1lc3NhZ2UucGF5bG9hZCxcblx0XHRcdFx0X3RhcmdldENsaWVudDogY2xpZW50SWRcblx0XHRcdH1cblx0XHR9LCB7XG5cdFx0XHRleHBpcmVzSW46IHRoaXMuX2NvbmZpZy5tZXNzYWdlVFRMLFxuXHRcdFx0cHJpb3JpdHk6IDAsXG5cdFx0XHRtZXRhZGF0YTogeyB0YXJnZXRDbGllbnQ6IGNsaWVudElkIH1cblx0XHR9KTtcblx0fVxuXHRhc3luYyBfZGVsaXZlclF1ZXVlZE1lc3NhZ2VzKGNsaWVudElkKSB7XG5cdFx0aWYgKCF0aGlzLl9jb25maWcuZW5hYmxlT2ZmbGluZVF1ZXVlKSByZXR1cm47XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBhd2FpdCB0aGlzLl9zdG9yYWdlLmdldERlZmVycmVkTWVzc2FnZXMoY2xpZW50SWQsIHsgc3RhdHVzOiBcInBlbmRpbmdcIiB9KTtcblx0XHRmb3IgKGNvbnN0IHN0b3JlZCBvZiBtZXNzYWdlcykge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IHtcblx0XHRcdFx0aWQ6IHN0b3JlZC5pZCxcblx0XHRcdFx0Y2hhbm5lbDogc3RvcmVkLmNoYW5uZWwsXG5cdFx0XHRcdHNlbmRlcjogc3RvcmVkLnNlbmRlcixcblx0XHRcdFx0dHlwZTogc3RvcmVkLnR5cGUsXG5cdFx0XHRcdHBheWxvYWQ6IHN0b3JlZC5wYXlsb2FkLFxuXHRcdFx0XHR0aW1lc3RhbXA6IHN0b3JlZC5jcmVhdGVkQXRcblx0XHRcdH07XG5cdFx0XHRpZiAoYXdhaXQgdGhpcy5fcG9zdFRvQ2xpZW50KGNsaWVudElkLCBtZXNzYWdlKSkgYXdhaXQgdGhpcy5fc3RvcmFnZS5tYXJrRGVsaXZlcmVkKHN0b3JlZC5pZCk7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIHN0YXJ0KCkge1xuXHRcdGF3YWl0IHRoaXMuX3N0b3JhZ2Uub3BlbigpO1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb24ubWFya0Nvbm5lY3RlZCgpO1xuXHRcdGF3YWl0IHRoaXMuX3N0b3JhZ2UuY2xlYW51cEV4cGlyZWQoKTtcblx0fVxuXHRzdG9wKCkge1xuXHRcdGlmICh0aGlzLl9jbGVhbnVwSW50ZXJ2YWwpIHtcblx0XHRcdGNsZWFySW50ZXJ2YWwodGhpcy5fY2xlYW51cEludGVydmFsKTtcblx0XHRcdHRoaXMuX2NsZWFudXBJbnRlcnZhbCA9IG51bGw7XG5cdFx0fVxuXHRcdGZvciAoY29uc3Qgc3ViIG9mIHRoaXMuX3N1YnNjcmlwdGlvbnMpIHN1Yi51bnN1YnNjcmliZSgpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMgPSBbXTtcblx0XHR0aGlzLl9jb25uZWN0aW9uLmNsb3NlKCk7XG5cdFx0dGhpcy5fc3RvcmFnZS5jbG9zZSgpO1xuXHR9XG5cdF9zZXR1cE1lc3NhZ2VIYW5kbGVycygpIHtcblx0XHRjb25zdCBtZXNzYWdlU3ViID0gdGhpcy5fY29ubmVjdGlvbi5zdWJzY3JpYmUoeyBuZXh0OiAobXNnKSA9PiB7XG5cdFx0XHRpZiAobXNnLnR5cGUgPT09IFwicmVxdWVzdFwiKSB0aGlzLl9oYW5kbGVSZXF1ZXN0KG1zZyk7XG5cdFx0fSB9KTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2gobWVzc2FnZVN1Yik7XG5cdH1cblx0YXN5bmMgX2hhbmRsZVJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVzcG9uc2UgPSB7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBtc2cuc2VuZGVyLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jb25maWcuY2hhbm5lbE5hbWUsXG5cdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRyZXFJZDogbXNnLnJlcUlkLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRyZXN1bHQ6IG51bGwsXG5cdFx0XHRcdGVycm9yOiBudWxsXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHR0cnkge1xuXHRcdFx0c3dpdGNoIChtc2cucGF5bG9hZD8uYWN0aW9uKSB7XG5cdFx0XHRcdGNhc2UgXCJnZXRDbGllbnRzXCI6XG5cdFx0XHRcdFx0cmVzcG9uc2UucGF5bG9hZC5yZXN1bHQgPSBBcnJheS5mcm9tKHRoaXMuX2NsaWVudHMudmFsdWVzKCkpLm1hcCgoYykgPT4gKHtcblx0XHRcdFx0XHRcdC4uLmMsXG5cdFx0XHRcdFx0XHRjaGFubmVsczogQXJyYXkuZnJvbShjLmNoYW5uZWxzKVxuXHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImdldENoYW5uZWxJbmZvXCI6XG5cdFx0XHRcdFx0Y29uc3QgY2hhbm5lbCA9IG1zZy5wYXlsb2FkPy5jaGFubmVsO1xuXHRcdFx0XHRcdHJlc3BvbnNlLnBheWxvYWQucmVzdWx0ID0ge1xuXHRcdFx0XHRcdFx0Y2hhbm5lbCxcblx0XHRcdFx0XHRcdHN1YnNjcmliZXJDb3VudDogdGhpcy5fY2hhbm5lbFN1YnNjcmliZXJzLmdldChjaGFubmVsKT8uc2l6ZSA/PyAwXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInBpbmdcIjpcblx0XHRcdFx0XHRyZXNwb25zZS5wYXlsb2FkLnJlc3VsdCA9IFwicG9uZ1wiO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRoaXMuX2Nvbm5lY3Rpb24ucHVzaEluYm91bmQobXNnKTtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0cmVzcG9uc2UucGF5bG9hZC5lcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlO1xuXHR9XG5cdGFzeW5jIF9wb3N0VG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpIHtcblx0XHRpZiAodHlwZW9mIGNsaWVudHMgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY2xpZW50ID0gYXdhaXQgY2xpZW50cy5nZXQoY2xpZW50SWQpO1xuXHRcdFx0aWYgKGNsaWVudCkge1xuXHRcdFx0XHRjbGllbnQucG9zdE1lc3NhZ2UobWVzc2FnZSk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJbU1dIb3N0XSBGYWlsZWQgdG8gcG9zdCB0byBjbGllbnQ6XCIsIGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0X3N0YXJ0Q2xlYW51cEludGVydmFsKCkge1xuXHRcdHRoaXMuX2NsZWFudXBJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdHRoaXMuX2NsZWFudXBTdGFsZUNsaWVudHMoKTtcblx0XHRcdHRoaXMuX3N0b3JhZ2UuY2xlYW51cEV4cGlyZWQoKTtcblx0XHR9LCB0aGlzLl9jb25maWcuY2xlYW51cEludGVydmFsKTtcblx0fVxuXHRhc3luYyBfY2xlYW51cFN0YWxlQ2xpZW50cygpIHtcblx0XHRpZiAodHlwZW9mIGNsaWVudHMgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcblx0XHRjb25zdCBhbGxDbGllbnRzID0gYXdhaXQgY2xpZW50cy5tYXRjaEFsbCh7IGluY2x1ZGVVbmNvbnRyb2xsZWQ6IHRydWUgfSk7XG5cdFx0Y29uc3QgYWN0aXZlSWRzID0gbmV3IFNldChhbGxDbGllbnRzLm1hcCgoYykgPT4gYy5pZCkpO1xuXHRcdGZvciAoY29uc3QgY2xpZW50SWQgb2YgdGhpcy5fY2xpZW50cy5rZXlzKCkpIGlmICghYWN0aXZlSWRzLmhhcyhjbGllbnRJZCkpIHRoaXMudW5yZWdpc3RlckNsaWVudChjbGllbnRJZCk7XG5cdH1cbn07XG52YXIgU2VydmljZVdvcmtlckNsaWVudCA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfcmVnaXN0cmF0aW9uID0gbnVsbDtcblx0X21lc3NhZ2VIYW5kbGVyID0gbnVsbDtcblx0X3N1YmplY3QgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0X3BlbmRpbmdSZXF1ZXN0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuXHRjb25zdHJ1Y3RvcihfY2hhbm5lbE5hbWUpIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0fVxuXHRhc3luYyBjb25uZWN0KCkge1xuXHRcdGlmICghKFwic2VydmljZVdvcmtlclwiIGluIG5hdmlnYXRvcikpIHRocm93IG5ldyBFcnJvcihcIlNlcnZpY2UgV29ya2VyIG5vdCBzdXBwb3J0ZWRcIik7XG5cdFx0dGhpcy5fcmVnaXN0cmF0aW9uID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHk7XG5cdFx0dGhpcy5fbWVzc2FnZUhhbmRsZXIgPSAoZXZlbnQpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSBldmVudC5kYXRhO1xuXHRcdFx0aWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKSByZXR1cm47XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIgJiYgZGF0YS5yZXFJZCkge1xuXHRcdFx0XHRjb25zdCByZXNvbHZlcnMgPSB0aGlzLl9wZW5kaW5nUmVxdWVzdHMuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocmVzb2x2ZXJzKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGVuZGluZ1JlcXVlc3RzLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0XHRpZiAoZGF0YS5wYXlsb2FkPy5lcnJvcikgcmVzb2x2ZXJzLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRcdFx0ZWxzZSByZXNvbHZlcnMucmVzb2x2ZShkYXRhLnBheWxvYWQ/LnJlc3VsdCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9zdWJqZWN0Lm5leHQoZGF0YSk7XG5cdFx0fTtcblx0XHRuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9tZXNzYWdlSGFuZGxlcik7XG5cdFx0dGhpcy5fc2VuZFRvU1coe1xuXHRcdFx0dHlwZTogXCJjb25uZWN0XCIsXG5cdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdFx0XHR2aXNpYmlsaXR5U3RhdGU6IGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSxcblx0XHRcdFx0Zm9jdXNlZDogZG9jdW1lbnQuaGFzRm9jdXMoKVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuX2lzQ29ubmVjdGVkID0gdHJ1ZTtcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCB0aGlzLl9vblZpc2liaWxpdHlDaGFuZ2UpO1xuXHR9XG5cdGRpc2Nvbm5lY3QoKSB7XG5cdFx0aWYgKHRoaXMuX21lc3NhZ2VIYW5kbGVyKSB7XG5cdFx0XHRuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9tZXNzYWdlSGFuZGxlcik7XG5cdFx0XHR0aGlzLl9tZXNzYWdlSGFuZGxlciA9IG51bGw7XG5cdFx0fVxuXHRcdHRoaXMuX3NlbmRUb1NXKHtcblx0XHRcdHR5cGU6IFwiZGlzY29ubmVjdFwiLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWVcblx0XHR9KTtcblx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCB0aGlzLl9vblZpc2liaWxpdHlDaGFuZ2UpO1xuXHRcdHRoaXMuX2lzQ29ubmVjdGVkID0gZmFsc2U7XG5cdH1cblx0c3Vic2NyaWJlVG9DaGFubmVsKGNoYW5uZWwpIHtcblx0XHR0aGlzLl9zZW5kVG9TVyh7XG5cdFx0XHR0eXBlOiBcInN1YnNjcmliZVwiLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRwYXlsb2FkOiB7IGNoYW5uZWwgfVxuXHRcdH0pO1xuXHR9XG5cdHVuc3Vic2NyaWJlRnJvbUNoYW5uZWwoY2hhbm5lbCkge1xuXHRcdHRoaXMuX3NlbmRUb1NXKHtcblx0XHRcdHR5cGU6IFwidW5zdWJzY3JpYmVcIixcblx0XHRcdGNoYW5uZWw6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0cGF5bG9hZDogeyBjaGFubmVsIH1cblx0XHR9KTtcblx0fVxuXHRhc3luYyByZXF1ZXN0KGFjdGlvbiwgcGF5bG9hZCA9IHt9KSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBVVUlEdjQoKTtcblx0XHRjb25zdCByZXNvbHZlcnMgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTtcblx0XHR0aGlzLl9wZW5kaW5nUmVxdWVzdHMuc2V0KHJlcUlkLCByZXNvbHZlcnMpO1xuXHRcdHRoaXMuX3NlbmRUb1NXKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwicmVxdWVzdFwiLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRzZW5kZXI6IFwiY2xpZW50XCIsXG5cdFx0XHRyZXFJZCxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHQuLi5wYXlsb2FkXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fcGVuZGluZ1JlcXVlc3RzLmhhcyhyZXFJZCkpIHtcblx0XHRcdFx0dGhpcy5fcGVuZGluZ1JlcXVlc3RzLmRlbGV0ZShyZXFJZCk7XG5cdFx0XHRcdHJlc29sdmVycy5yZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIlJlcXVlc3QgdGltZW91dFwiKSk7XG5cdFx0XHR9XG5cdFx0fSwgM2U0KTtcblx0XHRyZXR1cm4gcmVzb2x2ZXJzLnByb21pc2U7XG5cdH1cblx0ZW1pdChldmVudFR5cGUsIGRhdGEsIHRhcmdldENoYW5uZWwpIHtcblx0XHR0aGlzLl9zZW5kVG9TVyh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHR0eXBlOiBcImV2ZW50XCIsXG5cdFx0XHRjaGFubmVsOiB0YXJnZXRDaGFubmVsID8/IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0c2VuZGVyOiBcImNsaWVudFwiLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHR0eXBlOiBldmVudFR5cGUsXG5cdFx0XHRcdGRhdGFcblx0XHRcdH0sXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KTtcblx0fVxuXHRzdWJzY3JpYmUoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7IG5leHQ6IGhhbmRsZXIgfSk7XG5cdH1cblx0b24oZXZlbnRUeXBlLCBoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIGZpbHRlcigobSkgPT4gbS50eXBlID09PSBcImV2ZW50XCIgJiYgbS5wYXlsb2FkPy50eXBlID09PSBldmVudFR5cGUpKHRoaXMuX3N1YmplY3QpLnN1YnNjcmliZSh7IG5leHQ6IChtc2cpID0+IGhhbmRsZXIobXNnLnBheWxvYWQ/LmRhdGEpIH0pO1xuXHR9XG5cdGdldCBpc0Nvbm5lY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5faXNDb25uZWN0ZWQ7XG5cdH1cblx0X3NlbmRUb1NXKG1lc3NhZ2UpIHtcblx0XHRpZiAoIXRoaXMuX3JlZ2lzdHJhdGlvbj8uYWN0aXZlKSByZXR1cm47XG5cdFx0dGhpcy5fcmVnaXN0cmF0aW9uLmFjdGl2ZS5wb3N0TWVzc2FnZShtZXNzYWdlKTtcblx0fVxuXHRfb25WaXNpYmlsaXR5Q2hhbmdlID0gKCkgPT4ge1xuXHRcdGlmICghdGhpcy5faXNDb25uZWN0ZWQpIHJldHVybjtcblx0XHR0aGlzLl9zZW5kVG9TVyh7XG5cdFx0XHR0eXBlOiBcImV2ZW50XCIsXG5cdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0dHlwZTogXCJ2aXNpYmlsaXR5Q2hhbmdlXCIsXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHR2aXNpYmlsaXR5U3RhdGU6IGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSxcblx0XHRcdFx0XHRmb2N1c2VkOiBkb2N1bWVudC5oYXNGb2N1cygpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fTtcbn07XG5mdW5jdGlvbiBjcmVhdGVTZXJ2aWNlV29ya2VySG9zdChjb25maWcpIHtcblx0cmV0dXJuIG5ldyBTZXJ2aWNlV29ya2VySG9zdChjb25maWcpO1xufVxuZnVuY3Rpb24gY3JlYXRlU2VydmljZVdvcmtlckNsaWVudChjaGFubmVsTmFtZSkge1xuXHRyZXR1cm4gbmV3IFNlcnZpY2VXb3JrZXJDbGllbnQoY2hhbm5lbE5hbWUpO1xufVxuZnVuY3Rpb24gYmluZFNlcnZpY2VXb3JrZXJIb3N0QnJpZGdlKGhvc3QsIHNjb3BlID0gc2VsZikge1xuXHRjb25zdCBvbk1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBjbGllbnRJZCA9IFN0cmluZyhldmVudC5zb3VyY2U/LmlkIHx8IFwiXCIpLnRyaW0oKTtcblx0XHRpZiAoIWNsaWVudElkKSByZXR1cm47XG5cdFx0aG9zdC5oYW5kbGVDbGllbnRNZXNzYWdlKGNsaWVudElkLCBldmVudC5kYXRhKTtcblx0fTtcblx0c2NvcGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25NZXNzYWdlKTtcblx0aG9zdC5zdGFydCgpLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdGNvbnNvbGUud2FybihcIltTZXJ2aWNlV29ya2VySG9zdF0gRmFpbGVkIHRvIHN0YXJ0IGJvdW5kIGhvc3Q6XCIsIGVycm9yKTtcblx0fSk7XG5cdHJldHVybiB7IHN0b3AoKSB7XG5cdFx0c2NvcGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25NZXNzYWdlKTtcblx0XHRob3N0LnN0b3AoKTtcblx0fSB9O1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvVW5pZmllZFRyYW5zcG9ydC50c1xudmFyIEFic3RyYWN0VHJhbnNwb3J0ID0gY2xhc3Mge1xuXHRfdHlwZTtcblx0X2NoYW5uZWxOYW1lO1xuXHRfY29uZmlnO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9yZWFkeSA9IGZhbHNlO1xuXHRjb25zdHJ1Y3RvcihfdHlwZSwgX2NoYW5uZWxOYW1lLCBfY29uZmlnKSB7XG5cdFx0dGhpcy5fdHlwZSA9IF90eXBlO1xuXHRcdHRoaXMuX2NoYW5uZWxOYW1lID0gX2NoYW5uZWxOYW1lO1xuXHRcdHRoaXMuX2NvbmZpZyA9IF9jb25maWc7XG5cdH1cblx0cmVxdWVzdChtc2cpIHtcblx0XHRjb25zdCByZXFJZCA9IG1zZy5yZXFJZCA/PyBVVUlEdjQoKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShyZXFJZCk7XG5cdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUmVxdWVzdCB0aW1lb3V0XCIpKTtcblx0XHRcdH0sIHRoaXMuX2NvbmZpZy50aW1lb3V0ID8/IDNlNCk7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLnNldChyZXFJZCwge1xuXHRcdFx0XHRyZXNvbHZlOiAodikgPT4ge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRyZXNvbHZlKHYpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZWplY3Q6IChlKSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuc2VuZCh7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWQsXG5cdFx0XHRcdHR5cGU6IFwicmVxdWVzdFwiXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0X2hhbmRsZU1lc3NhZ2UoZGF0YSkge1xuXHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRpZiAocCkge1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0aWYgKGRhdGEucGF5bG9hZD8uZXJyb3IpIHAucmVqZWN0KG5ldyBFcnJvcihkYXRhLnBheWxvYWQuZXJyb3IpKTtcblx0XHRcdFx0ZWxzZSBwLnJlc29sdmUoZGF0YS5wYXlsb2FkPy5yZXN1bHQgPz8gZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdHMubmV4dD8uKGRhdGEpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHR9XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdHRoaXMuX3JlYWR5ID0gZmFsc2U7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImRpc2Nvbm5lY3RlZFwiKTtcblx0fVxuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdHlwZTtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxOYW1lO1xuXHR9XG5cdGdldCBpc1JlYWR5KCkge1xuXHRcdHJldHVybiB0aGlzLl9yZWFkeTtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG59O1xudmFyIE5hdGl2ZVRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgQWJzdHJhY3RUcmFuc3BvcnQge1xuXHRfdGFyZ2V0O1xuXHRfc2VuZEZuO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKF90YXJnZXQsIGNvbmZpZykge1xuXHRcdHN1cGVyKGRldGVjdFRyYW5zcG9ydFR5cGUkMShfdGFyZ2V0KSwgY29uZmlnLmNoYW5uZWxOYW1lLCBjb25maWcpO1xuXHRcdHRoaXMuX3RhcmdldCA9IF90YXJnZXQ7XG5cdFx0dGhpcy5fc2VuZEZuID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKF90YXJnZXQpO1xuXHRcdHRoaXMuX3NldHVwTGlzdGVuZXIoKTtcblx0fVxuXHRfc2V0dXBMaXN0ZW5lcigpIHtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fdGFyZ2V0LCAoZGF0YSkgPT4gdGhpcy5faGFuZGxlTWVzc2FnZShkYXRhKSwgKGVycikgPT4gdGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmVycm9yPy4oZXJyKSksICgpID0+IHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpKTtcblx0XHR0aGlzLl9yZWFkeSA9IHRydWU7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImNvbm5lY3RlZFwiKTtcblx0fVxuXHRzZW5kKG1zZywgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kRm4obXNnLCB0cmFuc2Zlcik7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0c3VwZXIuY2xvc2UoKTtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zcG9ydChjaGFubmVsTmFtZSwgb3B0aW9ucyA9IHt9LCBjb25maWcgPSB7fSkge1xuXHRjb25zdCBiYXNlQ29uZmlnID0ge1xuXHRcdGNoYW5uZWxOYW1lLFxuXHRcdHRpbWVvdXQ6IDNlNCxcblx0XHRhdXRvQ29ubmVjdDogdHJ1ZSxcblx0XHQuLi5jb25maWdcblx0fTtcblx0aWYgKG9wdGlvbnMud29ya2VyKSB7XG5cdFx0Y29uc3Qgd29ya2VyID0gb3B0aW9ucy53b3JrZXIuZXhpc3RpbmcgPz8gbmV3IFdvcmtlcihvcHRpb25zLndvcmtlci5zY3JpcHRVcmwsIG9wdGlvbnMud29ya2VyLm9wdGlvbnMpO1xuXHRcdHJldHVybiBuZXcgTmF0aXZlVHJhbnNwb3J0KHdvcmtlciwgYmFzZUNvbmZpZyk7XG5cdH1cblx0aWYgKG9wdGlvbnMuc2hhcmVkV29ya2VyKSB7XG5cdFx0Y29uc3QgY2xpZW50ID0gbmV3IFNoYXJlZFdvcmtlckNsaWVudChvcHRpb25zLnNoYXJlZFdvcmtlci5zY3JpcHRVcmwsIGNoYW5uZWxOYW1lLCBvcHRpb25zLnNoYXJlZFdvcmtlci5vcHRpb25zKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogKG1zZywgdHJhbnNmZXIpID0+IGNsaWVudC5zZW5kKG1zZywgdHJhbnNmZXIpLFxuXHRcdFx0cmVxdWVzdDogKG1zZykgPT4gY2xpZW50LnJlcXVlc3QobXNnKSxcblx0XHRcdHN1YnNjcmliZTogKG9icykgPT4gY2xpZW50LnN1YnNjcmliZShvYnMpLFxuXHRcdFx0Y2xvc2U6ICgpID0+IGNsaWVudC5jbG9zZSgpLFxuXHRcdFx0dHlwZTogXCJzaGFyZWQtd29ya2VyXCIsXG5cdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdGlzUmVhZHk6IHRydWVcblx0XHR9O1xuXHR9XG5cdGlmIChvcHRpb25zLndlYnNvY2tldCkge1xuXHRcdGNvbnN0IHdzID0gY3JlYXRlV2ViU29ja2V0VHJhbnNwb3J0KG9wdGlvbnMud2Vic29ja2V0LnVybCwge1xuXHRcdFx0cHJvdG9jb2xzOiBvcHRpb25zLndlYnNvY2tldC5wcm90b2NvbHMsXG5cdFx0XHRyZWNvbm5lY3Q6IG9wdGlvbnMud2Vic29ja2V0LnJlY29ubmVjdFxuXHRcdH0pO1xuXHRcdGNvbnN0IHN1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRcdGNvbnN0IHBlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdHdzLmxpc3RlbigoZGF0YSkgPT4ge1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIGRhdGEucmVxSWQpIHtcblx0XHRcdFx0Y29uc3QgcCA9IHBlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdHBlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmVycm9yKSBwLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRcdFx0ZWxzZSBwLnJlc29sdmUoZGF0YS5wYXlsb2FkPy5yZXN1bHQgPz8gZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3QgcyBvZiBzdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/LihkYXRhKTtcblx0XHRcdH0gY2F0Y2gge31cblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogKG1zZywgdHJhbnNmZXIpID0+IHdzLnNlbmQobXNnLCB0cmFuc2ZlciksXG5cdFx0XHRyZXF1ZXN0OiAobXNnKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlcUlkID0gbXNnLnJlcUlkID8/IFVVSUR2NCgpO1xuXHRcdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0cGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUmVxdWVzdCB0aW1lb3V0XCIpKTtcblx0XHRcdFx0fSwgYmFzZUNvbmZpZy50aW1lb3V0KTtcblx0XHRcdFx0cGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdFx0XHRyZXNvbHZlOiAodikgPT4ge1xuXHRcdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh2KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlamVjdDogKGUpID0+IHtcblx0XHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d3Muc2VuZCh7XG5cdFx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRcdHJlcUlkLFxuXHRcdFx0XHRcdHR5cGU6IFwicmVxdWVzdFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSksXG5cdFx0XHRzdWJzY3JpYmU6IChvYnMpID0+IHtcblx0XHRcdFx0Y29uc3QgbyA9IHR5cGVvZiBvYnMgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzIH0gOiBvYnM7XG5cdFx0XHRcdHN1YnMuYWRkKG8pO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHN1YnMuZGVsZXRlKG8pXG5cdFx0XHRcdH07XG5cdFx0XHR9LFxuXHRcdFx0Y2xvc2U6ICgpID0+IHtcblx0XHRcdFx0c3Vicy5jbGVhcigpO1xuXHRcdFx0XHR3cy5jbG9zZSgpO1xuXHRcdFx0fSxcblx0XHRcdHR5cGU6IFwid2Vic29ja2V0XCIsXG5cdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdGlzUmVhZHk6IHdzLnNvY2tldC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTlxuXHRcdH07XG5cdH1cblx0aWYgKG9wdGlvbnMuYnJvYWRjYXN0KSB7XG5cdFx0Y29uc3QgYmMgPSBjcmVhdGVCcm9hZGNhc3RUcmFuc3BvcnQob3B0aW9ucy5icm9hZGNhc3QubmFtZSA/PyBjaGFubmVsTmFtZSk7XG5cdFx0cmV0dXJuIG5ldyBOYXRpdmVUcmFuc3BvcnQoYmMuY2hhbm5lbCwgYmFzZUNvbmZpZyk7XG5cdH1cblx0aWYgKG9wdGlvbnMucG9ydD8ucG9ydCkge1xuXHRcdGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBQb3J0VHJhbnNwb3J0KG9wdGlvbnMucG9ydC5wb3J0LCBjaGFubmVsTmFtZSwgb3B0aW9ucy5wb3J0LmNvbmZpZyk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IChtc2csIHRyYW5zZmVyKSA9PiB0cmFuc3BvcnQuc2VuZChtc2csIHRyYW5zZmVyKSxcblx0XHRcdHJlcXVlc3Q6IChtc2cpID0+IHRyYW5zcG9ydC5yZXF1ZXN0KG1zZyksXG5cdFx0XHRzdWJzY3JpYmU6IChvYnMpID0+IHRyYW5zcG9ydC5zdWJzY3JpYmUob2JzKSxcblx0XHRcdGNsb3NlOiAoKSA9PiB0cmFuc3BvcnQuY2xvc2UoKSxcblx0XHRcdHR5cGU6IFwibWVzc2FnZS1wb3J0XCIsXG5cdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdGlzUmVhZHk6IHRyYW5zcG9ydC5pc0xpc3RlbmluZ1xuXHRcdH07XG5cdH1cblx0aWYgKG9wdGlvbnMuY2hyb21lKSB7XG5cdFx0aWYgKG9wdGlvbnMuY2hyb21lLm1vZGUgPT09IFwicnVudGltZVwiKSB7XG5cdFx0XHRjb25zdCBvYnMgPSBuZXcgQ2hyb21lUnVudGltZU9ic2VydmFibGUodm9pZCAwLCBvcHRpb25zLmNocm9tZS5vcHRpb25zKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbmQ6IChtc2cpID0+IG9icy5zZW5kKG1zZyksXG5cdFx0XHRcdHJlcXVlc3Q6IChtc2cpID0+IG9icy5yZXF1ZXN0KG1zZyksXG5cdFx0XHRcdHN1YnNjcmliZTogKG8pID0+IG9icy5zdWJzY3JpYmUobyksXG5cdFx0XHRcdGNsb3NlOiAoKSA9PiBvYnMuY2xvc2UoKSxcblx0XHRcdFx0dHlwZTogXCJjaHJvbWUtcnVudGltZVwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKG9wdGlvbnMuY2hyb21lLm1vZGUgPT09IFwidGFic1wiKSB7XG5cdFx0XHRjb25zdCBvYnMgPSBuZXcgQ2hyb21lVGFic09ic2VydmFibGUob3B0aW9ucy5jaHJvbWUudGFiSWQsIG9wdGlvbnMuY2hyb21lLm9wdGlvbnMpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VuZDogKG1zZykgPT4gb2JzLnNlbmQobXNnKSxcblx0XHRcdFx0cmVxdWVzdDogKCkgPT4gUHJvbWlzZS5yZWplY3QoXCJOb3Qgc3VwcG9ydGVkXCIpLFxuXHRcdFx0XHRzdWJzY3JpYmU6IChvKSA9PiBvYnMuc3Vic2NyaWJlKG8pLFxuXHRcdFx0XHRjbG9zZTogKCkgPT4gb2JzLmNsb3NlKCksXG5cdFx0XHRcdHR5cGU6IFwiY2hyb21lLXRhYnNcIixcblx0XHRcdFx0Y2hhbm5lbE5hbWUsXG5cdFx0XHRcdGlzUmVhZHk6IHRydWVcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChvcHRpb25zLmNocm9tZS5tb2RlID09PSBcInBvcnRcIikge1xuXHRcdFx0Y29uc3Qgb2JzID0gbmV3IENocm9tZVBvcnRPYnNlcnZhYmxlKG9wdGlvbnMuY2hyb21lLnBvcnROYW1lID8/IGNoYW5uZWxOYW1lLCBvcHRpb25zLmNocm9tZS50YWJJZCk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZW5kOiAobXNnKSA9PiBvYnMuc2VuZChtc2cpLFxuXHRcdFx0XHRyZXF1ZXN0OiAoKSA9PiBQcm9taXNlLnJlamVjdChcIk5vdCBzdXBwb3J0ZWRcIiksXG5cdFx0XHRcdHN1YnNjcmliZTogKG8pID0+IG9icy5zdWJzY3JpYmUobyksXG5cdFx0XHRcdGNsb3NlOiAoKSA9PiBvYnMuY2xvc2UoKSxcblx0XHRcdFx0dHlwZTogXCJjaHJvbWUtcG9ydFwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogb2JzLmlzQ29ubmVjdGVkXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5jaHJvbWUubW9kZSA9PT0gXCJleHRlcm5hbFwiKSB7XG5cdFx0XHRjb25zdCBvYnMgPSBuZXcgQ2hyb21lRXh0ZXJuYWxPYnNlcnZhYmxlKG9wdGlvbnMuY2hyb21lLm9wdGlvbnM/LmV4dGVuc2lvbklkKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbmQ6IChtc2cpID0+IG9icy5zZW5kKG1zZyksXG5cdFx0XHRcdHJlcXVlc3Q6ICgpID0+IFByb21pc2UucmVqZWN0KFwiTm90IHN1cHBvcnRlZFwiKSxcblx0XHRcdFx0c3Vic2NyaWJlOiAobykgPT4gb2JzLnN1YnNjcmliZShvKSxcblx0XHRcdFx0Y2xvc2U6ICgpID0+IG9icy5jbG9zZSgpLFxuXHRcdFx0XHR0eXBlOiBcImNocm9tZS1leHRlcm5hbFwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0aWYgKG9wdGlvbnMuc29ja2V0aW8pIHtcblx0XHRjb25zdCBvYnMgPSBuZXcgU29ja2V0SU9PYnNlcnZhYmxlKG9wdGlvbnMuc29ja2V0aW8uc29ja2V0LCBjaGFubmVsTmFtZSwgb3B0aW9ucy5zb2NrZXRpby5vcHRpb25zKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogKG1zZykgPT4gb2JzLnNlbmQobXNnKSxcblx0XHRcdHJlcXVlc3Q6IChtc2cpID0+IG9icy5yZXF1ZXN0KG1zZyksXG5cdFx0XHRzdWJzY3JpYmU6IChvKSA9PiBvYnMuc3Vic2NyaWJlKG8pLFxuXHRcdFx0Y2xvc2U6ICgpID0+IG9icy5jbG9zZSgpLFxuXHRcdFx0dHlwZTogXCJzb2NrZXQtaW9cIixcblx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0aXNSZWFkeTogb2JzLmlzQ29ubmVjdGVkXG5cdFx0fTtcblx0fVxuXHRpZiAob3B0aW9ucy5zZXJ2aWNlV29ya2VyKSB7XG5cdFx0aWYgKG9wdGlvbnMuc2VydmljZVdvcmtlci5tb2RlID09PSBcImhvc3RcIikge1xuXHRcdFx0Y29uc3QgaG9zdCA9IG5ldyBTZXJ2aWNlV29ya2VySG9zdCh7XG5cdFx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0XHQuLi5vcHRpb25zLnNlcnZpY2VXb3JrZXIuY29uZmlnID8/IHt9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGJyaWRnZSA9IGJpbmRTZXJ2aWNlV29ya2VySG9zdEJyaWRnZShob3N0KTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbmQ6IChtc2cpID0+IHtcblx0XHRcdFx0XHRob3N0LmJyb2FkY2FzdFRvQWxsKG1zZyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlcXVlc3Q6ICgpID0+IFByb21pc2UucmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJTZXJ2aWNlV29ya2VySG9zdCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCByZXF1ZXN0KCk7IHVzZSBob3N0IEFQSXMgZGlyZWN0bHkuXCIpKSxcblx0XHRcdFx0c3Vic2NyaWJlOiAobykgPT4gaG9zdC5vbk1lc3NhZ2UodHlwZW9mIG8gPT09IFwiZnVuY3Rpb25cIiA/IG8gOiAobSkgPT4gby5uZXh0Py4obSkpLFxuXHRcdFx0XHRjbG9zZTogKCkgPT4gYnJpZGdlLnN0b3AoKSxcblx0XHRcdFx0dHlwZTogXCJzZXJ2aWNlLXdvcmtlclwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKG9wdGlvbnMuc2VydmljZVdvcmtlci5tb2RlID09PSBcImNsaWVudFwiKSB7XG5cdFx0XHRjb25zdCBjbGllbnQgPSBuZXcgU2VydmljZVdvcmtlckNsaWVudChjaGFubmVsTmFtZSk7XG5cdFx0XHRjbGllbnQuY29ubmVjdCgpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VuZDogKG1zZykgPT4gY2xpZW50LmVtaXQobXNnLnR5cGUsIG1zZy5wYXlsb2FkLCBtc2cuY2hhbm5lbCksXG5cdFx0XHRcdHJlcXVlc3Q6IChtc2cpID0+IGNsaWVudC5yZXF1ZXN0KG1zZy5wYXlsb2FkPy5hY3Rpb24gPz8gXCJ1bmtub3duXCIsIG1zZy5wYXlsb2FkKSxcblx0XHRcdFx0c3Vic2NyaWJlOiAobykgPT4gY2xpZW50LnN1YnNjcmliZSh0eXBlb2YgbyA9PT0gXCJmdW5jdGlvblwiID8gbyA6IChtKSA9PiBvLm5leHQ/LihtKSksXG5cdFx0XHRcdGNsb3NlOiAoKSA9PiBjbGllbnQuZGlzY29ubmVjdCgpLFxuXHRcdFx0XHR0eXBlOiBcInNlcnZpY2Utd29ya2VyXCIsXG5cdFx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRpc1JlYWR5OiBjbGllbnQuaXNDb25uZWN0ZWRcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdGlmIChvcHRpb25zLmF0b21pY3MpIHtcblx0XHRjb25zdCB0cmFuc3BvcnQgPSBuZXcgQXRvbWljc1RyYW5zcG9ydChjaGFubmVsTmFtZSwgb3B0aW9ucy5hdG9taWNzLnNlbmRCdWZmZXIsIG9wdGlvbnMuYXRvbWljcy5yZWN2QnVmZmVyLCBvcHRpb25zLmF0b21pY3MuY29uZmlnKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogKG1zZywgdHJhbnNmZXIpID0+IHRyYW5zcG9ydC5zZW5kKG1zZyksXG5cdFx0XHRyZXF1ZXN0OiAobXNnKSA9PiB0cmFuc3BvcnQucmVxdWVzdChtc2cpLFxuXHRcdFx0c3Vic2NyaWJlOiAobykgPT4gdHJhbnNwb3J0LnN1YnNjcmliZShvKSxcblx0XHRcdGNsb3NlOiAoKSA9PiB0cmFuc3BvcnQuY2xvc2UoKSxcblx0XHRcdHR5cGU6IFwiYXRvbWljc1wiLFxuXHRcdFx0Y2hhbm5lbE5hbWUsXG5cdFx0XHRpc1JlYWR5OiB0cnVlXG5cdFx0fTtcblx0fVxuXHRpZiAob3B0aW9ucy5ydGMpIHtcblx0XHRpZiAob3B0aW9ucy5ydGMubW9kZSA9PT0gXCJwZWVyXCIpIHtcblx0XHRcdGNvbnN0IHBlZXIgPSBuZXcgUlRDUGVlclRyYW5zcG9ydChjaGFubmVsTmFtZSwgb3B0aW9ucy5ydGMuY29uZmlnKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbmQ6IChtc2cpID0+IHBlZXIuc2VuZChtc2cpLFxuXHRcdFx0XHRyZXF1ZXN0OiAobXNnKSA9PiBwZWVyLnJlcXVlc3QobXNnKSxcblx0XHRcdFx0c3Vic2NyaWJlOiAobykgPT4gcGVlci5zdWJzY3JpYmUobyksXG5cdFx0XHRcdGNsb3NlOiAoKSA9PiBwZWVyLmNsb3NlKCksXG5cdFx0XHRcdHR5cGU6IFwicnRjLWRhdGFcIixcblx0XHRcdFx0Y2hhbm5lbE5hbWUsXG5cdFx0XHRcdGlzUmVhZHk6IHBlZXIuY29ubmVjdGlvblN0YXRlID09PSBcImNvbm5lY3RlZFwiXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5ydGMubW9kZSA9PT0gXCJtYW5hZ2VyXCIpIHtcblx0XHRcdGNvbnN0IG1hbmFnZXIgPSBuZXcgUlRDUGVlck1hbmFnZXIoY2hhbm5lbE5hbWUsIG9wdGlvbnMucnRjLmNvbmZpZyk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZW5kOiAobXNnKSA9PiBtYW5hZ2VyLmJyb2FkY2FzdChtc2cpLFxuXHRcdFx0XHRyZXF1ZXN0OiAoKSA9PiBQcm9taXNlLnJlamVjdChcIlVzZSBtYW5hZ2VyLnJlcXVlc3QocGVlcklkLCBtc2cpIGRpcmVjdGx5XCIpLFxuXHRcdFx0XHRzdWJzY3JpYmU6IChvKSA9PiBtYW5hZ2VyLnN1YnNjcmliZShvKSxcblx0XHRcdFx0Y2xvc2U6ICgpID0+IG1hbmFnZXIuY2xvc2UoKSxcblx0XHRcdFx0dHlwZTogXCJydGMtZGF0YVwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgc3ViamVjdCA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRyZXR1cm4ge1xuXHRcdHNlbmQ6IChtc2cpID0+IHN1YmplY3QubmV4dChtc2cpLFxuXHRcdHJlcXVlc3Q6ICgpID0+IFByb21pc2UucmVqZWN0KFwiSW50ZXJuYWwgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgcmVxdWVzdFwiKSxcblx0XHRzdWJzY3JpYmU6IChvKSA9PiBzdWJqZWN0LnN1YnNjcmliZShvKSxcblx0XHRjbG9zZTogKCkgPT4gc3ViamVjdC5jb21wbGV0ZSgpLFxuXHRcdHR5cGU6IFwiaW50ZXJuYWxcIixcblx0XHRjaGFubmVsTmFtZSxcblx0XHRpc1JlYWR5OiB0cnVlXG5cdH07XG59XG52YXIgVHJhbnNwb3J0UmVnaXN0cnkgPSBjbGFzcyB7XG5cdF90cmFuc3BvcnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cmVnaXN0ZXIobmFtZSwgdHJhbnNwb3J0KSB7XG5cdFx0dGhpcy5fdHJhbnNwb3J0cy5zZXQobmFtZSwgdHJhbnNwb3J0KTtcblx0fVxuXHRnZXQobmFtZSkge1xuXHRcdHJldHVybiB0aGlzLl90cmFuc3BvcnRzLmdldChuYW1lKTtcblx0fVxuXHRnZXRPckNyZWF0ZShuYW1lLCBvcHRpb25zID0ge30sIGNvbmZpZyA9IHt9KSB7XG5cdFx0bGV0IHRyYW5zcG9ydCA9IHRoaXMuX3RyYW5zcG9ydHMuZ2V0KG5hbWUpO1xuXHRcdGlmICghdHJhbnNwb3J0KSB7XG5cdFx0XHR0cmFuc3BvcnQgPSBjcmVhdGVUcmFuc3BvcnQobmFtZSwgb3B0aW9ucywgY29uZmlnKTtcblx0XHRcdHRoaXMuX3RyYW5zcG9ydHMuc2V0KG5hbWUsIHRyYW5zcG9ydCk7XG5cdFx0fVxuXHRcdHJldHVybiB0cmFuc3BvcnQ7XG5cdH1cblx0cmVtb3ZlKG5hbWUpIHtcblx0XHRjb25zdCB0cmFuc3BvcnQgPSB0aGlzLl90cmFuc3BvcnRzLmdldChuYW1lKTtcblx0XHRpZiAodHJhbnNwb3J0KSB7XG5cdFx0XHR0cmFuc3BvcnQuY2xvc2UoKTtcblx0XHRcdHRoaXMuX3RyYW5zcG9ydHMuZGVsZXRlKG5hbWUpO1xuXHRcdH1cblx0fVxuXHRjbG9zZUFsbCgpIHtcblx0XHRmb3IgKGNvbnN0IHRyYW5zcG9ydCBvZiB0aGlzLl90cmFuc3BvcnRzLnZhbHVlcygpKSB0cmFuc3BvcnQuY2xvc2UoKTtcblx0XHR0aGlzLl90cmFuc3BvcnRzLmNsZWFyKCk7XG5cdH1cblx0bGlzdCgpIHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl90cmFuc3BvcnRzLmtleXMoKSk7XG5cdH1cblx0Z2V0IHNpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3RyYW5zcG9ydHMuc2l6ZTtcblx0fVxufTtcbnZhciBfcmVnaXN0cnkgPSBudWxsO1xuZnVuY3Rpb24gZ2V0VHJhbnNwb3J0UmVnaXN0cnkoKSB7XG5cdGlmICghX3JlZ2lzdHJ5KSBfcmVnaXN0cnkgPSBuZXcgVHJhbnNwb3J0UmVnaXN0cnkoKTtcblx0cmV0dXJuIF9yZWdpc3RyeTtcbn1cbnZhciBVbmlmaWVkVHJhbnNwb3J0RmFjdG9yeSA9IHtcblx0Y3JlYXRlOiBjcmVhdGVUcmFuc3BvcnQsXG5cdHJlZ2lzdHJ5OiBnZXRUcmFuc3BvcnRSZWdpc3RyeSxcblx0ZnJvbVdvcmtlcjogKHdvcmtlciwgbmFtZSwgY29uZmlnKSA9PiBjcmVhdGVUcmFuc3BvcnQobmFtZSwgeyB3b3JrZXI6IHsgZXhpc3Rpbmc6IHdvcmtlciB9IH0sIGNvbmZpZyksXG5cdGZyb21Qb3J0OiAocG9ydCwgbmFtZSwgY29uZmlnKSA9PiBjcmVhdGVUcmFuc3BvcnQobmFtZSwgeyBwb3J0OiB7IHBvcnQgfSB9LCBjb25maWcpLFxuXHRmcm9tV2ViU29ja2V0OiAodXJsLCBuYW1lLCBjb25maWcpID0+IGNyZWF0ZVRyYW5zcG9ydChuYW1lLCB7IHdlYnNvY2tldDogeyB1cmwgfSB9LCBjb25maWcpLFxuXHRmcm9tQnJvYWRjYXN0OiAobmFtZSwgY29uZmlnKSA9PiBjcmVhdGVUcmFuc3BvcnQobmFtZSwgeyBicm9hZGNhc3Q6IHt9IH0sIGNvbmZpZyksXG5cdHNoYXJlZFdvcmtlcjoge1xuXHRcdGNsaWVudDogKHVybCwgbmFtZSwgb3B0cykgPT4gbmV3IFNoYXJlZFdvcmtlckNsaWVudCh1cmwsIG5hbWUsIG9wdHMpLFxuXHRcdGhvc3Q6IChuYW1lKSA9PiBuZXcgU2hhcmVkV29ya2VySG9zdChuYW1lKVxuXHR9LFxuXHRhdG9taWNzOiB7XG5cdFx0Y3JlYXRlOiAobmFtZSwgc2VuZCwgcmVjdiwgY29uZmlnKSA9PiBuZXcgQXRvbWljc1RyYW5zcG9ydChuYW1lLCBzZW5kLCByZWN2LCBjb25maWcpLFxuXHRcdGNyZWF0ZVBhaXI6IGNyZWF0ZUF0b21pY3NDaGFubmVsUGFpcixcblx0XHRidWZmZXI6IChzaXplKSA9PiBuZXcgQXRvbWljc0J1ZmZlcihzaXplKSxcblx0XHRyaW5nQnVmZmVyOiAoKSA9PiBuZXcgQXRvbWljc1JpbmdCdWZmZXIoKVxuXHR9LFxuXHRydGM6IHtcblx0XHRwZWVyOiAobmFtZSwgY29uZmlnKSA9PiBuZXcgUlRDUGVlclRyYW5zcG9ydChuYW1lLCBjb25maWcpLFxuXHRcdG1hbmFnZXI6IChuYW1lLCBjb25maWcpID0+IG5ldyBSVENQZWVyTWFuYWdlcihuYW1lLCBjb25maWcpLFxuXHRcdHNpZ25hbGluZzogY3JlYXRlQnJvYWRjYXN0U2lnbmFsaW5nXG5cdH0sXG5cdHBvcnQ6IHtcblx0XHRjcmVhdGU6IChwb3J0LCBuYW1lLCBjb25maWcpID0+IG5ldyBQb3J0VHJhbnNwb3J0KHBvcnQsIG5hbWUsIGNvbmZpZyksXG5cdFx0Y3JlYXRlUGFpcjogY3JlYXRlQ2hhbm5lbFBhaXIsXG5cdFx0cG9vbDogKGNvbmZpZykgPT4gbmV3IFBvcnRQb29sKGNvbmZpZyksXG5cdFx0d2luZG93Q29ubmVjdG9yOiAodGFyZ2V0LCBuYW1lKSA9PiBuZXcgV2luZG93UG9ydENvbm5lY3Rvcih0YXJnZXQsIG5hbWUpXG5cdH0sXG5cdHN0b3JhZ2U6IHtcblx0XHRjcmVhdGU6IChjb25maWcpID0+IG5ldyBUcmFuc2ZlcmFibGVTdG9yYWdlKGNvbmZpZyksXG5cdFx0bWVzc2FnZVF1ZXVlOiAoZGJOYW1lKSA9PiBuZXcgTWVzc2FnZVF1ZXVlU3RvcmFnZShkYk5hbWUpXG5cdH0sXG5cdHNlcnZpY2VXb3JrZXI6IHtcblx0XHRob3N0OiAoY29uZmlnKSA9PiBuZXcgU2VydmljZVdvcmtlckhvc3QoY29uZmlnKSxcblx0XHRjbGllbnQ6IChuYW1lKSA9PiBuZXcgU2VydmljZVdvcmtlckNsaWVudChuYW1lKVxuXHR9LFxuXHRzb2NrZXRpbzogKHNvY2tldCwgbmFtZSwgb3B0cykgPT4gbmV3IFNvY2tldElPT2JzZXJ2YWJsZShzb2NrZXQsIG5hbWUsIG9wdHMpLFxuXHRjaHJvbWU6IHtcblx0XHRydW50aW1lOiAob3B0cykgPT4gbmV3IENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlKHZvaWQgMCwgb3B0cyksXG5cdFx0dGFiczogKHRhYklkLCBvcHRzKSA9PiBuZXcgQ2hyb21lVGFic09ic2VydmFibGUodGFiSWQsIG9wdHMpLFxuXHRcdHBvcnQ6IChuYW1lLCB0YWJJZCkgPT4gbmV3IENocm9tZVBvcnRPYnNlcnZhYmxlKG5hbWUsIHRhYklkKVxuXHR9LFxuXHRkZXRlY3Q6IGRldGVjdFRyYW5zcG9ydFR5cGUkMSxcblx0bWV0YTogZ2V0VHJhbnNwb3J0TWV0YVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvc3RvcmFnZS9RdWV1ZWQudHNcbnZhciBRdWV1ZWRXb3JrZXJDaGFubmVsID0gY2xhc3Mge1xuXHRjb25maWc7XG5cdG9uQ2hhbm5lbFJlYWR5O1xuXHR1bmRlcmx5aW5nQ2hhbm5lbCA9IG51bGw7XG5cdGlzQ29ubmVjdGVkID0gZmFsc2U7XG5cdHJlcXVlc3RRdWV1ZSA9IFtdO1xuXHRjb25uZWN0aW9uUHJvbWlzZSA9IG51bGw7XG5cdGNvbm5lY3Rpb25SZXNvbHZlciA9IG51bGw7XG5cdGNvbnRleHQ7XG5cdGNvbnN0cnVjdG9yKGNvbmZpZywgb25DaGFubmVsUmVhZHkpIHtcblx0XHR0aGlzLmNvbmZpZyA9IGNvbmZpZztcblx0XHR0aGlzLm9uQ2hhbm5lbFJlYWR5ID0gb25DaGFubmVsUmVhZHk7XG5cdFx0dGhpcy5jb250ZXh0ID0gY29uZmlnLmNvbnRleHQgPz8gXCJ1bmtub3duXCI7XG5cdH1cblx0YXN5bmMgY29ubmVjdCh1bmRlcmx5aW5nQ2hhbm5lbCA9IG51bGwpIHtcblx0XHR0aGlzLnVuZGVybHlpbmdDaGFubmVsID0gdW5kZXJseWluZ0NoYW5uZWw7XG5cdH1cblx0YXN5bmMgcmVxdWVzdChtZXRob2QsIGFyZ3MgPSBbXSkge1xuXHRcdGlmICh0aGlzLmlzQ29ubmVjdGVkICYmIHRoaXMudW5kZXJseWluZ0NoYW5uZWwpIHJldHVybiB0aGlzLnVuZGVybHlpbmdDaGFubmVsLnJlcXVlc3QobWV0aG9kLCBhcmdzKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcXVldWVkUmVxdWVzdCA9IHtcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHRtZXRob2QsXG5cdFx0XHRcdGFyZ3MsXG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdCxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9O1xuXHRcdFx0dGhpcy5yZXF1ZXN0UXVldWUucHVzaChxdWV1ZWRSZXF1ZXN0KTtcblx0XHRcdGlmICghdGhpcy5jb25uZWN0aW9uUHJvbWlzZSkgdGhpcy5jb25uZWN0KCkuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVqZWN0QWxsUXVldWVkKGVycm9yKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGZsdXNoUXVldWUoKSB7XG5cdFx0aWYgKCF0aGlzLnVuZGVybHlpbmdDaGFubmVsKSByZXR1cm47XG5cdFx0Y29uc3QgcXVldWVDb3B5ID0gWy4uLnRoaXMucmVxdWVzdFF1ZXVlXTtcblx0XHR0aGlzLnJlcXVlc3RRdWV1ZSA9IFtdO1xuXHRcdGZvciAoY29uc3QgcXVldWVkUmVxdWVzdCBvZiBxdWV1ZUNvcHkpIHRyeSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnVuZGVybHlpbmdDaGFubmVsLnJlcXVlc3QocXVldWVkUmVxdWVzdC5tZXRob2QsIHF1ZXVlZFJlcXVlc3QuYXJncyk7XG5cdFx0XHRxdWV1ZWRSZXF1ZXN0LnJlc29sdmUocmVzdWx0KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0cXVldWVkUmVxdWVzdC5yZWplY3QoZXJyb3IpO1xuXHRcdH1cblx0fVxuXHRyZWplY3RBbGxRdWV1ZWQoZXJyb3IpIHtcblx0XHRjb25zdCBxdWV1ZUNvcHkgPSBbLi4udGhpcy5yZXF1ZXN0UXVldWVdO1xuXHRcdHRoaXMucmVxdWVzdFF1ZXVlID0gW107XG5cdFx0Zm9yIChjb25zdCBxdWV1ZWRSZXF1ZXN0IG9mIHF1ZXVlQ29weSkgcXVldWVkUmVxdWVzdC5yZWplY3QoZXJyb3IpO1xuXHR9XG5cdGdldFF1ZXVlU3RhdHVzKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpc0Nvbm5lY3RlZDogdGhpcy5pc0Nvbm5lY3RlZCxcblx0XHRcdHF1ZXVlZFJlcXVlc3RzOiB0aGlzLnJlcXVlc3RRdWV1ZS5sZW5ndGgsXG5cdFx0XHRpc0Nvbm5lY3Rpbmc6ICEhdGhpcy5jb25uZWN0aW9uUHJvbWlzZSAmJiAhdGhpcy5pc0Nvbm5lY3RlZFxuXHRcdH07XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5yZWplY3RBbGxRdWV1ZWQoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkNoYW5uZWwgY2xvc2VkXCIpKTtcblx0XHR0aGlzLnVuZGVybHlpbmdDaGFubmVsPy5jbG9zZSgpO1xuXHRcdHRoaXMudW5kZXJseWluZ0NoYW5uZWwgPSBudWxsO1xuXHRcdHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcblx0XHR0aGlzLmNvbm5lY3Rpb25Qcm9taXNlID0gbnVsbDtcblx0fVxufTtcbnZhciBnZXRDdXJyZW50VGFiSWQgPSBhc3luYyAoKSA9PiB7XG5cdGNvbnN0IHRhYnMgPSBhd2FpdCBjaHJvbWUudGFicy5xdWVyeSh7XG5cdFx0YWN0aXZlOiB0cnVlLFxuXHRcdGN1cnJlbnRXaW5kb3c6IHRydWVcblx0fSk7XG5cdGlmICh0YWJzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gYWN0aXZlIHRhYiBmb3VuZFwiKTtcblx0aWYgKCF0YWJzWzBdLmlkKSB0aHJvdyBuZXcgRXJyb3IoXCJBY3RpdmUgdGFiIGhhcyBubyBJRFwiKTtcblx0cmV0dXJuIHRhYnNbMF0uaWQ7XG59O1xudmFyIGdldFZpc2libGVUYWJJZCA9IGFzeW5jICgpID0+IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gYXdhaXQgZ2V0Q3VycmVudFRhYklkKCk7XG5cdH0gY2F0Y2gge1xuXHRcdGNvbnN0IHZpc2libGVUYWIgPSAoYXdhaXQgY2hyb21lLnRhYnMucXVlcnkoeyBjdXJyZW50V2luZG93OiB0cnVlIH0pKS5maW5kKCh0YWIpID0+IHRhYi5hY3RpdmUpO1xuXHRcdGlmICghdmlzaWJsZVRhYj8uaWQpIHRocm93IG5ldyBFcnJvcihcIk5vIHZpc2libGUgdGFiIGZvdW5kXCIpO1xuXHRcdHJldHVybiB2aXNpYmxlVGFiLmlkO1xuXHR9XG59O1xudmFyIHJlZ2lzdGVyV29ya2VyQVBJID0gKGFwaSwgY2hhbm5lbE5hbWUgPSBcIndvcmtlclwiKSA9PiB7XG5cdGNvbnN0IGNoYW5uZWxIYW5kbGVyID0gaW5pdENoYW5uZWxIYW5kbGVyKGNoYW5uZWxOYW1lID8/IFwid29ya2VyXCIpO1xuXHRPYmplY3Qua2V5cyhhcGkpLmZvckVhY2goKG1ldGhvZE5hbWUpID0+IHtcblx0XHRpZiAodHlwZW9mIGFwaVttZXRob2ROYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7fVxuXHR9KTtcblx0cmV0dXJuIGNoYW5uZWxIYW5kbGVyO1xufTtcbnZhciBPcHRpbWl6ZWRXb3JrZXJDaGFubmVsID0gY2xhc3Mge1xuXHRjaGFubmVsID0gbnVsbDtcblx0aXNDaGFubmVsUmVhZHkgPSBmYWxzZTtcblx0cGVuZGluZ1JlcXVlc3RzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0bWVzc2FnZVF1ZXVlID0gW107XG5cdHF1ZXVlZFJlcXVlc3RzID0gW107XG5cdGJhdGNoVGltZXI7XG5cdG9wdGlvbnM7XG5cdG9uQ2hhbm5lbFJlYWR5O1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsID0gbnVsbCwgb3B0aW9ucyA9IHt9LCBvbkNoYW5uZWxSZWFkeSkge1xuXHRcdHRoaXMuY2hhbm5lbCA9IGNoYW5uZWw7XG5cdFx0dGhpcy5pc0NoYW5uZWxSZWFkeSA9ICEhY2hhbm5lbDtcblx0XHR0aGlzLm9uQ2hhbm5lbFJlYWR5ID0gb25DaGFubmVsUmVhZHk7XG5cdFx0dGhpcy5vcHRpb25zID0ge1xuXHRcdFx0dGltZW91dDogM2U0LFxuXHRcdFx0cmV0cmllczogMyxcblx0XHRcdGNvbXByZXNzaW9uOiBmYWxzZSxcblx0XHRcdGJhdGNoaW5nOiB0cnVlLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH07XG5cdH1cblx0c2V0Q2hhbm5lbChjaGFubmVsKSB7XG5cdFx0dGhpcy5jaGFubmVsID0gY2hhbm5lbDtcblx0XHR0aGlzLmlzQ2hhbm5lbFJlYWR5ID0gdHJ1ZTtcblx0XHR0aGlzLm9uQ2hhbm5lbFJlYWR5Py4oY2hhbm5lbCk7XG5cdFx0dGhpcy5mbHVzaFF1ZXVlZFJlcXVlc3RzKCk7XG5cdH1cblx0YXN5bmMgcmVxdWVzdCh0eXBlLCBwYXlsb2FkLCBvcHRpb25zKSB7XG5cdFx0aWYgKCF0aGlzLmlzQ2hhbm5lbFJlYWR5IHx8ICF0aGlzLmNoYW5uZWwpIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBxdWV1ZWRSZXF1ZXN0ID0ge1xuXHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdG1ldGhvZDogdHlwZSxcblx0XHRcdFx0YXJnczogW3BheWxvYWRdLFxuXHRcdFx0XHRyZXNvbHZlLFxuXHRcdFx0XHRyZWplY3QsXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fTtcblx0XHRcdHRoaXMucXVldWVkUmVxdWVzdHMucHVzaChxdWV1ZWRSZXF1ZXN0KTtcblx0XHR9KTtcblx0XHRjb25zdCBvcHRzID0ge1xuXHRcdFx0Li4udGhpcy5vcHRpb25zLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH07XG5cdFx0Y29uc3QgbWVzc2FnZUlkID0gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKG1lc3NhZ2VJZCk7XG5cdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBSZXF1ZXN0IHRpbWVvdXQ6ICR7dHlwZX1gKSk7XG5cdFx0XHR9LCBvcHRzLnRpbWVvdXQpO1xuXHRcdFx0dGhpcy5wZW5kaW5nUmVxdWVzdHMuc2V0KG1lc3NhZ2VJZCwge1xuXHRcdFx0XHRyZXNvbHZlLFxuXHRcdFx0XHRyZWplY3QsXG5cdFx0XHRcdHRpbWVvdXRcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgZW52ZWxvcGUgPSB7XG5cdFx0XHRcdGlkOiBtZXNzYWdlSWQsXG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdHBheWxvYWQsXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fTtcblx0XHRcdGlmIChvcHRzLmJhdGNoaW5nKSB0aGlzLnF1ZXVlTWVzc2FnZShlbnZlbG9wZSk7XG5cdFx0XHRlbHNlIHRoaXMuc2VuZE1lc3NhZ2UoZW52ZWxvcGUpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGZsdXNoUXVldWVkUmVxdWVzdHMoKSB7XG5cdFx0aWYgKCF0aGlzLmNoYW5uZWwgfHwgdGhpcy5xdWV1ZWRSZXF1ZXN0cy5sZW5ndGggPT09IDApIHJldHVybjtcblx0XHRjb25zdCBxdWV1ZUNvcHkgPSBbLi4udGhpcy5xdWV1ZWRSZXF1ZXN0c107XG5cdFx0dGhpcy5xdWV1ZWRSZXF1ZXN0cyA9IFtdO1xuXHRcdGZvciAoY29uc3QgcXVldWVkUmVxdWVzdCBvZiBxdWV1ZUNvcHkpIHRyeSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QocXVldWVkUmVxdWVzdC5tZXRob2QsIC4uLnF1ZXVlZFJlcXVlc3Q/LmFyZ3MgPz8gW10pO1xuXHRcdFx0cXVldWVkUmVxdWVzdC5yZXNvbHZlKHJlc3VsdCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHF1ZXVlZFJlcXVlc3QucmVqZWN0KGVycm9yKTtcblx0XHR9XG5cdH1cblx0bm90aWZ5KHR5cGUsIHBheWxvYWQpIHtcblx0XHRjb25zdCBlbnZlbG9wZSA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGUsXG5cdFx0XHRwYXlsb2FkLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHRpZiAodGhpcy5vcHRpb25zLmJhdGNoaW5nKSB0aGlzLnF1ZXVlTWVzc2FnZShlbnZlbG9wZSk7XG5cdFx0ZWxzZSB0aGlzLnNlbmRNZXNzYWdlKGVudmVsb3BlKTtcblx0fVxuXHRhc3luYyAqc3RyZWFtKHR5cGUsIGRhdGEpIHtcblx0XHRmb3IgKGNvbnN0IGNodW5rIG9mIGRhdGEpIHlpZWxkIGF3YWl0IHRoaXMucmVxdWVzdChgJHt0eXBlfTpjaHVua2AsIGNodW5rKTtcblx0fVxuXHRxdWV1ZU1lc3NhZ2UoZW52ZWxvcGUpIHtcblx0XHR0aGlzLm1lc3NhZ2VRdWV1ZS5wdXNoKGVudmVsb3BlKTtcblx0XHRpZiAoIXRoaXMuYmF0Y2hUaW1lcikgdGhpcy5iYXRjaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmZsdXNoQmF0Y2goKTtcblx0XHR9LCAxNik7XG5cdH1cblx0Zmx1c2hCYXRjaCgpIHtcblx0XHRpZiAodGhpcy5tZXNzYWdlUXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG5cdFx0Y29uc3QgYmF0Y2hFbnZlbG9wZSA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwiYmF0Y2hcIixcblx0XHRcdHBheWxvYWQ6IHRoaXMubWVzc2FnZVF1ZXVlLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHR0aGlzLnNlbmRNZXNzYWdlKGJhdGNoRW52ZWxvcGUpO1xuXHRcdHRoaXMubWVzc2FnZVF1ZXVlID0gW107XG5cdFx0dGhpcy5iYXRjaFRpbWVyID0gdm9pZCAwO1xuXHR9XG5cdGFzeW5jIHNlbmRNZXNzYWdlKGVudmVsb3BlKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2hhbm5lbD8ucmVxdWVzdD8uKFwicHJvY2Vzc01lc3NhZ2VcIiwgW2VudmVsb3BlXSk7XG5cdFx0XHRpZiAoZW52ZWxvcGUucmVwbHlUbyAmJiB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5oYXMoZW52ZWxvcGUucmVwbHlUbykpIHtcblx0XHRcdFx0Y29uc3QgeyByZXNvbHZlLCB0aW1lb3V0IH0gPSB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5nZXQoZW52ZWxvcGUucmVwbHlUbyk7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0dGhpcy5wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKGVudmVsb3BlLnJlcGx5VG8pO1xuXHRcdFx0XHRyZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGlmICh0aGlzLnBlbmRpbmdSZXF1ZXN0cy5oYXMoZW52ZWxvcGUuaWQpKSB7XG5cdFx0XHRcdGNvbnN0IHsgcmVqZWN0LCB0aW1lb3V0IH0gPSB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5nZXQoZW52ZWxvcGUuaWQpO1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdHRoaXMucGVuZGluZ1JlcXVlc3RzLmRlbGV0ZShlbnZlbG9wZS5pZCk7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNsb3NlKCkge1xuXHRcdGlmICh0aGlzLmJhdGNoVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZXIpO1xuXHRcdGZvciAoY29uc3QgW2lkLCB7IHJlamVjdCwgdGltZW91dCB9XSBvZiB0aGlzLnBlbmRpbmdSZXF1ZXN0cykge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0cmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJDaGFubmVsIGNsb3NlZFwiKSk7XG5cdFx0fVxuXHRcdHRoaXMucGVuZGluZ1JlcXVlc3RzLmNsZWFyKCk7XG5cdFx0dGhpcy5jaGFubmVsPy5jbG9zZT8uKCk7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9tZXNzYWdpbmcvTWVzc2FnZVF1ZXVlLnRzXG52YXIgTWVzc2FnZVF1ZXVlID0gY2xhc3MgTWVzc2FnZVF1ZXVlIHtcblx0ZGIgPSBudWxsO1xuXHRkYlByb21pc2UgPSBudWxsO1xuXHRvcHRpb25zO1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcblx0XHR0aGlzLm9wdGlvbnMgPSB7XG5cdFx0XHRkYk5hbWU6IG9wdGlvbnMuZGJOYW1lID8/IFwiVW5pZm9ybU1lc3NhZ2VRdWV1ZVwiLFxuXHRcdFx0c3RvcmVOYW1lOiBvcHRpb25zLnN0b3JlTmFtZSA/PyBcIm1lc3NhZ2VzXCIsXG5cdFx0XHRtYXhSZXRyaWVzOiBvcHRpb25zLm1heFJldHJpZXMgPz8gMyxcblx0XHRcdGRlZmF1bHRFeHBpcmF0aW9uTXM6IG9wdGlvbnMuZGVmYXVsdEV4cGlyYXRpb25NcyA/PyA4NjRlNSxcblx0XHRcdGZhbGxiYWNrU3RvcmFnZUtleTogb3B0aW9ucy5mYWxsYmFja1N0b3JhZ2VLZXkgPz8gXCJ1bmlmb3JtX21lc3NhZ2VfcXVldWVcIlxuXHRcdH07XG5cdH1cblx0YXN5bmMgaW5pdERCKCkge1xuXHRcdGlmICh0aGlzLmRiKSByZXR1cm4gdGhpcy5kYjtcblx0XHRpZiAodGhpcy5kYlByb21pc2UpIHJldHVybiB0aGlzLmRiUHJvbWlzZTtcblx0XHRpZiAoIU1lc3NhZ2VRdWV1ZS5pc0luZGV4ZWREQkF2YWlsYWJsZSgpKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oXCJbTWVzc2FnZVF1ZXVlXSBJbmRleGVkREIgbm90IGF2YWlsYWJsZSwgdXNpbmcgc2Vzc2lvblN0b3JhZ2UgZmFsbGJhY2tcIik7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0dGhpcy5kYlByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4odGhpcy5vcHRpb25zLmRiTmFtZSwgMSk7XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUud2FybihcIltNZXNzYWdlUXVldWVdIEluZGV4ZWREQiBvcGVuIGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIHNlc3Npb25TdG9yYWdlXCIpO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkluZGV4ZWREQiBub3QgYXZhaWxhYmxlXCIpKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy5kYiA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRyZXNvbHZlKHRoaXMuZGIpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcblx0XHRcdFx0aWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lLCB7IGtleVBhdGg6IFwiaWRcIiB9KTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcInRpbWVzdGFtcFwiLCBcInRpbWVzdGFtcFwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRcdFx0c3RvcmUuY3JlYXRlSW5kZXgoXCJ0eXBlXCIsIFwidHlwZVwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRcdFx0c3RvcmUuY3JlYXRlSW5kZXgoXCJwcmlvcml0eVwiLCBcInByaW9yaXR5XCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcImRlc3RpbmF0aW9uXCIsIFwiZGVzdGluYXRpb25cIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH0pO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLmRiID0gYXdhaXQgdGhpcy5kYlByb21pc2U7XG5cdFx0XHRyZXR1cm4gdGhpcy5kYjtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0fVxuXHRnZW5lcmF0ZUlkKCkge1xuXHRcdHJldHVybiBgbXNnXyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTEpfWA7XG5cdH1cblx0YXN5bmMgcXVldWVNZXNzYWdlKHR5cGUsIGRhdGEsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IG1lc3NhZ2UgPSB7XG5cdFx0XHRpZDogdGhpcy5nZW5lcmF0ZUlkKCksXG5cdFx0XHR0eXBlLFxuXHRcdFx0ZGF0YSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcblx0XHRcdHByaW9yaXR5OiBvcHRpb25zLnByaW9yaXR5ID8/IFwibm9ybWFsXCIsXG5cdFx0XHRyZXRyeUNvdW50OiAwLFxuXHRcdFx0bWF4UmV0cmllczogb3B0aW9ucy5tYXhSZXRyaWVzID8/IHRoaXMub3B0aW9ucy5tYXhSZXRyaWVzLFxuXHRcdFx0ZXhwaXJlc0F0OiBvcHRpb25zLmV4cGlyZXNBdCA/PyBEYXRlLm5vdygpICsgdGhpcy5vcHRpb25zLmRlZmF1bHRFeHBpcmF0aW9uTXMsXG5cdFx0XHRkZXN0aW5hdGlvbjogb3B0aW9ucy5kZXN0aW5hdGlvbixcblx0XHRcdG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhXG5cdFx0fTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLmluaXREQigpO1xuXHRcdFx0aWYgKGRiKSBhd2FpdCB0aGlzLmFkZFRvSW5kZXhlZERCKGRiLCBtZXNzYWdlKTtcblx0XHRcdGVsc2UgdGhpcy5hZGRUb1Nlc3Npb25TdG9yYWdlKG1lc3NhZ2UpO1xuXHRcdFx0Y29uc29sZS5sb2coYFtNZXNzYWdlUXVldWVdIFF1ZXVlZCBtZXNzYWdlOiAke3R5cGV9YCwgbWVzc2FnZS5pZCk7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5pZDtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIltNZXNzYWdlUXVldWVdIEZhaWxlZCB0byBxdWV1ZSBtZXNzYWdlOlwiLCBlcnJvcik7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cdH1cblx0YXN5bmMgZ2V0UXVldWVkTWVzc2FnZXMoZGVzdGluYXRpb24pIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLmluaXREQigpO1xuXHRcdFx0bGV0IG1lc3NhZ2VzO1xuXHRcdFx0aWYgKGRiKSBtZXNzYWdlcyA9IGF3YWl0IHRoaXMuZ2V0QWxsRnJvbUluZGV4ZWREQihkYik7XG5cdFx0XHRlbHNlIG1lc3NhZ2VzID0gdGhpcy5nZXRBbGxGcm9tU2Vzc2lvblN0b3JhZ2UoKTtcblx0XHRcdGlmIChkZXN0aW5hdGlvbikgbWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoKG1zZykgPT4gbXNnLmRlc3RpbmF0aW9uID09PSBkZXN0aW5hdGlvbik7XG5cdFx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VzLmZpbHRlcigobXNnKSA9PiAhbXNnLmV4cGlyZXNBdCB8fCBtc2cuZXhwaXJlc0F0ID4gbm93KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIltNZXNzYWdlUXVldWVdIEZhaWxlZCB0byBnZXQgcXVldWVkIG1lc3NhZ2VzOlwiLCBlcnJvcik7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRBbGxGcm9tU2Vzc2lvblN0b3JhZ2UoKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgcmVtb3ZlTWVzc2FnZShtZXNzYWdlSWQpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLmluaXREQigpO1xuXHRcdFx0aWYgKGRiKSBhd2FpdCB0aGlzLmRlbGV0ZUZyb21JbmRleGVkREIoZGIsIG1lc3NhZ2VJZCk7XG5cdFx0XHRlbHNlIHRoaXMuZGVsZXRlRnJvbVNlc3Npb25TdG9yYWdlKG1lc3NhZ2VJZCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJbTWVzc2FnZVF1ZXVlXSBGYWlsZWQgdG8gcmVtb3ZlIG1lc3NhZ2U6XCIsIGVycm9yKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgdXBkYXRlTWVzc2FnZVJldHJ5KG1lc3NhZ2VJZCwgcmV0cnlDb3VudCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMuaW5pdERCKCk7XG5cdFx0XHRpZiAoZGIpIGF3YWl0IHRoaXMudXBkYXRlSW5JbmRleGVkREIoZGIsIG1lc3NhZ2VJZCwgeyByZXRyeUNvdW50IH0pO1xuXHRcdFx0ZWxzZSB0aGlzLnVwZGF0ZUluU2Vzc2lvblN0b3JhZ2UobWVzc2FnZUlkLCB7IHJldHJ5Q291bnQgfSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJbTWVzc2FnZVF1ZXVlXSBGYWlsZWQgdG8gdXBkYXRlIG1lc3NhZ2UgcmV0cnk6XCIsIGVycm9yKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgY2xlYXJFeHBpcmVkTWVzc2FnZXMoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgdGhpcy5nZXRRdWV1ZWRNZXNzYWdlcygpO1xuXHRcdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRcdGNvbnN0IGV4cGlyZWRJZHMgPSBtZXNzYWdlcy5maWx0ZXIoKG1zZykgPT4gbXNnLmV4cGlyZXNBdCAmJiBtc2cuZXhwaXJlc0F0IDw9IG5vdykubWFwKChtc2cpID0+IG1zZy5pZCk7XG5cdFx0XHRmb3IgKGNvbnN0IGlkIG9mIGV4cGlyZWRJZHMpIGF3YWl0IHRoaXMucmVtb3ZlTWVzc2FnZShpZCk7XG5cdFx0XHRpZiAoZXhwaXJlZElkcy5sZW5ndGggPiAwKSBjb25zb2xlLmxvZyhgW01lc3NhZ2VRdWV1ZV0gQ2xlYXJlZCAke2V4cGlyZWRJZHMubGVuZ3RofSBleHBpcmVkIG1lc3NhZ2VzYCk7XG5cdFx0XHRyZXR1cm4gZXhwaXJlZElkcy5sZW5ndGg7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJbTWVzc2FnZVF1ZXVlXSBGYWlsZWQgdG8gY2xlYXIgZXhwaXJlZCBtZXNzYWdlczpcIiwgZXJyb3IpO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIGNsZWFyQWxsKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMuaW5pdERCKCk7XG5cdFx0XHRpZiAoZGIpIGF3YWl0IHRoaXMuY2xlYXJJbmRleGVkREIoZGIpO1xuXHRcdFx0ZWxzZSBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMub3B0aW9ucy5mYWxsYmFja1N0b3JhZ2VLZXkpO1xuXHRcdFx0Y29uc29sZS5sb2coXCJbTWVzc2FnZVF1ZXVlXSBDbGVhcmVkIGFsbCBtZXNzYWdlc1wiKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIltNZXNzYWdlUXVldWVdIEZhaWxlZCB0byBjbGVhciBhbGwgbWVzc2FnZXM6XCIsIGVycm9yKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgZ2V0U3RhdHMoKSB7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBhd2FpdCB0aGlzLmdldFF1ZXVlZE1lc3NhZ2VzKCk7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRjb25zdCBieVByaW9yaXR5ID0ge1xuXHRcdFx0bG93OiAwLFxuXHRcdFx0bm9ybWFsOiAwLFxuXHRcdFx0aGlnaDogMFxuXHRcdH07XG5cdFx0Y29uc3QgYnlEZXN0aW5hdGlvbiA9IHt9O1xuXHRcdGxldCBleHBpcmVkID0gMDtcblx0XHRmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykge1xuXHRcdFx0YnlQcmlvcml0eVttc2cucHJpb3JpdHldKys7XG5cdFx0XHRpZiAobXNnLmRlc3RpbmF0aW9uKSBieURlc3RpbmF0aW9uW21zZy5kZXN0aW5hdGlvbl0gPSAoYnlEZXN0aW5hdGlvblttc2cuZGVzdGluYXRpb25dIHx8IDApICsgMTtcblx0XHRcdGlmIChtc2cuZXhwaXJlc0F0ICYmIG1zZy5leHBpcmVzQXQgPD0gbm93KSBleHBpcmVkKys7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR0b3RhbDogbWVzc2FnZXMubGVuZ3RoLFxuXHRcdFx0YnlQcmlvcml0eSxcblx0XHRcdGJ5RGVzdGluYXRpb24sXG5cdFx0XHRleHBpcmVkXG5cdFx0fTtcblx0fVxuXHRhc3luYyBhZGRUb0luZGV4ZWREQihkYiwgbWVzc2FnZSkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gZGIudHJhbnNhY3Rpb24oW3RoaXMub3B0aW9ucy5zdG9yZU5hbWVdLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKS5hZGQobWVzc2FnZSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUoKTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBnZXRBbGxGcm9tSW5kZXhlZERCKGRiKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbihbdGhpcy5vcHRpb25zLnN0b3JlTmFtZV0sIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUodGhpcy5vcHRpb25zLnN0b3JlTmFtZSkuZ2V0QWxsKCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGRlbGV0ZUZyb21JbmRleGVkREIoZGIsIGlkKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbihbdGhpcy5vcHRpb25zLnN0b3JlTmFtZV0sIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpLmRlbGV0ZShpZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUoKTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyB1cGRhdGVJbkluZGV4ZWREQihkYiwgaWQsIHVwZGF0ZXMpIHtcblx0XHRjb25zdCBzdG9yZSA9IGRiLnRyYW5zYWN0aW9uKFt0aGlzLm9wdGlvbnMuc3RvcmVOYW1lXSwgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUodGhpcy5vcHRpb25zLnN0b3JlTmFtZSk7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBzdG9yZS5nZXQoaWQpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKHJlcXVlc3QucmVzdWx0KTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHR9KTtcblx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0T2JqZWN0LmFzc2lnbihtZXNzYWdlLCB1cGRhdGVzKTtcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdCA9IHN0b3JlLnB1dChtZXNzYWdlKTtcblx0XHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKCk7XG5cdFx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRhc3luYyBjbGVhckluZGV4ZWREQihkYikge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gZGIudHJhbnNhY3Rpb24oW3RoaXMub3B0aW9ucy5zdG9yZU5hbWVdLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKS5jbGVhcigpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKCk7XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7XG5cdFx0fSk7XG5cdH1cblx0Z2V0QWxsRnJvbVNlc3Npb25TdG9yYWdlKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBzdG9yZWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMub3B0aW9ucy5mYWxsYmFja1N0b3JhZ2VLZXkpO1xuXHRcdFx0cmV0dXJuIHN0b3JlZCA/IEpTT04ucGFyc2Uoc3RvcmVkKSA6IFtdO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0fVxuXHRhZGRUb1Nlc3Npb25TdG9yYWdlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBleGlzdGluZyA9IHRoaXMuZ2V0QWxsRnJvbVNlc3Npb25TdG9yYWdlKCk7XG5cdFx0ZXhpc3RpbmcucHVzaChtZXNzYWdlKTtcblx0XHRzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMub3B0aW9ucy5mYWxsYmFja1N0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KGV4aXN0aW5nKSk7XG5cdH1cblx0ZGVsZXRlRnJvbVNlc3Npb25TdG9yYWdlKGlkKSB7XG5cdFx0Y29uc3QgZmlsdGVyZWQgPSB0aGlzLmdldEFsbEZyb21TZXNzaW9uU3RvcmFnZSgpLmZpbHRlcigobXNnKSA9PiBtc2cuaWQgIT09IGlkKTtcblx0XHRzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMub3B0aW9ucy5mYWxsYmFja1N0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KGZpbHRlcmVkKSk7XG5cdH1cblx0dXBkYXRlSW5TZXNzaW9uU3RvcmFnZShpZCwgdXBkYXRlcykge1xuXHRcdGNvbnN0IGV4aXN0aW5nID0gdGhpcy5nZXRBbGxGcm9tU2Vzc2lvblN0b3JhZ2UoKTtcblx0XHRjb25zdCBtZXNzYWdlID0gZXhpc3RpbmcuZmluZCgobXNnKSA9PiBtc2cuaWQgPT09IGlkKTtcblx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0T2JqZWN0LmFzc2lnbihtZXNzYWdlLCB1cGRhdGVzKTtcblx0XHRcdHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5vcHRpb25zLmZhbGxiYWNrU3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkoZXhpc3RpbmcpKTtcblx0XHR9XG5cdH1cblx0c3RhdGljIGlzSW5kZXhlZERCQXZhaWxhYmxlKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdHlwZW9mIGluZGV4ZWREQiAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgSURCVHJhbnNhY3Rpb24gIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIElEQktleVJhbmdlICE9PSBcInVuZGVmaW5lZFwiO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxufTtcbnZhciBpbnN0YW5jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuZnVuY3Rpb24gZ2V0TWVzc2FnZVF1ZXVlKG9wdGlvbnMpIHtcblx0Y29uc3Qga2V5ID0gb3B0aW9ucz8uZGJOYW1lID8/IFwiZGVmYXVsdFwiO1xuXHRpZiAoIWluc3RhbmNlcy5oYXMoa2V5KSkgaW5zdGFuY2VzLnNldChrZXksIG5ldyBNZXNzYWdlUXVldWUob3B0aW9ucykpO1xuXHRyZXR1cm4gaW5zdGFuY2VzLmdldChrZXkpO1xufVxuZnVuY3Rpb24gY3JlYXRlTWVzc2FnZVF1ZXVlKG9wdGlvbnMpIHtcblx0cmV0dXJuIG5ldyBNZXNzYWdlUXVldWUob3B0aW9ucyk7XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3V0aWxzL1dyYXBwZXJzLnRzXG52YXIgcnVudGltZUxpc3RlbmVyUmVnaXN0cnkgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIHJ1bnRpbWVMaXN0ZW5lckluc3RhbGxlZCA9IGZhbHNlO1xudmFyIGVuc3VyZVJ1bnRpbWVMaXN0ZW5lciA9ICgpID0+IHtcblx0aWYgKHJ1bnRpbWVMaXN0ZW5lckluc3RhbGxlZCkgcmV0dXJuO1xuXHRydW50aW1lTGlzdGVuZXJJbnN0YWxsZWQgPSB0cnVlO1xuXHRjaHJvbWU/LnJ1bnRpbWU/Lm9uTWVzc2FnZT8uYWRkTGlzdGVuZXI/LigobWVzc2FnZSwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpID0+IHtcblx0XHRjb25zdCBjaGFubmVsTmFtZSA9IG1lc3NhZ2U/LmNoYW5uZWxOYW1lID8/IG1lc3NhZ2U/LnRhcmdldDtcblx0XHRpZiAoIWNoYW5uZWxOYW1lKSByZXR1cm47XG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gcnVudGltZUxpc3RlbmVyUmVnaXN0cnkuZ2V0KGNoYW5uZWxOYW1lKTtcblx0XHRpZiAoIWxpc3RlbmVycyB8fCBsaXN0ZW5lcnMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuXHRcdGNvbnN0IGV2ZW50ID0ge1xuXHRcdFx0ZGF0YTogbWVzc2FnZSxcblx0XHRcdG9yaWdpbjogc2VuZGVyPy51cmwgfHwgXCJjaHJvbWUtZXh0ZW5zaW9uXCIsXG5cdFx0XHRzb3VyY2U6IHNlbmRlclxuXHRcdH07XG5cdFx0Zm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHRyeSB7XG5cdFx0XHRjb25zdCBvdXQgPSBsaXN0ZW5lcihldmVudCwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpO1xuXHRcdFx0aWYgKG91dCAmJiB0eXBlb2Ygb3V0Py5jYXRjaCA9PT0gXCJmdW5jdGlvblwiKSBvdXQuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKFwiW0Nocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWxdIExpc3RlbmVyIGVycm9yOlwiLCBlcnJvcikpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiW0Nocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWxdIExpc3RlbmVyIGVycm9yOlwiLCBlcnJvcik7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9KTtcbn07XG52YXIgQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbCA9IGNsYXNzIHtcblx0Y2hhbm5lbE5hbWU7XG5cdGxpc3RlbmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lKSB7XG5cdFx0dGhpcy5jaGFubmVsTmFtZSA9IGNoYW5uZWxOYW1lO1xuXHRcdGVuc3VyZVJ1bnRpbWVMaXN0ZW5lcigpO1xuXHR9XG5cdGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcblx0XHRpZiAodHlwZSAhPT0gXCJtZXNzYWdlXCIpIHJldHVybjtcblx0XHR0aGlzLmxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuXHRcdGxldCBzZXQgPSBydW50aW1lTGlzdGVuZXJSZWdpc3RyeS5nZXQodGhpcy5jaGFubmVsTmFtZSk7XG5cdFx0aWYgKCFzZXQpIHtcblx0XHRcdHNldCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdFx0XHRydW50aW1lTGlzdGVuZXJSZWdpc3RyeS5zZXQodGhpcy5jaGFubmVsTmFtZSwgc2V0KTtcblx0XHR9XG5cdFx0c2V0LmFkZChsaXN0ZW5lcik7XG5cdH1cblx0cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuXHRcdGlmICh0eXBlICE9PSBcIm1lc3NhZ2VcIikgcmV0dXJuO1xuXHRcdHRoaXMubGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG5cdFx0cnVudGltZUxpc3RlbmVyUmVnaXN0cnkuZ2V0KHRoaXMuY2hhbm5lbE5hbWUpPy5kZWxldGUobGlzdGVuZXIpO1xuXHR9XG5cdHBvc3RNZXNzYWdlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBtZXNzYWdlV2l0aENoYW5uZWwgPSB7XG5cdFx0XHQuLi5tZXNzYWdlLFxuXHRcdFx0Y2hhbm5lbE5hbWU6IHRoaXMuY2hhbm5lbE5hbWUsXG5cdFx0XHRzb3VyY2U6IFwiYnJvYWRjYXN0LWNoYW5uZWxcIlxuXHRcdH07XG5cdFx0Y2hyb21lPy5ydW50aW1lPy5zZW5kTWVzc2FnZT8uKG1lc3NhZ2VXaXRoQ2hhbm5lbCwgKCkgPT4gdm9pZCAwKTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHRmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSBydW50aW1lTGlzdGVuZXJSZWdpc3RyeS5nZXQodGhpcy5jaGFubmVsTmFtZSk/LmRlbGV0ZShsaXN0ZW5lcik7XG5cdFx0dGhpcy5saXN0ZW5lcnMuY2xlYXIoKTtcblx0fVxufTtcbnZhciBDaHJvbWVFeHRlbnNpb25UYWJzQ2hhbm5lbCA9IGNsYXNzIHtcblx0d3JhcHBlZEJ5T3JpZ2luYWwgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHR3cmFwcGVkTGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0Y2hhbm5lbE5hbWU7XG5cdG1vZGUgPSBcImJyb2FkY2FzdFwiO1xuXHR0YWJGaWx0ZXI7XG5cdHRhYklkR2V0dGVyO1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsTmFtZSwgb3B0aW9ucykge1xuXHRcdHRoaXMuY2hhbm5lbE5hbWUgPSBjaGFubmVsTmFtZTtcblx0XHR0aGlzLm1vZGUgPSBvcHRpb25zPy5tb2RlIHx8IFwiYnJvYWRjYXN0XCI7XG5cdFx0dGhpcy50YWJGaWx0ZXIgPSBvcHRpb25zPy50YWJGaWx0ZXI7XG5cdFx0dGhpcy50YWJJZEdldHRlciA9IG9wdGlvbnM/LnRhYklkR2V0dGVyIHx8IHRoaXMuZ2V0Q3VycmVudFRhYklkO1xuXHRcdHRoaXMuc3RhcnRMaXN0ZW5pbmcoKTtcblx0fVxuXHRzdGFydExpc3RlbmluZygpIHtcblx0XHRlbnN1cmVSdW50aW1lTGlzdGVuZXIoKTtcblx0fVxuXHRhZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKHR5cGUgIT09IFwibWVzc2FnZVwiKSByZXR1cm47XG5cdFx0aWYgKHRoaXMud3JhcHBlZEJ5T3JpZ2luYWwuZ2V0KGxpc3RlbmVyKSkgcmV0dXJuO1xuXHRcdGNvbnN0IHdyYXBwZWQgPSBhc3luYyAoZXZlbnQsIHNlbmRlciwgc2VuZFJlc3BvbnNlKSA9PiB7XG5cdFx0XHRldmVudD8uZGF0YTtcblx0XHRcdGlmICghc2VuZGVyPy50YWIpIHJldHVybjtcblx0XHRcdGlmICh0aGlzLm1vZGUgPT09IFwiY3VycmVudC10YWJcIikge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRUYWJJZCA9IGF3YWl0IHRoaXMudGFiSWRHZXR0ZXI/LigpO1xuXHRcdFx0XHRpZiAodHlwZW9mIHRhcmdldFRhYklkID09PSBcIm51bWJlclwiICYmIHNlbmRlci50YWIuaWQgIT09IHRhcmdldFRhYklkKSByZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5tb2RlID09PSBcImJyb2FkY2FzdFwiICYmIHRoaXMudGFiRmlsdGVyICYmICF0aGlzLnRhYkZpbHRlcihzZW5kZXIudGFiKSkgcmV0dXJuO1xuXHRcdFx0cmV0dXJuIGxpc3RlbmVyKHtcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdG9yaWdpbjogc2VuZGVyLnVybCB8fCBcImNocm9tZS1leHRlbnNpb24tdGFiXCIsXG5cdFx0XHRcdHRhYjogc2VuZGVyLnRhYlxuXHRcdFx0fSwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpO1xuXHRcdH07XG5cdFx0dGhpcy53cmFwcGVkQnlPcmlnaW5hbC5zZXQobGlzdGVuZXIsIHdyYXBwZWQpO1xuXHRcdHRoaXMud3JhcHBlZExpc3RlbmVycy5hZGQod3JhcHBlZCk7XG5cdFx0bGV0IHNldCA9IHJ1bnRpbWVMaXN0ZW5lclJlZ2lzdHJ5LmdldCh0aGlzLmNoYW5uZWxOYW1lKTtcblx0XHRpZiAoIXNldCkge1xuXHRcdFx0c2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0XHRcdHJ1bnRpbWVMaXN0ZW5lclJlZ2lzdHJ5LnNldCh0aGlzLmNoYW5uZWxOYW1lLCBzZXQpO1xuXHRcdH1cblx0XHRzZXQuYWRkKHdyYXBwZWQpO1xuXHR9XG5cdHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcblx0XHRpZiAodHlwZSAhPT0gXCJtZXNzYWdlXCIpIHJldHVybjtcblx0XHRjb25zdCB3cmFwcGVkID0gdGhpcy53cmFwcGVkQnlPcmlnaW5hbC5nZXQobGlzdGVuZXIpO1xuXHRcdGlmICghd3JhcHBlZCkgcmV0dXJuO1xuXHRcdHRoaXMud3JhcHBlZEJ5T3JpZ2luYWwuZGVsZXRlKGxpc3RlbmVyKTtcblx0XHR0aGlzLndyYXBwZWRMaXN0ZW5lcnMuZGVsZXRlKHdyYXBwZWQpO1xuXHRcdHJ1bnRpbWVMaXN0ZW5lclJlZ2lzdHJ5LmdldCh0aGlzLmNoYW5uZWxOYW1lKT8uZGVsZXRlKHdyYXBwZWQpO1xuXHR9XG5cdHNlbmRUb1RhYih0YWJJZCwgbWVzc2FnZSkge1xuXHRcdGNvbnN0IG1lc3NhZ2VXaXRoQ2hhbm5lbCA9IHtcblx0XHRcdGNoYW5uZWxOYW1lOiB0aGlzLmNoYW5uZWxOYW1lLFxuXHRcdFx0c291cmNlOiBcInRhYnMtY2hhbm5lbFwiLFxuXHRcdFx0Li4ubWVzc2FnZVxuXHRcdH07XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNocm9tZT8udGFicz8uc2VuZE1lc3NhZ2U/Lih0YWJJZCwgbWVzc2FnZVdpdGhDaGFubmVsLCAocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0aWYgKGNocm9tZT8ucnVudGltZT8ubGFzdEVycm9yKSByZWplY3QobmV3IEVycm9yKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvci5tZXNzYWdlKSk7XG5cdFx0XHRcdGVsc2UgcmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBzZW5kVG9BY3RpdmVUYWIobWVzc2FnZSkge1xuXHRcdGlmICh0aGlzLm1vZGUgPT09IFwiY3VycmVudC10YWJcIiAmJiB0aGlzLnRhYklkR2V0dGVyKSB7XG5cdFx0XHRjb25zdCB0YWJJZCA9IGF3YWl0IHRoaXMudGFiSWRHZXR0ZXIoKTtcblx0XHRcdHJldHVybiB0aGlzLnNlbmRUb1RhYih0YWJJZCwgbWVzc2FnZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHRhYnMgPSBhd2FpdCBjaHJvbWUudGFicy5xdWVyeSh7XG5cdFx0XHRcdGFjdGl2ZTogdHJ1ZSxcblx0XHRcdFx0Y3VycmVudFdpbmRvdzogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0XHRpZiAodGFicy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihcIk5vIGFjdGl2ZSB0YWIgZm91bmRcIik7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZW5kVG9UYWIodGFic1swXS5pZCwgbWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIGJyb2FkY2FzdFRvVGFicyhtZXNzYWdlLCBvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMubW9kZSA9PT0gXCJjdXJyZW50LXRhYlwiKSB0cnkge1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRUb0FjdGl2ZVRhYihtZXNzYWdlKTtcblx0XHRcdHJldHVybiBbe1xuXHRcdFx0XHR0YWJJZDogYXdhaXQgdGhpcy50YWJJZEdldHRlcigpLFxuXHRcdFx0XHRyZXNwb25zZVxuXHRcdFx0fV07XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHJldHVybiBbeyBlcnJvciB9XTtcblx0XHR9XG5cdFx0Y29uc3QgcXVlcnkgPSB7IHN0YXR1czogXCJjb21wbGV0ZVwiIH07XG5cdFx0aWYgKCFvcHRpb25zPy5hbGxXaW5kb3dzKSBxdWVyeS5jdXJyZW50V2luZG93ID0gdHJ1ZTtcblx0XHRjb25zdCB0YXJnZXRUYWJzID0gKGF3YWl0IGNocm9tZS50YWJzLnF1ZXJ5KHF1ZXJ5KSkuZmlsdGVyKCh0YWIpID0+IHtcblx0XHRcdGlmIChvcHRpb25zPy50YWJGaWx0ZXIgJiYgIW9wdGlvbnMudGFiRmlsdGVyKHRhYikpIHJldHVybiBmYWxzZTtcblx0XHRcdGlmICh0aGlzLnRhYkZpbHRlciAmJiAhdGhpcy50YWJGaWx0ZXIodGFiKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cdFx0Y29uc3QgbWVzc2FnZVdpdGhDaGFubmVsID0ge1xuXHRcdFx0Y2hhbm5lbE5hbWU6IHRoaXMuY2hhbm5lbE5hbWUsXG5cdFx0XHRzb3VyY2U6IFwidGFicy1jaGFubmVsXCIsXG5cdFx0XHQuLi5tZXNzYWdlXG5cdFx0fTtcblx0XHRjb25zdCBwcm9taXNlcyA9IHRhcmdldFRhYnMubWFwKCh0YWIpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNocm9tZT8udGFicz8uc2VuZE1lc3NhZ2U/Lih0YWIuaWQsIG1lc3NhZ2VXaXRoQ2hhbm5lbCwgKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdGlmIChjaHJvbWU/LnJ1bnRpbWU/Lmxhc3RFcnJvcikgcmVqZWN0KG5ldyBFcnJvcihjaHJvbWUucnVudGltZS5sYXN0RXJyb3IubWVzc2FnZSkpO1xuXHRcdFx0XHRlbHNlIHJlc29sdmUoe1xuXHRcdFx0XHRcdHRhYklkOiB0YWIuaWQsXG5cdFx0XHRcdFx0cmVzcG9uc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KSk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cdH1cblx0YXN5bmMgcG9zdE1lc3NhZ2UobWVzc2FnZSkge1xuXHRcdGNvbnN0IHRhYklkID0gYXdhaXQgdGhpcy50YWJJZEdldHRlcigpO1xuXHRcdGNvbnN0IG1lc3NhZ2VXaXRoQ2hhbm5lbCA9IHtcblx0XHRcdGNoYW5uZWxOYW1lOiB0aGlzLmNoYW5uZWxOYW1lLFxuXHRcdFx0c291cmNlOiBcInRhYnMtY2hhbm5lbFwiLFxuXHRcdFx0Li4ubWVzc2FnZVxuXHRcdH07XG5cdFx0cmV0dXJuIGNocm9tZT8udGFicz8uc2VuZE1lc3NhZ2U/Lih0YWJJZCwgbWVzc2FnZVdpdGhDaGFubmVsLCAoKSA9PiB2b2lkIDApO1xuXHR9XG5cdGFzeW5jIGdldEN1cnJlbnRUYWJJZCgpIHtcblx0XHRpZiAodGhpcy50YWJJZEdldHRlcikgcmV0dXJuIGF3YWl0IHRoaXMudGFiSWRHZXR0ZXIoKTtcblx0XHRyZXR1cm4gMDtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHRmb3IgKGNvbnN0IHdyYXBwZWQgb2YgdGhpcy53cmFwcGVkTGlzdGVuZXJzKSBydW50aW1lTGlzdGVuZXJSZWdpc3RyeS5nZXQodGhpcy5jaGFubmVsTmFtZSk/LmRlbGV0ZSh3cmFwcGVkKTtcblx0XHR0aGlzLndyYXBwZWRMaXN0ZW5lcnMuY2xlYXIoKTtcblx0XHR0aGlzLndyYXBwZWRCeU9yaWdpbmFsLmNsZWFyKCk7XG5cdH1cbn07XG52YXIgQ2hyb21lRXh0ZW5zaW9uUG9ydENoYW5uZWwgPSBjbGFzcyB7XG5cdHBvcnQ7XG5cdGNoYW5uZWxOYW1lO1xuXHRsaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRjb25zdHJ1Y3Rvcihwb3J0LCBjaGFubmVsTmFtZSkge1xuXHRcdHRoaXMucG9ydCA9IHBvcnQ7XG5cdFx0dGhpcy5jaGFubmVsTmFtZSA9IGNoYW5uZWxOYW1lO1xuXHRcdHRoaXMucG9ydD8ub25NZXNzYWdlPy5hZGRMaXN0ZW5lcj8uKChtZXNzYWdlKSA9PiB7XG5cdFx0XHRpZiAoKG1lc3NhZ2U/LmNoYW5uZWxOYW1lID8/IG1lc3NhZ2U/LnRhcmdldCkgIT09IHRoaXMuY2hhbm5lbE5hbWUpIHJldHVybjtcblx0XHRcdGNvbnN0IGV2ZW50ID0ge1xuXHRcdFx0XHRkYXRhOiBtZXNzYWdlLFxuXHRcdFx0XHRvcmlnaW46IFwiY2hyb21lLWV4dGVuc2lvbi1wb3J0XCIsXG5cdFx0XHRcdHNvdXJjZTogdGhpcy5wb3J0XG5cdFx0XHR9O1xuXHRcdFx0Zm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycykgdHJ5IHtcblx0XHRcdFx0bGlzdGVuZXIoZXZlbnQpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihcIltDaHJvbWVFeHRlbnNpb25Qb3J0Q2hhbm5lbF0gTGlzdGVuZXIgZXJyb3I6XCIsIGVycm9yKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRhZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKHR5cGUgIT09IFwibWVzc2FnZVwiKSByZXR1cm47XG5cdFx0dGhpcy5saXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcblx0fVxuXHRyZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKHR5cGUgIT09IFwibWVzc2FnZVwiKSByZXR1cm47XG5cdFx0dGhpcy5saXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcblx0fVxuXHRwb3N0TWVzc2FnZShtZXNzYWdlKSB7XG5cdFx0dGhpcy5wb3J0Py5wb3N0TWVzc2FnZT8uKHtcblx0XHRcdC4uLm1lc3NhZ2UsXG5cdFx0XHRjaGFubmVsTmFtZTogdGhpcy5jaGFubmVsTmFtZSxcblx0XHRcdHNvdXJjZTogXCJwb3J0LWNoYW5uZWxcIlxuXHRcdH0pO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMubGlzdGVuZXJzLmNsZWFyKCk7XG5cdFx0dGhpcy5wb3J0Py5kaXNjb25uZWN0Py4oKTtcblx0fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdXRpbHMvVXRpbHMudHNcbnZhciBjcmVhdGVDaHJvbWVFeHRlbnNpb25DaGFubmVsID0gYXN5bmMgKGNvbmZpZykgPT4ge1xuXHRsZXQgd29ya2VyO1xuXHR0cnkge1xuXHRcdGlmICh0eXBlb2YgY29uZmlnLnNjcmlwdCAhPT0gXCJzdHJpbmdcIikgdGhyb3cgbmV3IEVycm9yKFwiQ2hyb21lIGV4dGVuc2lvbiB3b3JrZXIgY2hhbm5lbCByZXF1aXJlcyBjb25maWcuc2NyaXB0IHRvIGJlIGEgc3RyaW5nIHBhdGhcIik7XG5cdFx0d29ya2VyID0gbmV3IFdvcmtlcihjaHJvbWUucnVudGltZS5nZXRVUkwoY29uZmlnLnNjcmlwdCksIGNvbmZpZy5vcHRpb25zKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRpZiAodHlwZW9mIGNvbmZpZy5zY3JpcHQgPT09IFwic3RyaW5nXCIpIHdvcmtlciA9IG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYoY29uZmlnLnNjcmlwdCksIGNvbmZpZy5vcHRpb25zKTtcblx0XHRlbHNlIGlmICh0eXBlb2YgY29uZmlnLnNjcmlwdCA9PT0gXCJmdW5jdGlvblwiKSB3b3JrZXIgPSBjb25maWcuc2NyaXB0KCk7XG5cdFx0ZWxzZSB3b3JrZXIgPSBjb25maWcuc2NyaXB0O1xuXHR9XG5cdGNvbnN0IGNoYW5uZWwgPSBhd2FpdCBjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbChjb25maWcubmFtZSwge30sIHdvcmtlcik7XG5cdHJldHVybiBjaGFubmVsPy5yZW1vdGUgPz8gY2hhbm5lbDtcbn07XG52YXIgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0ID0gKGNoYW5uZWxOYW1lKSA9PiB7XG5cdHJldHVybiBuZXcgQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbChjaGFubmVsTmFtZSk7XG59O1xudmFyIGNyZWF0ZUNocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWwgPSAoY2hhbm5lbE5hbWUpID0+IHtcblx0Y29uc3Qgd29ya2VyID0gbmV3IENocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWwoY2hhbm5lbE5hbWUpO1xuXHRjb25zdCBjaGFubmVsID0gY3JlYXRlT3JVc2VFeGlzdGluZ0NoYW5uZWwoY2hhbm5lbE5hbWUsIHt9LCB3b3JrZXIpO1xuXHRyZXR1cm4gY2hhbm5lbD8ucmVtb3RlID8/IGNoYW5uZWw7XG59O1xudmFyIGNyZWF0ZUNocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsID0gKGNoYW5uZWxOYW1lLCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHdvcmtlciA9IG5ldyBDaHJvbWVFeHRlbnNpb25UYWJzQ2hhbm5lbChjaGFubmVsTmFtZSwgb3B0aW9ucyk7XG5cdGNvbnN0IGNoYW5uZWwgPSBjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbChjaGFubmVsTmFtZSwge30sIHdvcmtlcik7XG5cdHJldHVybiBjaGFubmVsPy5yZW1vdGUgPz8gY2hhbm5lbDtcbn07XG52YXIgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uVGFic01lc3NhZ2luZ0NoYW5uZWwgPSAoY2hhbm5lbE5hbWUsIG9wdGlvbnMpID0+IHtcblx0cmV0dXJuIGNyZWF0ZUNocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsKGNoYW5uZWxOYW1lLCBvcHRpb25zKTtcbn07XG52YXIgaW5pdE1haW5DaGFubmVsID0gKG5hbWUgPSBcIiRob3N0JFwiKSA9PiB7XG5cdHJldHVybiBpbml0Q2hhbm5lbEhhbmRsZXIobmFtZSA/PyBcIiRob3N0JFwiKTtcbn07XG52YXIgY3JlYXRlUXVldWVkV29ya2VyQ2hhbm5lbCA9IChjb25maWcsIG9uQ2hhbm5lbFJlYWR5KSA9PiB7XG5cdHJldHVybiBuZXcgUXVldWVkV29ya2VyQ2hhbm5lbChjb25maWcsIG9uQ2hhbm5lbFJlYWR5KTtcbn07XG52YXIgY3JlYXRlU2VydmljZVdvcmtlckNoYW5uZWwgPSBhc3luYyAoY29uZmlnKSA9PiB7XG5cdHJldHVybiB7XG5cdFx0YXN5bmMgcmVxdWVzdChtZXRob2QsIGFyZ3MgPSBbXSkge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0Y29uc3QgY2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKGAke2NvbmZpZy5uYW1lfS1zdy1jaGFubmVsYCk7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VJZCA9IFVVSUR2NCgpO1xuXHRcdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0Y2hhbm5lbC5jbG9zZSgpO1xuXHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBTZXJ2aWNlIHdvcmtlciByZXF1ZXN0IHRpbWVvdXQ6ICR7bWV0aG9kfWApKTtcblx0XHRcdFx0fSwgMWU0KTtcblx0XHRcdFx0Y2hhbm5lbC5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCB7IGlkLCByZXN1bHQsIGVycm9yIH0gPSBldmVudC5kYXRhO1xuXHRcdFx0XHRcdGlmIChpZCA9PT0gbWVzc2FnZUlkKSB7XG5cdFx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0XHRjaGFubmVsLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRpZiAoZXJyb3IpIHJlamVjdChuZXcgRXJyb3IoZXJyb3IpKTtcblx0XHRcdFx0XHRcdGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0Y2hhbm5lbC5wb3N0TWVzc2FnZSh7XG5cdFx0XHRcdFx0aWQ6IG1lc3NhZ2VJZCxcblx0XHRcdFx0XHR0eXBlOiBcInJlcXVlc3RcIixcblx0XHRcdFx0XHRtZXRob2QsXG5cdFx0XHRcdFx0YXJnc1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Y2xvc2UoKSB7fVxuXHR9O1xufTtcbnZhciBjcmVhdGVXb3JrZXJDaGFubmVsID0gYXN5bmMgKGNvbmZpZykgPT4ge1xuXHRjb25zdCBjb250ZXh0ID0gY29uZmlnLmNvbnRleHQ7XG5cdGlmIChjb250ZXh0ID09PSBcInNlcnZpY2Utd29ya2VyXCIpIHJldHVybiBjcmVhdGVTZXJ2aWNlV29ya2VyQ2hhbm5lbChjb25maWcpO1xuXHRsZXQgd29ya2VyO1xuXHRpZiAodHlwZW9mIGNvbmZpZy5zY3JpcHQgPT09IFwiZnVuY3Rpb25cIikgd29ya2VyID0gY29uZmlnLnNjcmlwdCgpO1xuXHRlbHNlIGlmIChjb25maWcuc2NyaXB0IGluc3RhbmNlb2YgV29ya2VyKSB3b3JrZXIgPSBjb25maWcuc2NyaXB0O1xuXHRlbHNlIGlmIChjb250ZXh0ID09PSBcImNocm9tZS1leHRlbnNpb25cIikgdHJ5IHtcblx0XHR3b3JrZXIgPSBuZXcgV29ya2VyKGNocm9tZS5ydW50aW1lLmdldFVSTChjb25maWcuc2NyaXB0KSwgY29uZmlnLm9wdGlvbnMpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHdvcmtlciA9IG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYoY29uZmlnLnNjcmlwdCksIGNvbmZpZy5vcHRpb25zKTtcblx0fVxuXHRlbHNlIHdvcmtlciA9IG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYoY29uZmlnLnNjcmlwdCksIGNvbmZpZy5vcHRpb25zKTtcblx0cmV0dXJuIGF3YWl0IGNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsKGNvbmZpZy5uYW1lLCB7fSwgd29ya2VyKTtcbn07XG52YXIgY3JlYXRlT3B0aW1pemVkV29ya2VyQ2hhbm5lbCA9IGFzeW5jIChjb25maWcsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgYmFzZUNoYW5uZWwgPSBhd2FpdCBjcmVhdGVXb3JrZXJDaGFubmVsKGNvbmZpZyk7XG5cdHJldHVybiBuZXcgT3B0aW1pemVkV29ya2VyQ2hhbm5lbChiYXNlQ2hhbm5lbCwgb3B0aW9ucyk7XG59O1xudmFyIGNyZWF0ZVF1ZXVlZE9wdGltaXplZFdvcmtlckNoYW5uZWwgPSAoY29uZmlnLCBvcHRpb25zLCBvbkNoYW5uZWxSZWFkeSkgPT4ge1xuXHRjb25zdCBvcHRpbWl6ZWRDaGFubmVsID0gbmV3IE9wdGltaXplZFdvcmtlckNoYW5uZWwobnVsbCwgb3B0aW9ucywgb25DaGFubmVsUmVhZHkpO1xuXHRjcmVhdGVXb3JrZXJDaGFubmVsKGNvbmZpZykudGhlbigoYmFzZUNoYW5uZWwpID0+IHtcblx0XHRvcHRpbWl6ZWRDaGFubmVsLnNldENoYW5uZWwoYmFzZUNoYW5uZWwpO1xuXHR9KS5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRjb25zb2xlLmVycm9yKFwiW2NyZWF0ZVF1ZXVlZE9wdGltaXplZFdvcmtlckNoYW5uZWxdIEZhaWxlZCB0byBjcmVhdGUgYmFzZSBjaGFubmVsOlwiLCBlcnJvcik7XG5cdFx0b3B0aW1pemVkQ2hhbm5lbC5jbG9zZSgpO1xuXHR9KTtcblx0cmV0dXJuIG9wdGltaXplZENoYW5uZWw7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbWVzc2FnaW5nL1Byb3RvY29sLnRzXG52YXIgUFVSUE9TRVMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbXG5cdFwiaW52b2tlXCIsXG5cdFwibWFpbFwiLFxuXHRcImF0dGFjaFwiLFxuXHRcImRlbGl2ZXJcIixcblx0XCJkZWZlclwiXG5dKTtcbnZhciBUWVBFUyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFtcblx0XCJyZXF1ZXN0XCIsXG5cdFwicmVzcG9uc2VcIixcblx0XCJpbnZva2VcIixcblx0XCJhY2tcIixcblx0XCJhY3RcIixcblx0XCJhc2tcIlxuXSk7XG52YXIgREVGQVVMVF9QVVJQT1NFID0gXCJtYWlsXCI7XG52YXIgYXNTdHJpbmcgPSAodmFsdWUpID0+IFN0cmluZyh2YWx1ZSA/PyBcIlwiKS50cmltKCk7XG52YXIgbm9ybWFsaXplUGF0aCA9IChwYXRoKSA9PiB7XG5cdGlmICghcGF0aCkgcmV0dXJuIHZvaWQgMDtcblx0Y29uc3Qgbm9ybWFsaXplZCA9IChBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IFtwYXRoXSkubWFwKGFzU3RyaW5nKS5maWx0ZXIoQm9vbGVhbik7XG5cdHJldHVybiBub3JtYWxpemVkLmxlbmd0aCA+IDAgPyBub3JtYWxpemVkIDogdm9pZCAwO1xufTtcbnZhciBub3JtYWxpemVBcmdzID0gKGFyZ3MpID0+IHtcblx0aWYgKGFyZ3MgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogW2FyZ3NdO1xufTtcbnZhciBub3JtYWxpemVUcmFuc2ZlciA9ICh0cmFuc2ZlcikgPT4ge1xuXHRpZiAodHJhbnNmZXIgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkodHJhbnNmZXIpID8gdHJhbnNmZXIgOiBbdHJhbnNmZXJdO1xufTtcbnZhciBub3JtYWxpemVQdXJwb3NlID0gKHB1cnBvc2UpID0+IHtcblx0Y29uc3QgaW5wdXQgPSBBcnJheS5pc0FycmF5KHB1cnBvc2UpID8gcHVycG9zZSA6IHB1cnBvc2UgPyBbcHVycG9zZV0gOiBbREVGQVVMVF9QVVJQT1NFXTtcblx0Y29uc3QgZGVkdXBlZCA9IFtdO1xuXHRmb3IgKGNvbnN0IGVudHJ5IG9mIGlucHV0KSBpZiAoUFVSUE9TRVMuaGFzKGVudHJ5KSAmJiAhZGVkdXBlZC5pbmNsdWRlcyhlbnRyeSkpIGRlZHVwZWQucHVzaChlbnRyeSk7XG5cdHJldHVybiBkZWR1cGVkLmxlbmd0aCA+IDAgPyBkZWR1cGVkIDogW0RFRkFVTFRfUFVSUE9TRV07XG59O1xudmFyIGluZmVyVHlwZSA9IChpbnB1dCkgPT4ge1xuXHRjb25zdCBleHBsaWNpdCA9IGFzU3RyaW5nKGlucHV0LnR5cGUpO1xuXHRpZiAoVFlQRVMuaGFzKGV4cGxpY2l0KSkgcmV0dXJuIGV4cGxpY2l0O1xuXHRjb25zdCBvcCA9IGFzU3RyaW5nKGlucHV0Lm9wKTtcblx0aWYgKG9wID09PSBcImdldFwiIHx8IG9wID09PSBcInNldFwiIHx8IG9wID09PSBcImFwcGx5XCIgfHwgb3AgPT09IFwiaW1wb3J0XCIpIHJldHVybiBcImludm9rZVwiO1xuXHRpZiAoaW5wdXQuZXJyb3IpIHJldHVybiBcInJlc3BvbnNlXCI7XG5cdHJldHVybiBcInJlcXVlc3RcIjtcbn07XG52YXIgaW5mZXJPcGVyYXRpb24gPSAoaW5wdXQsIHJlc29sdmVkVHlwZSkgPT4ge1xuXHRpZiAoaW5wdXQub3ApIHJldHVybiBpbnB1dC5vcDtcblx0aWYgKHJlc29sdmVkVHlwZSA9PT0gXCJpbnZva2VcIikgcmV0dXJuIFwiaW52b2tlXCI7XG5cdGlmIChyZXNvbHZlZFR5cGUgPT09IFwiYWN0XCIpIHJldHVybiBcImRlbGl2ZXJcIjtcblx0cmV0dXJuIFwibWFpbFwiO1xufTtcbnZhciBpbmZlclByb3RvY29sID0gKHByb3RvY29sKSA9PiB7XG5cdGNvbnN0IHZhbHVlID0gYXNTdHJpbmcocHJvdG9jb2wpLnRvTG93ZXJDYXNlKCk7XG5cdGlmICghdmFsdWUpIHJldHVybiBcInVua25vd25cIjtcblx0cmV0dXJuIHZhbHVlO1xufTtcbnZhciByYW5kb21JZCA9ICgpID0+IHtcblx0aWYgKHR5cGVvZiBjcnlwdG8gIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGNyeXB0by5yYW5kb21VVUlEID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuXHRyZXR1cm4gYHVuaWZvcm1fJHtEYXRlLm5vdygpfV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX1gO1xufTtcbnZhciBjcmVhdGVQcm90b2NvbEVudmVsb3BlID0gKGlucHV0KSA9PiB7XG5cdGNvbnN0IHRpbWVzdGFtcCA9IE51bWJlci5pc0Zpbml0ZShpbnB1dC50aW1lc3RhbXApID8gTnVtYmVyKGlucHV0LnRpbWVzdGFtcCkgOiBEYXRlLm5vdygpO1xuXHRjb25zdCBzb3VyY2UgPSBhc1N0cmluZyhpbnB1dC5zcmNDaGFubmVsID8/IGlucHV0LnNvdXJjZSkgfHwgXCJ1bmlmb3JtXCI7XG5cdGNvbnN0IGRlc3RpbmF0aW9uID0gYXNTdHJpbmcoaW5wdXQuZGVzdGluYXRpb24pO1xuXHRjb25zdCBkc3RDaGFubmVsID0gaW5wdXQuZHN0Q2hhbm5lbCA/PyAoZGVzdGluYXRpb24gPyBkZXN0aW5hdGlvbiA6IHZvaWQgMCk7XG5cdGNvbnN0IHV1aWQgPSBhc1N0cmluZyhpbnB1dC51dWlkID8/IGlucHV0LmlkKSB8fCByYW5kb21JZCgpO1xuXHRjb25zdCB0eXBlID0gaW5mZXJUeXBlKGlucHV0KTtcblx0Y29uc3QgcGF5bG9hZCA9IGlucHV0LnBheWxvYWQgPz8gaW5wdXQuZGF0YTtcblx0Y29uc3QgbWV0YWRhdGEgPSB7IC4uLmlucHV0Lm1ldGFkYXRhID8/IHt9IH07XG5cdHJldHVybiB7XG5cdFx0cHVycG9zZTogbm9ybWFsaXplUHVycG9zZShpbnB1dC5wdXJwb3NlKSxcblx0XHRwcm90b2NvbDogaW5mZXJQcm90b2NvbChpbnB1dC5wcm90b2NvbCksXG5cdFx0cmVkaXJlY3Q6IEJvb2xlYW4oaW5wdXQucmVkaXJlY3QpLFxuXHRcdGZsYWdzOiB7IC4uLmlucHV0LmZsYWdzID8/IHt9IH0sXG5cdFx0dHlwZSxcblx0XHRwYXRoOiBub3JtYWxpemVQYXRoKGlucHV0LnBhdGgpLFxuXHRcdHJlc3VsdDogaW5wdXQucmVzdWx0LFxuXHRcdGFyZ3M6IG5vcm1hbGl6ZUFyZ3MoaW5wdXQuYXJncyksXG5cdFx0b3A6IGluZmVyT3BlcmF0aW9uKGlucHV0LCB0eXBlKSxcblx0XHRlcnJvcjogaW5wdXQuZXJyb3IgPyBTdHJpbmcoaW5wdXQuZXJyb3IpIDogdm9pZCAwLFxuXHRcdHRpbWVzdGFtcCxcblx0XHR3aGVyZTogYXNTdHJpbmcoaW5wdXQud2hlcmUpIHx8IHZvaWQgMCxcblx0XHR1dWlkLFxuXHRcdGJyaWRnZXM6IEFycmF5LmlzQXJyYXkoaW5wdXQuYnJpZGdlcykgPyBpbnB1dC5icmlkZ2VzLm1hcChhc1N0cmluZykuZmlsdGVyKEJvb2xlYW4pIDogW10sXG5cdFx0cGF5bG9hZCxcblx0XHR0cmFuc2Zlcjogbm9ybWFsaXplVHJhbnNmZXIoaW5wdXQudHJhbnNmZXIpLFxuXHRcdGV4dGVuc2lvbjogaW5wdXQuZXh0ZW5zaW9uLFxuXHRcdGRlZmVyOiBpbnB1dC5kZWZlcixcblx0XHRzcmNDaGFubmVsOiBzb3VyY2UsXG5cdFx0ZHN0Q2hhbm5lbCxcblx0XHRpZDogdXVpZCxcblx0XHRzb3VyY2UsXG5cdFx0ZGVzdGluYXRpb246IGRlc3RpbmF0aW9uIHx8IHZvaWQgMCxcblx0XHRkYXRhOiBwYXlsb2FkLFxuXHRcdGNvbnRlbnRUeXBlOiBhc1N0cmluZyhpbnB1dC5jb250ZW50VHlwZSkgfHwgdm9pZCAwLFxuXHRcdG1ldGFkYXRhXG5cdH07XG59O1xudmFyIGlzUHJvdG9jb2xFbnZlbG9wZSA9ICh2YWx1ZSkgPT4ge1xuXHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuXHRjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcblx0cmV0dXJuIHR5cGVvZiBjYW5kaWRhdGUudXVpZCA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgY2FuZGlkYXRlLnNyY0NoYW5uZWwgPT09IFwic3RyaW5nXCIgJiYgQXJyYXkuaXNBcnJheShjYW5kaWRhdGUucHVycG9zZSkgJiYgdHlwZW9mIGNhbmRpZGF0ZS50eXBlID09PSBcInN0cmluZ1wiO1xufTtcbnZhciBub3JtYWxpemVQcm90b2NvbEVudmVsb3BlID0gKHZhbHVlKSA9PiBpc1Byb3RvY29sRW52ZWxvcGUodmFsdWUpID8gY3JlYXRlUHJvdG9jb2xFbnZlbG9wZSh2YWx1ZSkgOiBjcmVhdGVQcm90b2NvbEVudmVsb3BlKHZhbHVlKTtcbnZhciBQcm90b2NvbFJlcGxheUd1YXJkID0gY2xhc3Mge1xuXHRzZWVuID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0d2luZG93TXM7XG5cdGNvbnN0cnVjdG9yKHdpbmRvd01zID0gMzAwKSB7XG5cdFx0dGhpcy53aW5kb3dNcyA9IE1hdGgubWF4KDEwLCB3aW5kb3dNcyk7XG5cdH1cblx0YWNjZXB0KGVudmVsb3BlKSB7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRjb25zdCBrZXkgPSBlbnZlbG9wZS51dWlkO1xuXHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5zZWVuLmdldChrZXkpO1xuXHRcdHRoaXMucHJ1bmUobm93KTtcblx0XHRpZiAocHJldmlvdXMgJiYgbm93IC0gcHJldmlvdXMgPD0gdGhpcy53aW5kb3dNcykgcmV0dXJuIGZhbHNlO1xuXHRcdHRoaXMuc2Vlbi5zZXQoa2V5LCBub3cpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHBydW5lKG5vdykge1xuXHRcdGZvciAoY29uc3QgW2lkLCB0c10gb2YgdGhpcy5zZWVuLmVudHJpZXMoKSkgaWYgKG5vdyAtIHRzID4gdGhpcy53aW5kb3dNcykgdGhpcy5zZWVuLmRlbGV0ZShpZCk7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9tZXNzYWdpbmcvVW5pZmllZE1lc3NhZ2luZy50c1xudmFyIFBlbmRpbmdNZXNzYWdlU3RvcmUgPSBjbGFzcyB7XG5cdHN0b3JhZ2VLZXk7XG5cdG1heE1lc3NhZ2VzO1xuXHRkZWZhdWx0VFRMTXM7XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHR0aGlzLnN0b3JhZ2VLZXkgPSBvcHRpb25zPy5zdG9yYWdlS2V5ID8/IFwidW5pZm9ybS1tZXNzYWdpbmctcGVuZGluZ1wiO1xuXHRcdHRoaXMubWF4TWVzc2FnZXMgPSBvcHRpb25zPy5tYXhNZXNzYWdlcyA/PyAyMDA7XG5cdFx0dGhpcy5kZWZhdWx0VFRMTXMgPSBvcHRpb25zPy5kZWZhdWx0VFRMTXMgPz8gODY0ZTU7XG5cdH1cblx0cmVhZCgpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YgbG9jYWxTdG9yYWdlID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gW107XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSk7XG5cdFx0XHRpZiAoIXJhdykgcmV0dXJuIFtdO1xuXHRcdFx0Y29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpO1xuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKSA/IHBhcnNlZCA6IFtdO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0fVxuXHR3cml0ZShlbnRyaWVzKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIGxvY2FsU3RvcmFnZSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuXHRcdHRyeSB7XG5cdFx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KGVudHJpZXMpKTtcblx0XHR9IGNhdGNoIHt9XG5cdH1cblx0ZW5xdWV1ZShkZXN0aW5hdGlvbiwgbWVzc2FnZSkge1xuXHRcdGlmICghZGVzdGluYXRpb24pIHJldHVybjtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGlmICgoTnVtYmVyKG1lc3NhZ2U/Lm1ldGFkYXRhPy5leHBpcmVzQXQpID8gTWF0aC5tYXgoMCwgTnVtYmVyKG1lc3NhZ2UubWV0YWRhdGEuZXhwaXJlc0F0KSAtIG5vdykgOiB0aGlzLmRlZmF1bHRUVExNcykgPD0gMCkgcmV0dXJuO1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLnJlYWQoKS5maWx0ZXIoKGUpID0+IGUgJiYgdHlwZW9mIGUgPT09IFwib2JqZWN0XCIpLmZpbHRlcigoZSkgPT4ge1xuXHRcdFx0cmV0dXJuIChOdW1iZXIoZT8ubWVzc2FnZT8ubWV0YWRhdGE/LmV4cGlyZXNBdCkgfHwgTnVtYmVyKGU/LnN0b3JlZEF0KSArIHRoaXMuZGVmYXVsdFRUTE1zKSA+IG5vdztcblx0XHR9KTtcblx0XHRlbnRyaWVzLnB1c2goe1xuXHRcdFx0ZGVzdGluYXRpb24sXG5cdFx0XHRtZXNzYWdlLFxuXHRcdFx0c3RvcmVkQXQ6IG5vd1xuXHRcdH0pO1xuXHRcdGlmIChlbnRyaWVzLmxlbmd0aCA+IHRoaXMubWF4TWVzc2FnZXMpIGVudHJpZXMuc3BsaWNlKDAsIGVudHJpZXMubGVuZ3RoIC0gdGhpcy5tYXhNZXNzYWdlcyk7XG5cdFx0dGhpcy53cml0ZShlbnRyaWVzKTtcblx0fVxuXHRkcmFpbihkZXN0aW5hdGlvbikge1xuXHRcdGlmICghZGVzdGluYXRpb24pIHJldHVybiBbXTtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLnJlYWQoKTtcblx0XHRjb25zdCBrZWVwID0gW107XG5cdFx0Y29uc3Qgb3V0ID0gW107XG5cdFx0Zm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcblx0XHRcdGlmICgoTnVtYmVyKGU/Lm1lc3NhZ2U/Lm1ldGFkYXRhPy5leHBpcmVzQXQpIHx8IE51bWJlcihlPy5zdG9yZWRBdCkgKyB0aGlzLmRlZmF1bHRUVExNcykgPD0gbm93KSBjb250aW51ZTtcblx0XHRcdGlmIChlPy5kZXN0aW5hdGlvbiA9PT0gZGVzdGluYXRpb24gJiYgZT8ubWVzc2FnZSkgb3V0LnB1c2goZS5tZXNzYWdlKTtcblx0XHRcdGVsc2Uga2VlcC5wdXNoKGUpO1xuXHRcdH1cblx0XHR0aGlzLndyaXRlKGtlZXApO1xuXHRcdHJldHVybiBvdXQ7XG5cdH1cblx0aGFzKGRlc3RpbmF0aW9uKSB7XG5cdFx0aWYgKCFkZXN0aW5hdGlvbikgcmV0dXJuIGZhbHNlO1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0cmV0dXJuIHRoaXMucmVhZCgpLnNvbWUoKGUpID0+IHtcblx0XHRcdGlmICghZSB8fCB0eXBlb2YgZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuXHRcdFx0cmV0dXJuIChOdW1iZXIoZT8ubWVzc2FnZT8ubWV0YWRhdGE/LmV4cGlyZXNBdCkgfHwgTnVtYmVyKGU/LnN0b3JlZEF0KSArIHRoaXMuZGVmYXVsdFRUTE1zKSA+IG5vdyAmJiBlPy5kZXN0aW5hdGlvbiA9PT0gZGVzdGluYXRpb247XG5cdFx0fSk7XG5cdH1cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy53cml0ZShbXSk7XG5cdH1cbn07XG52YXIgVW5pZmllZE1lc3NhZ2luZ01hbmFnZXIgPSBjbGFzcyB7XG5cdGhhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y2hhbm5lbHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHR3b3JrZXJDaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHZpZXdDaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHBpcGVsaW5lcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdG1lc3NhZ2VRdWV1ZTtcblx0cGVuZGluZ1N0b3JlO1xuXHRpbml0aWFsaXplZFZpZXdzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0dmlld1JlYWR5UHJvbWlzZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRleGVjdXRpb25Db250ZXh0O1xuXHRjaGFubmVsTWFwcGluZ3M7XG5cdGNvbXBvbmVudFJlZ2lzdHJ5ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cmVwbGF5R3VhcmQgPSBuZXcgUHJvdG9jb2xSZXBsYXlHdWFyZCgzMDApO1xuXHRsb2NhbENoYW5uZWxJZCA9IFwiXCI7XG5cdGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5leGVjdXRpb25Db250ZXh0ID0gZGV0ZWN0RXhlY3V0aW9uQ29udGV4dCgpO1xuXHRcdHRoaXMubG9jYWxDaGFubmVsSWQgPSBgJHt0aGlzLmV4ZWN1dGlvbkNvbnRleHR9OiR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApfWA7XG5cdFx0dGhpcy5jaGFubmVsTWFwcGluZ3MgPSBjb25maWcuY2hhbm5lbE1hcHBpbmdzID8/IHt9O1xuXHRcdHRoaXMubWVzc2FnZVF1ZXVlID0gZ2V0TWVzc2FnZVF1ZXVlKGNvbmZpZy5xdWV1ZU9wdGlvbnMpO1xuXHRcdHRoaXMucGVuZGluZ1N0b3JlID0gbmV3IFBlbmRpbmdNZXNzYWdlU3RvcmUoY29uZmlnLnBlbmRpbmdTdG9yZU9wdGlvbnMpO1xuXHRcdHRoaXMuc2V0dXBHbG9iYWxMaXN0ZW5lcnMoKTtcblx0fVxuXHRyZWdpc3RlckhhbmRsZXIoZGVzdGluYXRpb24sIGhhbmRsZXIpIHtcblx0XHRpZiAoIXRoaXMuaGFuZGxlcnMuaGFzKGRlc3RpbmF0aW9uKSkgdGhpcy5oYW5kbGVycy5zZXQoZGVzdGluYXRpb24sIFtdKTtcblx0XHR0aGlzLmhhbmRsZXJzLmdldChkZXN0aW5hdGlvbikucHVzaChoYW5kbGVyKTtcblx0fVxuXHR1bnJlZ2lzdGVySGFuZGxlcihkZXN0aW5hdGlvbiwgaGFuZGxlcikge1xuXHRcdGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycy5nZXQoZGVzdGluYXRpb24pO1xuXHRcdGlmIChoYW5kbGVycykge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBoYW5kbGVycy5pbmRleE9mKGhhbmRsZXIpO1xuXHRcdFx0aWYgKGluZGV4ID4gLTEpIGhhbmRsZXJzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIHNlbmRNZXNzYWdlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBmdWxsTWVzc2FnZSA9IHRoaXMudG9Qcm90b2NvbE1lc3NhZ2UobWVzc2FnZSk7XG5cdFx0aWYgKGF3YWl0IHRoaXMudHJ5RGVsaXZlck1lc3NhZ2UoZnVsbE1lc3NhZ2UpKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAoZnVsbE1lc3NhZ2UuZGVzdGluYXRpb24pIHtcblx0XHRcdHRoaXMucGVuZGluZ1N0b3JlLmVucXVldWUoZnVsbE1lc3NhZ2UuZGVzdGluYXRpb24sIGZ1bGxNZXNzYWdlKTtcblx0XHRcdGF3YWl0IHRoaXMubWVzc2FnZVF1ZXVlLnF1ZXVlTWVzc2FnZShmdWxsTWVzc2FnZS50eXBlLCBmdWxsTWVzc2FnZSwge1xuXHRcdFx0XHRwcmlvcml0eTogZnVsbE1lc3NhZ2UubWV0YWRhdGE/LnByaW9yaXR5ID8/IFwibm9ybWFsXCIsXG5cdFx0XHRcdG1heFJldHJpZXM6IE51bWJlcihmdWxsTWVzc2FnZS5tZXRhZGF0YT8ubWF4UmV0cmllcyA/PyAzKSxcblx0XHRcdFx0ZGVzdGluYXRpb246IGZ1bGxNZXNzYWdlLmRlc3RpbmF0aW9uXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGFzeW5jIHByb2Nlc3NNZXNzYWdlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUHJvdG9jb2xFbnZlbG9wZShtZXNzYWdlKTtcblx0XHRpZiAoIXRoaXMucmVwbGF5R3VhcmQuYWNjZXB0KG5vcm1hbGl6ZWQpKSByZXR1cm47XG5cdFx0Y29uc3QgZGVzdGluYXRpb24gPSBub3JtYWxpemVkLmRlc3RpbmF0aW9uID8/IFwiZ2VuZXJhbFwiO1xuXHRcdGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycy5nZXQoZGVzdGluYXRpb24pID8/IFtdO1xuXHRcdGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykgaWYgKGhhbmRsZXIuY2FuSGFuZGxlKG5vcm1hbGl6ZWQpKSB0cnkge1xuXHRcdFx0YXdhaXQgaGFuZGxlci5oYW5kbGUobm9ybWFsaXplZCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoYFtVbmlmaWVkTWVzc2FnaW5nXSBIYW5kbGVyIGVycm9yIGZvciAke2Rlc3RpbmF0aW9ufTpgLCBlcnJvcik7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIHRyeURlbGl2ZXJNZXNzYWdlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUHJvdG9jb2xFbnZlbG9wZShtZXNzYWdlKTtcblx0XHRpZiAobm9ybWFsaXplZC5kZXN0aW5hdGlvbiAmJiB0aGlzLmhhbmRsZXJzLmhhcyhub3JtYWxpemVkLmRlc3RpbmF0aW9uKSkge1xuXHRcdFx0YXdhaXQgdGhpcy5wcm9jZXNzTWVzc2FnZShub3JtYWxpemVkKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBjaGFubmVsTmFtZSA9IHRoaXMuZ2V0Q2hhbm5lbEZvckRlc3RpbmF0aW9uKG5vcm1hbGl6ZWQuZGVzdGluYXRpb24pO1xuXHRcdGlmIChjaGFubmVsTmFtZSAmJiB0aGlzLmNoYW5uZWxzLmhhcyhjaGFubmVsTmFtZSkpIHtcblx0XHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLmNoYW5uZWxzLmdldChjaGFubmVsTmFtZSk7XG5cdFx0XHRpZiAoY2hhbm5lbCBpbnN0YW5jZW9mIEJyb2FkY2FzdENoYW5uZWwpIHRyeSB7XG5cdFx0XHRcdGNoYW5uZWwucG9zdE1lc3NhZ2Uobm9ybWFsaXplZCk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKGBbVW5pZmllZE1lc3NhZ2luZ10gRmFpbGVkIHRvIHBvc3QgdG8gYnJvYWRjYXN0IGNoYW5uZWwgJHtjaGFubmVsTmFtZX06YCwgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoY2hhbm5lbCAmJiBcInJlcXVlc3RcIiBpbiBjaGFubmVsKSB0cnkge1xuXHRcdFx0XHRhd2FpdCBjaGFubmVsLnJlcXVlc3Qobm9ybWFsaXplZC50eXBlLCBbbm9ybWFsaXplZF0pO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybihgW1VuaWZpZWRNZXNzYWdpbmddIEZhaWxlZCB0byBwb3N0IHRvIHdvcmtlciBjaGFubmVsICR7Y2hhbm5lbE5hbWV9OmAsIGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJlZ2lzdGVyVmlld0NoYW5uZWxzKHZpZXdIYXNoLCBjb25maWdzKSB7XG5cdFx0Y29uc3QgY2hhbm5lbE5hbWVzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0XHRmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWdzKSB7XG5cdFx0XHRpZiAoIXRoaXMuaXNXb3JrZXJTdXBwb3J0ZWQoY29uZmlnKSkge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhgW1VuaWZpZWRNZXNzYWdpbmddIFNraXBwaW5nIHdvcmtlciAnJHtjb25maWcubmFtZX0nIGluICR7dGhpcy5leGVjdXRpb25Db250ZXh0fSBjb250ZXh0YCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY2hhbm5lbCA9IGNyZWF0ZVF1ZXVlZE9wdGltaXplZFdvcmtlckNoYW5uZWwoe1xuXHRcdFx0XHRuYW1lOiBjb25maWcubmFtZSxcblx0XHRcdFx0c2NyaXB0OiBjb25maWcuc2NyaXB0LFxuXHRcdFx0XHRvcHRpb25zOiBjb25maWcub3B0aW9ucyxcblx0XHRcdFx0Y29udGV4dDogdGhpcy5yZXNvbHZlV29ya2VyQ29udGV4dCgpXG5cdFx0XHR9LCBjb25maWcucHJvdG9jb2xPcHRpb25zLCAoKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGBbVW5pZmllZE1lc3NhZ2luZ10gQ2hhbm5lbCAnJHtjb25maWcubmFtZX0nIHJlYWR5IGZvciB2aWV3ICcke3ZpZXdIYXNofSdgKTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgY2hhbm5lbEtleSA9IGAke3ZpZXdIYXNofToke2NvbmZpZy5uYW1lfWA7XG5cdFx0XHR0aGlzLndvcmtlckNoYW5uZWxzLnNldChjaGFubmVsS2V5LCBjaGFubmVsKTtcblx0XHRcdHRoaXMuY2hhbm5lbHMuc2V0KGNoYW5uZWxLZXksIGNoYW5uZWwpO1xuXHRcdFx0Y2hhbm5lbE5hbWVzLmFkZChjb25maWcubmFtZSk7XG5cdFx0fVxuXHRcdHRoaXMudmlld0NoYW5uZWxzLnNldCh2aWV3SGFzaCwgY2hhbm5lbE5hbWVzKTtcblx0fVxuXHRhc3luYyBpbml0aWFsaXplVmlld0NoYW5uZWxzKHZpZXdIYXNoKSB7XG5cdFx0aWYgKHRoaXMuaW5pdGlhbGl6ZWRWaWV3cy5oYXModmlld0hhc2gpKSByZXR1cm47XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmNyZWF0ZURlZmVycmVkKCk7XG5cdFx0dGhpcy52aWV3UmVhZHlQcm9taXNlcy5zZXQodmlld0hhc2gsIGRlZmVycmVkKTtcblx0XHRjb25zb2xlLmxvZyhgW1VuaWZpZWRNZXNzYWdpbmddIEluaXRpYWxpemluZyBjaGFubmVscyBmb3IgdmlldzogJHt2aWV3SGFzaH1gKTtcblx0XHRjb25zdCBjaGFubmVsTmFtZXMgPSB0aGlzLnZpZXdDaGFubmVscy5nZXQodmlld0hhc2gpO1xuXHRcdGlmICghY2hhbm5lbE5hbWVzKSB7XG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGluaXRQcm9taXNlcyA9IFtdO1xuXHRcdGZvciAoY29uc3QgY2hhbm5lbE5hbWUgb2YgY2hhbm5lbE5hbWVzKSB7XG5cdFx0XHRjb25zdCBjaGFubmVsS2V5ID0gYCR7dmlld0hhc2h9OiR7Y2hhbm5lbE5hbWV9YDtcblx0XHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLndvcmtlckNoYW5uZWxzLmdldChjaGFubmVsS2V5KTtcblx0XHRcdGlmIChjaGFubmVsKSBpbml0UHJvbWlzZXMucHVzaChjaGFubmVsLnJlcXVlc3QoXCJwaW5nXCIsIHt9KS5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGBbVW5pZmllZE1lc3NhZ2luZ10gQ2hhbm5lbCAnJHtjaGFubmVsTmFtZX0nIHF1ZXVlZCBmb3IgdmlldyAnJHt2aWV3SGFzaH0nYCk7XG5cdFx0XHR9KSk7XG5cdFx0fVxuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChpbml0UHJvbWlzZXMpO1xuXHRcdHRoaXMuaW5pdGlhbGl6ZWRWaWV3cy5hZGQodmlld0hhc2gpO1xuXHRcdGRlZmVycmVkLnJlc29sdmUoKTtcblx0fVxuXHRnZXRXb3JrZXJDaGFubmVsKHZpZXdIYXNoLCB3b3JrZXJOYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMud29ya2VyQ2hhbm5lbHMuZ2V0KGAke3ZpZXdIYXNofToke3dvcmtlck5hbWV9YCkgPz8gbnVsbDtcblx0fVxuXHRnZXRCcm9hZGNhc3RDaGFubmVsKGNoYW5uZWxOYW1lKSB7XG5cdFx0aWYgKCF0aGlzLmNoYW5uZWxzLmhhcyhjaGFubmVsTmFtZSkpIHRyeSB7XG5cdFx0XHRjb25zdCBjaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoY2hhbm5lbE5hbWUpO1xuXHRcdFx0Y2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0dGhpcy5oYW5kbGVCcm9hZGNhc3RNZXNzYWdlKGV2ZW50LmRhdGEsIGNoYW5uZWxOYW1lKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5jaGFubmVscy5zZXQoY2hhbm5lbE5hbWUsIGNoYW5uZWwpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oYFtVbmlmaWVkTWVzc2FnaW5nXSBCcm9hZGNhc3RDaGFubmVsIG5vdCBhdmFpbGFibGU6ICR7Y2hhbm5lbE5hbWV9YCwgZXJyb3IpO1xuXHRcdFx0dGhpcy5jaGFubmVscy5zZXQoY2hhbm5lbE5hbWUsIHtcblx0XHRcdFx0cG9zdE1lc3NhZ2U6ICgpID0+IHt9LFxuXHRcdFx0XHRjbG9zZTogKCkgPT4ge30sXG5cdFx0XHRcdGFkZEV2ZW50TGlzdGVuZXI6ICgpID0+IHt9LFxuXHRcdFx0XHRyZW1vdmVFdmVudExpc3RlbmVyOiAoKSA9PiB7fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNoYW5uZWxzLmdldChjaGFubmVsTmFtZSk7XG5cdH1cblx0YXN5bmMgaGFuZGxlQnJvYWRjYXN0TWVzc2FnZShtZXNzYWdlLCBjaGFubmVsTmFtZSkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBlbnZlbG9wZSA9IHRoaXMudG9Qcm90b2NvbE1lc3NhZ2UobWVzc2FnZSA/PyB7fSwgY2hhbm5lbE5hbWUpO1xuXHRcdFx0aWYgKGVudmVsb3BlLnNyY0NoYW5uZWwgPT09IHRoaXMubG9jYWxDaGFubmVsSWQpIHJldHVybjtcblx0XHRcdGF3YWl0IHRoaXMucHJvY2Vzc01lc3NhZ2UoZW52ZWxvcGUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGBbVW5pZmllZE1lc3NhZ2luZ10gRXJyb3IgaGFuZGxpbmcgYnJvYWRjYXN0IG1lc3NhZ2Ugb24gJHtjaGFubmVsTmFtZX06YCwgZXJyb3IpO1xuXHRcdH1cblx0fVxuXHRyZWdpc3RlclBpcGVsaW5lKGNvbmZpZykge1xuXHRcdHRoaXMucGlwZWxpbmVzLnNldChjb25maWcubmFtZSwgY29uZmlnKTtcblx0fVxuXHRhc3luYyBwcm9jZXNzVGhyb3VnaFBpcGVsaW5lKHBpcGVsaW5lTmFtZSwgbWVzc2FnZSkge1xuXHRcdGNvbnN0IHBpcGVsaW5lID0gdGhpcy5waXBlbGluZXMuZ2V0KHBpcGVsaW5lTmFtZSk7XG5cdFx0aWYgKCFwaXBlbGluZSkgdGhyb3cgbmV3IEVycm9yKGBQaXBlbGluZSAnJHtwaXBlbGluZU5hbWV9JyBub3QgZm91bmRgKTtcblx0XHRsZXQgY3VycmVudE1lc3NhZ2UgPSB7IC4uLm1lc3NhZ2UgfTtcblx0XHRjb25zdCB0aW1lb3V0ID0gcGlwZWxpbmUudGltZW91dCA/PyAzZTQ7XG5cdFx0Zm9yIChjb25zdCBzdGFnZSBvZiBwaXBlbGluZS5zdGFnZXMpIHtcblx0XHRcdGNvbnN0IHN0YWdlVGltZW91dCA9IHN0YWdlLnRpbWVvdXQgPz8gdGltZW91dDtcblx0XHRcdGNvbnN0IHJldHJpZXMgPSBzdGFnZS5yZXRyaWVzID8/IDA7XG5cdFx0XHRmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSByZXRyaWVzOyBhdHRlbXB0KyspIHRyeSB7XG5cdFx0XHRcdGN1cnJlbnRNZXNzYWdlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtzdGFnZS5oYW5kbGVyKGN1cnJlbnRNZXNzYWdlKSwgbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gc2V0VGltZW91dCgoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgU3RhZ2UgJyR7c3RhZ2UubmFtZX0nIHRpbWVvdXRgKSksIHN0YWdlVGltZW91dCkpXSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0aWYgKGF0dGVtcHQgPT09IHJldHJpZXMpIHtcblx0XHRcdFx0XHRpZiAocGlwZWxpbmUuZXJyb3JIYW5kbGVyKSBwaXBlbGluZS5lcnJvckhhbmRsZXIoZXJyb3IsIHN0YWdlLCBjdXJyZW50TWVzc2FnZSk7XG5cdFx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc29sZS53YXJuKGBbVW5pZmllZE1lc3NhZ2luZ10gUGlwZWxpbmUgJyR7cGlwZWxpbmVOYW1lfScgc3RhZ2UgJyR7c3RhZ2UubmFtZX0nIGF0dGVtcHQgJHthdHRlbXB0ICsgMX0gZmFpbGVkOmAsIGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGN1cnJlbnRNZXNzYWdlO1xuXHR9XG5cdGFzeW5jIHByb2Nlc3NRdWV1ZWRNZXNzYWdlcyhkZXN0aW5hdGlvbikge1xuXHRcdGNvbnN0IHF1ZXVlZE1lc3NhZ2VzID0gYXdhaXQgdGhpcy5tZXNzYWdlUXVldWUuZ2V0UXVldWVkTWVzc2FnZXMoZGVzdGluYXRpb24pO1xuXHRcdGZvciAoY29uc3QgcXVldWVkTWVzc2FnZSBvZiBxdWV1ZWRNZXNzYWdlcykge1xuXHRcdFx0Y29uc3QgZGF0YUFzTWVzc2FnZSA9IHF1ZXVlZE1lc3NhZ2UuZGF0YTtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBkYXRhQXNNZXNzYWdlICYmIHR5cGVvZiBkYXRhQXNNZXNzYWdlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBkYXRhQXNNZXNzYWdlLnR5cGUgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGRhdGFBc01lc3NhZ2UuaWQgPT09IFwic3RyaW5nXCIgPyB0aGlzLnRvUHJvdG9jb2xNZXNzYWdlKGRhdGFBc01lc3NhZ2UpIDoge1xuXHRcdFx0XHQuLi50aGlzLnRvUHJvdG9jb2xNZXNzYWdlKHtcblx0XHRcdFx0XHRpZDogcXVldWVkTWVzc2FnZS5pZCxcblx0XHRcdFx0XHR0eXBlOiBxdWV1ZWRNZXNzYWdlLnR5cGUsXG5cdFx0XHRcdFx0c291cmNlOiBcInF1ZXVlXCIsXG5cdFx0XHRcdFx0ZGVzdGluYXRpb246IHF1ZXVlZE1lc3NhZ2UuZGVzdGluYXRpb24sXG5cdFx0XHRcdFx0ZGF0YTogcXVldWVkTWVzc2FnZS5kYXRhLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdFx0XHR0aW1lc3RhbXA6IHF1ZXVlZE1lc3NhZ2UudGltZXN0YW1wLFxuXHRcdFx0XHRcdFx0cmV0cnlDb3VudDogcXVldWVkTWVzc2FnZS5yZXRyeUNvdW50LFxuXHRcdFx0XHRcdFx0bWF4UmV0cmllczogcXVldWVkTWVzc2FnZS5tYXhSZXRyaWVzLFxuXHRcdFx0XHRcdFx0Li4ucXVldWVkTWVzc2FnZS5tZXRhZGF0YVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHR5cGU6IHF1ZXVlZE1lc3NhZ2UudHlwZVxuXHRcdFx0fTtcblx0XHRcdGlmIChhd2FpdCB0aGlzLnRyeURlbGl2ZXJNZXNzYWdlKG1lc3NhZ2UpKSBhd2FpdCB0aGlzLm1lc3NhZ2VRdWV1ZS5yZW1vdmVNZXNzYWdlKHF1ZXVlZE1lc3NhZ2UuaWQpO1xuXHRcdH1cblx0fVxuXHRyZWdpc3RlckNvbXBvbmVudChjb21wb25lbnRJZCwgZGVzdGluYXRpb24pIHtcblx0XHR0aGlzLmNvbXBvbmVudFJlZ2lzdHJ5LnNldChjb21wb25lbnRJZCwgZGVzdGluYXRpb24pO1xuXHRcdHRoaXMucHJvY2Vzc1F1ZXVlZE1lc3NhZ2VzKGRlc3RpbmF0aW9uKS5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdGNvbnNvbGUud2FybihgW1VuaWZpZWRNZXNzYWdpbmddIEZhaWxlZCB0byBwcm9jZXNzIHF1ZXVlZCBtZXNzYWdlcyBmb3IgJHtkZXN0aW5hdGlvbn06YCwgZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG5cdGluaXRpYWxpemVDb21wb25lbnQoY29tcG9uZW50SWQpIHtcblx0XHRjb25zdCBkZXN0aW5hdGlvbiA9IHRoaXMuY29tcG9uZW50UmVnaXN0cnkuZ2V0KGNvbXBvbmVudElkKTtcblx0XHRpZiAoIWRlc3RpbmF0aW9uKSByZXR1cm4gW107XG5cdFx0dGhpcy5wcm9jZXNzUXVldWVkTWVzc2FnZXMoZGVzdGluYXRpb24pLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0Y29uc29sZS53YXJuKGBbVW5pZmllZE1lc3NhZ2luZ10gRmFpbGVkIHRvIHJlcGxheSBxdWV1ZWQgbWVzc2FnZXMgZm9yICR7ZGVzdGluYXRpb259OmAsIGVycm9yKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gdGhpcy5wZW5kaW5nU3RvcmUuZHJhaW4oZGVzdGluYXRpb24pO1xuXHR9XG5cdGhhc1BlbmRpbmdNZXNzYWdlcyhkZXN0aW5hdGlvbikge1xuXHRcdHJldHVybiB0aGlzLnBlbmRpbmdTdG9yZS5oYXMoZGVzdGluYXRpb24pO1xuXHR9XG5cdGVucXVldWVQZW5kaW5nTWVzc2FnZShkZXN0aW5hdGlvbiwgbWVzc2FnZSkge1xuXHRcdGNvbnN0IGRlc3QgPSBTdHJpbmcoZGVzdGluYXRpb24gPz8gXCJcIikudHJpbSgpO1xuXHRcdGlmICghZGVzdCB8fCAhbWVzc2FnZSkgcmV0dXJuO1xuXHRcdHRoaXMucGVuZGluZ1N0b3JlLmVucXVldWUoZGVzdCwgbWVzc2FnZSk7XG5cdH1cblx0c2V0Q2hhbm5lbE1hcHBpbmdzKG1hcHBpbmdzKSB7XG5cdFx0dGhpcy5jaGFubmVsTWFwcGluZ3MgPSB7XG5cdFx0XHQuLi50aGlzLmNoYW5uZWxNYXBwaW5ncyxcblx0XHRcdC4uLm1hcHBpbmdzXG5cdFx0fTtcblx0fVxuXHRnZXRDaGFubmVsRm9yRGVzdGluYXRpb24oZGVzdGluYXRpb24pIHtcblx0XHRpZiAoIWRlc3RpbmF0aW9uKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gdGhpcy5jaGFubmVsTWFwcGluZ3NbZGVzdGluYXRpb25dID8/IG51bGw7XG5cdH1cblx0ZGV0ZWN0UHJvdG9jb2xOYW1lKCkge1xuXHRcdGlmICh0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPT09IFwiY2hyb21lLWV4dGVuc2lvblwiKSByZXR1cm4gXCJjaHJvbWVcIjtcblx0XHRpZiAodGhpcy5leGVjdXRpb25Db250ZXh0ID09PSBcInNlcnZpY2Utd29ya2VyXCIpIHJldHVybiBcInNlcnZpY2VcIjtcblx0XHRpZiAodGhpcy5leGVjdXRpb25Db250ZXh0ID09PSBcIm1haW5cIikgcmV0dXJuIFwid2luZG93XCI7XG5cdFx0cmV0dXJuIFwidW5rbm93blwiO1xuXHR9XG5cdHJlc29sdmVXb3JrZXJDb250ZXh0KCkge1xuXHRcdGlmICh0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPT09IFwibWFpblwiKSByZXR1cm4gXCJtYWluXCI7XG5cdFx0aWYgKHRoaXMuZXhlY3V0aW9uQ29udGV4dCA9PT0gXCJzZXJ2aWNlLXdvcmtlclwiKSByZXR1cm4gXCJzZXJ2aWNlLXdvcmtlclwiO1xuXHRcdGlmICh0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPT09IFwiY2hyb21lLWV4dGVuc2lvblwiKSByZXR1cm4gXCJjaHJvbWUtZXh0ZW5zaW9uXCI7XG5cdH1cblx0dG9Qcm90b2NvbE1lc3NhZ2UobWVzc2FnZSwgZmFsbGJhY2tTb3VyY2UpIHtcblx0XHRyZXR1cm4gY3JlYXRlUHJvdG9jb2xFbnZlbG9wZSh7XG5cdFx0XHQuLi5tZXNzYWdlLFxuXHRcdFx0aWQ6IG1lc3NhZ2UuaWQsXG5cdFx0XHR0eXBlOiBtZXNzYWdlLnR5cGUgPz8gXCJ1bmtub3duXCIsXG5cdFx0XHRzb3VyY2U6IG1lc3NhZ2Uuc291cmNlID8/IGZhbGxiYWNrU291cmNlID8/IHRoaXMubG9jYWxDaGFubmVsSWQsXG5cdFx0XHRkZXN0aW5hdGlvbjogbWVzc2FnZS5kZXN0aW5hdGlvbixcblx0XHRcdGRhdGE6IG1lc3NhZ2UuZGF0YSxcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcblx0XHRcdFx0Li4ubWVzc2FnZS5tZXRhZGF0YSA/PyB7fVxuXHRcdFx0fSxcblx0XHRcdHByb3RvY29sOiB0aGlzLmRldGVjdFByb3RvY29sTmFtZSgpLFxuXHRcdFx0cHVycG9zZTogXCJtYWlsXCIsXG5cdFx0XHRzcmNDaGFubmVsOiBtZXNzYWdlLnNvdXJjZSA/PyB0aGlzLmxvY2FsQ2hhbm5lbElkLFxuXHRcdFx0ZHN0Q2hhbm5lbDogbWVzc2FnZS5kZXN0aW5hdGlvblxuXHRcdH0pO1xuXHR9XG5cdGlzV29ya2VyU3VwcG9ydGVkKF9jb25maWcpIHtcblx0XHRpZiAodGhpcy5leGVjdXRpb25Db250ZXh0ID09PSBcInNlcnZpY2Utd29ya2VyXCIpIHJldHVybiB0cnVlO1xuXHRcdGlmICh0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPT09IFwiY2hyb21lLWV4dGVuc2lvblwiKSByZXR1cm4gc3VwcG9ydHNEZWRpY2F0ZWRXb3JrZXJzKCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0c2V0dXBHbG9iYWxMaXN0ZW5lcnMoKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQuZGF0YSAmJiB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhLnR5cGUpIHRoaXMuaGFuZGxlQnJvYWRjYXN0TWVzc2FnZShldmVudC5kYXRhLCBcIndpbmRvdy1tZXNzYWdlXCIpO1xuXHRcdH0pO1xuXHR9XG5cdGNyZWF0ZURlZmVycmVkKCkge1xuXHRcdGxldCByZXNvbHZlO1xuXHRcdGxldCByZWplY3Q7XG5cdFx0Y29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuXHRcdFx0cmVzb2x2ZSA9IHJlcztcblx0XHRcdHJlamVjdCA9IHJlajtcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVzb2x2ZSxcblx0XHRcdHJlamVjdCxcblx0XHRcdHByb21pc2Vcblx0XHR9O1xuXHR9XG5cdGdldEV4ZWN1dGlvbkNvbnRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uQ29udGV4dDtcblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdGZvciAoY29uc3QgY2hhbm5lbCBvZiB0aGlzLmNoYW5uZWxzLnZhbHVlcygpKSBpZiAoY2hhbm5lbCBpbnN0YW5jZW9mIEJyb2FkY2FzdENoYW5uZWwpIGNoYW5uZWwuY2xvc2UoKTtcblx0XHRlbHNlIGlmIChjaGFubmVsICYmIFwiY2xvc2VcIiBpbiBjaGFubmVsKSBjaGFubmVsLmNsb3NlKCk7XG5cdFx0dGhpcy5jaGFubmVscy5jbGVhcigpO1xuXHRcdHRoaXMud29ya2VyQ2hhbm5lbHMuY2xlYXIoKTtcblx0XHR0aGlzLmhhbmRsZXJzLmNsZWFyKCk7XG5cdFx0dGhpcy5waXBlbGluZXMuY2xlYXIoKTtcblx0fVxufTtcbnZhciBkZWZhdWx0SW5zdGFuY2UgPSBudWxsO1xuZnVuY3Rpb24gZ2V0VW5pZmllZE1lc3NhZ2luZyhjb25maWcpIHtcblx0aWYgKCFkZWZhdWx0SW5zdGFuY2UpIGRlZmF1bHRJbnN0YW5jZSA9IG5ldyBVbmlmaWVkTWVzc2FnaW5nTWFuYWdlcihjb25maWcpO1xuXHRyZXR1cm4gZGVmYXVsdEluc3RhbmNlO1xufVxuZnVuY3Rpb24gY3JlYXRlVW5pZmllZE1lc3NhZ2luZyhjb25maWcpIHtcblx0cmV0dXJuIG5ldyBVbmlmaWVkTWVzc2FnaW5nTWFuYWdlcihjb25maWcpO1xufVxuZnVuY3Rpb24gcmVzZXRVbmlmaWVkTWVzc2FnaW5nKCkge1xuXHRpZiAoZGVmYXVsdEluc3RhbmNlKSB7XG5cdFx0ZGVmYXVsdEluc3RhbmNlLmRlc3Ryb3koKTtcblx0XHRkZWZhdWx0SW5zdGFuY2UgPSBudWxsO1xuXHR9XG59XG5mdW5jdGlvbiBzZW5kTWVzc2FnZShtZXNzYWdlKSB7XG5cdHJldHVybiBnZXRVbmlmaWVkTWVzc2FnaW5nKCkuc2VuZE1lc3NhZ2UobWVzc2FnZSk7XG59XG5mdW5jdGlvbiByZWdpc3RlckhhbmRsZXIoZGVzdGluYXRpb24sIGhhbmRsZXIpIHtcblx0Z2V0VW5pZmllZE1lc3NhZ2luZygpLnJlZ2lzdGVySGFuZGxlcihkZXN0aW5hdGlvbiwgaGFuZGxlcik7XG59XG5mdW5jdGlvbiBnZXRCcm9hZGNhc3RDaGFubmVsKGNoYW5uZWxOYW1lKSB7XG5cdHJldHVybiBnZXRVbmlmaWVkTWVzc2FnaW5nKCkuZ2V0QnJvYWRjYXN0Q2hhbm5lbChjaGFubmVsTmFtZSk7XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9tZXNzYWdpbmcvU2VydmljZUNoYW5uZWxNYW5hZ2VyLnRzXG52YXIgU2VydmljZUNoYW5uZWxNYW5hZ2VyID0gY2xhc3Mge1xuXHRjaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHJlYWR5UHJvbWlzZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRtZXNzYWdlSGFuZGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjaGFubmVsQ29uZmlncztcblx0ZXhlY3V0aW9uQ29udGV4dDtcblx0bG9nUHJlZml4O1xuXHRjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuXHRcdHRoaXMuY2hhbm5lbENvbmZpZ3MgPSBjb25maWcuY2hhbm5lbHMgPz8ge307XG5cdFx0dGhpcy5sb2dQcmVmaXggPSBjb25maWcubG9nUHJlZml4ID8/IFwiW1NlcnZpY2VDaGFubmVsc11cIjtcblx0XHR0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPSBkZXRlY3RFeGVjdXRpb25Db250ZXh0KCk7XG5cdFx0Y29uc29sZS5sb2coYCR7dGhpcy5sb2dQcmVmaXh9IEluaXRpYWxpemVkIGluICR7dGhpcy5leGVjdXRpb25Db250ZXh0fSBjb250ZXh0YCk7XG5cdH1cblx0cmVnaXN0ZXJDb25maWdzKGNvbmZpZ3MpIHtcblx0XHR0aGlzLmNoYW5uZWxDb25maWdzID0ge1xuXHRcdFx0Li4udGhpcy5jaGFubmVsQ29uZmlncyxcblx0XHRcdC4uLmNvbmZpZ3Ncblx0XHR9O1xuXHR9XG5cdGdldENvbmZpZyhjaGFubmVsSWQpIHtcblx0XHRyZXR1cm4gdGhpcy5jaGFubmVsQ29uZmlnc1tjaGFubmVsSWRdO1xuXHR9XG5cdGdldEFsbENvbmZpZ3MoKSB7XG5cdFx0cmV0dXJuIHsgLi4udGhpcy5jaGFubmVsQ29uZmlncyB9O1xuXHR9XG5cdGFzeW5jIGluaXRDaGFubmVsKGNoYW5uZWxJZCkge1xuXHRcdGlmICh0aGlzLmNoYW5uZWxzLmhhcyhjaGFubmVsSWQpKSByZXR1cm4gdGhpcy5jaGFubmVscy5nZXQoY2hhbm5lbElkKTtcblx0XHRjb25zdCBjb25maWcgPSB0aGlzLmNoYW5uZWxDb25maWdzW2NoYW5uZWxJZF07XG5cdFx0aWYgKCFjb25maWcpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjaGFubmVsOiAke2NoYW5uZWxJZH0uIFJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gZmlyc3QuYCk7XG5cdFx0bGV0IHJlc29sdmVSZWFkeTtcblx0XHRjb25zdCByZWFkeVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0cmVzb2x2ZVJlYWR5ID0gcmVzb2x2ZTtcblx0XHR9KTtcblx0XHR0aGlzLnJlYWR5UHJvbWlzZXMuc2V0KGNoYW5uZWxJZCwge1xuXHRcdFx0cHJvbWlzZTogcmVhZHlQcm9taXNlLFxuXHRcdFx0cmVzb2x2ZTogcmVzb2x2ZVJlYWR5XG5cdFx0fSk7XG5cdFx0Y29uc29sZS5sb2coYCR7dGhpcy5sb2dQcmVmaXh9IEluaXRpYWxpemluZyBjaGFubmVsOiAke2NoYW5uZWxJZH0gLT4gJHtjb25maWcuYnJvYWRjYXN0TmFtZX1gKTtcblx0XHRjb25zdCBjaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoY29uZmlnLmJyb2FkY2FzdE5hbWUpO1xuXHRcdGNoYW5uZWwub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG5cdFx0XHR0aGlzLmhhbmRsZUluY29taW5nTWVzc2FnZShjaGFubmVsSWQsIGV2ZW50LmRhdGEpO1xuXHRcdH07XG5cdFx0Y2hhbm5lbC5vbm1lc3NhZ2VlcnJvciA9IChldmVudCkgPT4ge1xuXHRcdFx0Y29uc29sZS5lcnJvcihgJHt0aGlzLmxvZ1ByZWZpeH0gTWVzc2FnZSBlcnJvciBvbiAke2NoYW5uZWxJZH06YCwgZXZlbnQpO1xuXHRcdH07XG5cdFx0dGhpcy5jaGFubmVscy5zZXQoY2hhbm5lbElkLCBjaGFubmVsKTtcblx0XHRyZXNvbHZlUmVhZHkoKTtcblx0XHRjb25zb2xlLmxvZyhgJHt0aGlzLmxvZ1ByZWZpeH0gQ2hhbm5lbCByZWFkeTogJHtjaGFubmVsSWR9YCk7XG5cdFx0cmV0dXJuIGNoYW5uZWw7XG5cdH1cblx0Y2xvc2VDaGFubmVsKGNoYW5uZWxJZCkge1xuXHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLmNoYW5uZWxzLmdldChjaGFubmVsSWQpO1xuXHRcdGlmIChjaGFubmVsKSB7XG5cdFx0XHRjaGFubmVsLmNsb3NlKCk7XG5cdFx0XHR0aGlzLmNoYW5uZWxzLmRlbGV0ZShjaGFubmVsSWQpO1xuXHRcdFx0dGhpcy5yZWFkeVByb21pc2VzLmRlbGV0ZShjaGFubmVsSWQpO1xuXHRcdFx0dGhpcy5tZXNzYWdlSGFuZGxlcnMuZGVsZXRlKGNoYW5uZWxJZCk7XG5cdFx0XHRjb25zb2xlLmxvZyhgJHt0aGlzLmxvZ1ByZWZpeH0gQ2hhbm5lbCBjbG9zZWQ6ICR7Y2hhbm5lbElkfWApO1xuXHRcdH1cblx0fVxuXHRjbG9zZUFsbCgpIHtcblx0XHRmb3IgKGNvbnN0IGNoYW5uZWxJZCBvZiB0aGlzLmNoYW5uZWxzLmtleXMoKSkgdGhpcy5jbG9zZUNoYW5uZWwoY2hhbm5lbElkKTtcblx0fVxuXHRhc3luYyB3YWl0Rm9yQ2hhbm5lbChjaGFubmVsSWQpIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMucmVhZHlQcm9taXNlcy5nZXQoY2hhbm5lbElkKTtcblx0XHRpZiAoZGVmZXJyZWQpIGF3YWl0IGRlZmVycmVkLnByb21pc2U7XG5cdFx0ZWxzZSBhd2FpdCB0aGlzLmluaXRDaGFubmVsKGNoYW5uZWxJZCk7XG5cdH1cblx0YXN5bmMgc2VuZCh0YXJnZXQsIHR5cGUsIGRhdGEsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGF3YWl0IHRoaXMud2FpdEZvckNoYW5uZWwodGFyZ2V0KTtcblx0XHRjb25zdCBjaGFubmVsID0gdGhpcy5jaGFubmVscy5nZXQodGFyZ2V0KTtcblx0XHRpZiAoIWNoYW5uZWwpIHRocm93IG5ldyBFcnJvcihgQ2hhbm5lbCBub3QgcmVhZHk6ICR7dGFyZ2V0fWApO1xuXHRcdGNvbnN0IG1lc3NhZ2UgPSB7XG5cdFx0XHR0eXBlLFxuXHRcdFx0c291cmNlOiBvcHRpb25zLnNvdXJjZSA/PyB0aGlzLmV4ZWN1dGlvbkNvbnRleHQsXG5cdFx0XHR0YXJnZXQsXG5cdFx0XHRkYXRhLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpLFxuXHRcdFx0Y29ycmVsYXRpb25JZDogb3B0aW9ucy5jb3JyZWxhdGlvbklkXG5cdFx0fTtcblx0XHRjaGFubmVsLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuXHRcdGNvbnNvbGUubG9nKGAke3RoaXMubG9nUHJlZml4fSBTZW50IG1lc3NhZ2UgdG8gJHt0YXJnZXR9OmAsIHR5cGUpO1xuXHR9XG5cdGJyb2FkY2FzdCh0eXBlLCBkYXRhLCBzb3VyY2UpIHtcblx0XHRmb3IgKGNvbnN0IFtjaGFubmVsSWQsIGNoYW5uZWxdIG9mIHRoaXMuY2hhbm5lbHMpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSB7XG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdHNvdXJjZTogc291cmNlID8/IHRoaXMuZXhlY3V0aW9uQ29udGV4dCxcblx0XHRcdFx0dGFyZ2V0OiBjaGFubmVsSWQsXG5cdFx0XHRcdGRhdGEsXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fTtcblx0XHRcdGNoYW5uZWwucG9zdE1lc3NhZ2UobWVzc2FnZSk7XG5cdFx0fVxuXHRcdGNvbnNvbGUubG9nKGAke3RoaXMubG9nUHJlZml4fSBCcm9hZGNhc3QgbWVzc2FnZTpgLCB0eXBlKTtcblx0fVxuXHRzdWJzY3JpYmUoY2hhbm5lbElkLCBoYW5kbGVyKSB7XG5cdFx0aWYgKCF0aGlzLm1lc3NhZ2VIYW5kbGVycy5oYXMoY2hhbm5lbElkKSkgdGhpcy5tZXNzYWdlSGFuZGxlcnMuc2V0KGNoYW5uZWxJZCwgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlcnMuZ2V0KGNoYW5uZWxJZCkuYWRkKGhhbmRsZXIpO1xuXHRcdHRoaXMuaW5pdENoYW5uZWwoY2hhbm5lbElkKS5jYXRjaChjb25zb2xlLmVycm9yKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dGhpcy5tZXNzYWdlSGFuZGxlcnMuZ2V0KGNoYW5uZWxJZCk/LmRlbGV0ZShoYW5kbGVyKTtcblx0XHR9O1xuXHR9XG5cdGhhbmRsZUluY29taW5nTWVzc2FnZShjaGFubmVsSWQsIGRhdGEpIHtcblx0XHRjb25zdCBoYW5kbGVycyA9IHRoaXMubWVzc2FnZUhhbmRsZXJzLmdldChjaGFubmVsSWQpO1xuXHRcdGlmICghaGFuZGxlcnMgfHwgaGFuZGxlcnMuc2l6ZSA9PT0gMCkge1xuXHRcdFx0Y29uc29sZS5sb2coYCR7dGhpcy5sb2dQcmVmaXh9IE5vIGhhbmRsZXJzIGZvciAke2NoYW5uZWxJZH0sIG1lc3NhZ2UgcXVldWVkYCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1lc3NhZ2UgPSBkYXRhO1xuXHRcdGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykgdHJ5IHtcblx0XHRcdGhhbmRsZXIobWVzc2FnZSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoYCR7dGhpcy5sb2dQcmVmaXh9IEhhbmRsZXIgZXJyb3Igb24gJHtjaGFubmVsSWR9OmAsIGVycm9yKTtcblx0XHR9XG5cdH1cblx0aXNJbml0aWFsaXplZChjaGFubmVsSWQpIHtcblx0XHRyZXR1cm4gdGhpcy5jaGFubmVscy5oYXMoY2hhbm5lbElkKTtcblx0fVxuXHRnZXRJbml0aWFsaXplZENoYW5uZWxzKCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMuY2hhbm5lbHMua2V5cygpKTtcblx0fVxuXHRnZXRTdGF0dXMoKSB7XG5cdFx0Y29uc3Qgc3RhdHVzID0ge307XG5cdFx0Zm9yIChjb25zdCBjaGFubmVsSWQgb2YgT2JqZWN0LmtleXModGhpcy5jaGFubmVsQ29uZmlncykpIHN0YXR1c1tjaGFubmVsSWRdID0ge1xuXHRcdFx0Y29ubmVjdGVkOiB0aGlzLmNoYW5uZWxzLmhhcyhjaGFubmVsSWQpLFxuXHRcdFx0bGFzdEFjdGl2aXR5OiBEYXRlLm5vdygpLFxuXHRcdFx0cGVuZGluZ01lc3NhZ2VzOiAwXG5cdFx0fTtcblx0XHRyZXR1cm4gc3RhdHVzO1xuXHR9XG5cdGdldEV4ZWN1dGlvbkNvbnRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uQ29udGV4dDtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVNlcnZpY2VDaGFubmVsTWFuYWdlcihjb25maWcpIHtcblx0cmV0dXJuIG5ldyBTZXJ2aWNlQ2hhbm5lbE1hbmFnZXIoY29uZmlnKTtcbn1cbnZhciBkZWZhdWx0TWFuYWdlciA9IG51bGw7XG5mdW5jdGlvbiBnZXRTZXJ2aWNlQ2hhbm5lbE1hbmFnZXIoY29uZmlnKSB7XG5cdGlmICghZGVmYXVsdE1hbmFnZXIpIGRlZmF1bHRNYW5hZ2VyID0gbmV3IFNlcnZpY2VDaGFubmVsTWFuYWdlcihjb25maWcpO1xuXHRlbHNlIGlmIChjb25maWc/LmNoYW5uZWxzKSBkZWZhdWx0TWFuYWdlci5yZWdpc3RlckNvbmZpZ3MoY29uZmlnLmNoYW5uZWxzKTtcblx0cmV0dXJuIGRlZmF1bHRNYW5hZ2VyO1xufVxuZnVuY3Rpb24gcmVzZXRTZXJ2aWNlQ2hhbm5lbE1hbmFnZXIoKSB7XG5cdGlmIChkZWZhdWx0TWFuYWdlcikge1xuXHRcdGRlZmF1bHRNYW5hZ2VyLmNsb3NlQWxsKCk7XG5cdFx0ZGVmYXVsdE1hbmFnZXIgPSBudWxsO1xuXHR9XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L2NoYW5uZWwvQ2hhbm5lbE1lc3NhZ2VIYW5kbGVyLnRzXG5mdW5jdGlvbiBtYWtlQ2hhbm5lbE1lc3NhZ2VIYW5kbGVyKHRyYW5zcG9ydCwgY2hhbm5lbE5hbWUsIGhhbmRsZXIpIHtcblx0Y29uc3QgcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0IHNlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIodHJhbnNwb3J0KTtcblx0cmV0dXJuIChzdWJzY3JpYmVyKSA9PiB7XG5cdFx0Y29uc3QgcmVzcG9uZCA9IChkYXRhKSA9PiB7XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIgJiYgZGF0YS5yZXFJZCkgcmV0dXJuIChyZXN1bHQpID0+IHtcblx0XHRcdFx0Y29uc3QgcCA9IHBlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdHAucmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHRcdHBlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXF1ZXN0XCIpIHJldHVybiAocmVzdWx0LCB0cmFuc2ZlcikgPT4gc2VuZCh7XG5cdFx0XHRcdC4uLnJlc3VsdCxcblx0XHRcdFx0Y2hhbm5lbDogZGF0YS5zZW5kZXIsXG5cdFx0XHRcdHNlbmRlcjogY2hhbm5lbE5hbWUsXG5cdFx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdFx0cmVxSWQ6IGRhdGEucmVxSWRcblx0XHRcdH0sIHRyYW5zZmVyKTtcblx0XHRcdHJldHVybiBzZW5kO1xuXHRcdH07XG5cdFx0Y29uc3Qgb25NZXNzYWdlID0gKGRhdGEpID0+IHtcblx0XHRcdGlmICghc3Vic2NyaWJlci5hY3RpdmUpIHJldHVybjtcblx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRcdGNvbnN0IHAgPSBwZW5kaW5nLmdldChkYXRhLnJlcUlkKTtcblx0XHRcdFx0aWYgKHApIHtcblx0XHRcdFx0XHRwLnJlc29sdmUoZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0XHRwZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aGFuZGxlciA/IGhhbmRsZXIoZGF0YSwgcmVzcG9uZChkYXRhKSkgOiBzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG5cdFx0fTtcblx0XHRjb25zdCBjbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodHJhbnNwb3J0LCBvbk1lc3NhZ2UsIChlKSA9PiBzdWJzY3JpYmVyLmVycm9yKGUpLCAoKSA9PiBzdWJzY3JpYmVyLmNvbXBsZXRlKCkpO1xuXHRcdHN1YnNjcmliZXIucmVxdWVzdCA9IChtc2cpID0+IHtcblx0XHRcdGNvbnN0IHJlcUlkID0gbXNnLnJlcUlkID8/IFVVSUR2NCgpO1xuXHRcdFx0bXNnLnJlcUlkID0gcmVxSWQ7XG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRwZW5kaW5nLnNldChyZXFJZCwge1xuXHRcdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2VuZChtc2cpO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRyZXR1cm4gY2xlYW51cDtcblx0fTtcbn1cbnZhciBDaGFubmVsTWVzc2FnZU9ic2VydmFibGUgPSBjbGFzcyB7XG5cdF90cmFuc3BvcnQ7XG5cdF9jaGFubmVsTmFtZTtcblx0X3BlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0X3NlbmQ7XG5cdF9hY3RpdmUgPSBmYWxzZTtcblx0Y29uc3RydWN0b3IoX3RyYW5zcG9ydCwgX2NoYW5uZWxOYW1lKSB7XG5cdFx0dGhpcy5fdHJhbnNwb3J0ID0gX3RyYW5zcG9ydDtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKF90cmFuc3BvcnQpO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9ic2VydmVyKTtcblx0XHRpZiAoIXRoaXMuX2FjdGl2ZSkgdGhpcy5fYWN0aXZhdGUoKTtcblx0XHRyZXR1cm4geyB1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzZXJ2ZXIpO1xuXHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCkgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHRcdH0gfTtcblx0fVxuXHRuZXh0KG1zZywgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kKG1zZywgdHJhbnNmZXIpO1xuXHR9XG5cdHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdCxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMubmV4dCh7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWRcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAodGhpcy5fYWN0aXZlKSByZXR1cm47XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRoaXMuX3RyYW5zcG9ydCwgKGRhdGEpID0+IHtcblx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRcdGNvbnN0IHAgPSB0aGlzLl9wZW5kaW5nLmdldChkYXRhLnJlcUlkKTtcblx0XHRcdFx0aWYgKHApIHtcblx0XHRcdFx0XHRwLnJlc29sdmUoZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRcdHMubmV4dD8uKGRhdGEpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHR9XG5cdFx0fSwgKGUpID0+IHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5lcnJvcj8uKGUpKSwgKCkgPT4gdGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSkpO1xuXHRcdHRoaXMuX2FjdGl2ZSA9IHRydWU7XG5cdH1cblx0X2RlYWN0aXZhdGUoKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fY2xlYW51cCA9IG51bGw7XG5cdFx0dGhpcy5fYWN0aXZlID0gZmFsc2U7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVDaGFubmVsUmVxdWVzdEhhbmRsZXIoY2hhbm5lbE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRyZXR1cm4gYXN5bmMgKGRhdGEsIHJlc3BvbmQpID0+IHtcblx0XHRpZiAoZGF0YS50eXBlICE9PSBcInJlcXVlc3RcIiB8fCBkYXRhLmNoYW5uZWwgIT09IGNoYW5uZWxOYW1lKSByZXR1cm47XG5cdFx0b3B0aW9ucy5vblJlcXVlc3Q/LihkYXRhLnBheWxvYWQpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVJlcXVlc3QoZGF0YS5wYXlsb2FkLCBkYXRhLnJlcUlkLCBjaGFubmVsTmFtZSk7XG5cdFx0aWYgKHJlc3VsdCkge1xuXHRcdFx0b3B0aW9ucy5vblJlc3BvbnNlPy4ocmVzdWx0LnJlc3BvbnNlKTtcblx0XHRcdHJlc3BvbmQoe1xuXHRcdFx0XHQuLi5yZXN1bHQucmVzcG9uc2UsXG5cdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9LCByZXN1bHQudHJhbnNmZXIpO1xuXHRcdH1cblx0fTtcbn1cbnZhciBPYnNlcnZhYmxlUmVxdWVzdERpc3BhdGNoZXIgPSBjbGFzcyB7XG5cdF9jaGFubmVsTmFtZTtcblx0X3RhcmdldENoYW5uZWw7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3N1YnNjcmliZXIgPSBudWxsO1xuXHRjb25zdHJ1Y3RvcihfY2hhbm5lbE5hbWUsIF90YXJnZXRDaGFubmVsKSB7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fdGFyZ2V0Q2hhbm5lbCA9IF90YXJnZXRDaGFubmVsO1xuXHR9XG5cdGNvbm5lY3Qoc3Vic2NyaWJlcikge1xuXHRcdHRoaXMuX3N1YnNjcmliZXIgPSBzdWJzY3JpYmVyO1xuXHR9XG5cdGRpc2Nvbm5lY3QoKSB7XG5cdFx0Zm9yIChjb25zdCBwIG9mIHRoaXMuX3BlbmRpbmcudmFsdWVzKCkpIHAucmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJEaXNjb25uZWN0ZWRcIikpO1xuXHRcdHRoaXMuX3BlbmRpbmcuY2xlYXIoKTtcblx0XHR0aGlzLl9zdWJzY3JpYmVyID0gbnVsbDtcblx0fVxuXHRoYW5kbGVNZXNzYWdlKGRhdGEpIHtcblx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIgJiYgZGF0YS5yZXFJZCkge1xuXHRcdFx0Y29uc3QgcCA9IHRoaXMuX3BlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0aWYgKHApIHtcblx0XHRcdFx0cC5yZXNvbHZlKGRhdGEucGF5bG9hZCk7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRkaXNwYXRjaChhY3Rpb24sIHBhdGgsIGFyZ3MpIHtcblx0XHRpZiAoIXRoaXMuX3N1YnNjcmliZXI/LmFjdGl2ZSkgcmV0dXJuIFByb21pc2UucmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJOb3QgY29ubmVjdGVkXCIpKTtcblx0XHRjb25zdCByZXFJZCA9IFVVSUR2NCgpO1xuXHRcdGNvbnN0IG1zZyA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IHRoaXMuX3RhcmdldENoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0dHlwZTogXCJyZXF1ZXN0XCIsXG5cdFx0XHRyZXFJZCxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fdGFyZ2V0Q2hhbm5lbCxcblx0XHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRhcmdzXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHRjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdHJlc29sdmUsXG5cdFx0XHRyZWplY3QsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KSk7XG5cdFx0dGhpcy5fc3Vic2NyaWJlci5uZXh0KG1zZyk7XG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9pbmRleC50c1xudmFyIHN5bmMgPSBhc3luYyAoY2hhbm5lbCwgb3B0aW9ucyA9IHt9LCBicm9hZGNhc3QgPSBudWxsKSA9PiBjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbChjaGFubmVsLCBvcHRpb25zLCBicm9hZGNhc3QgPz8gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGwpKTtcbnZhciBpbXBvcnRNb2R1bGVJbkNoYW5uZWwgPSBhc3luYyAoY2hhbm5lbCwgdXJsLCBvcHRpb25zID0ge30sIGJyb2FkY2FzdCA9IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGwpID0+IHtcblx0cmV0dXJuIChhd2FpdCBjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbChjaGFubmVsLCBvcHRpb25zPy5jaGFubmVsT3B0aW9ucywgYnJvYWRjYXN0KSk/LmRvSW1wb3J0TW9kdWxlPy4odXJsLCBvcHRpb25zPy5pbXBvcnRPcHRpb25zKTtcbn07XG52YXIgY3JlYXRlQ29udGV4dCA9IGNyZWF0ZUNoYW5uZWxDb250ZXh0O1xudmFyIGdldFNoYXJlZENvbnRleHQgPSBnZXRPckNyZWF0ZUNvbnRleHQ7XG52YXIgY3JlYXRlTXVsdGlDaGFubmVsID0gY3JlYXRlQ2hhbm5lbHNJbkNvbnRleHQ7XG52YXIgaW1wb3J0SXNvbGF0ZWRNb2R1bGUgPSBpbXBvcnRNb2R1bGVJbkNvbnRleHQ7XG52YXIgY29ubmVjdFRvQ2hhbm5lbEFzTW9kdWxlID0gYXN5bmMgKGNoYW5uZWwsIG9wdGlvbnMgPSB7fSwgYnJvYWRjYXN0ID0gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogbnVsbCwgaG9zdENoYW5uZWwgPSBcIiRob3N0JFwiKSA9PiB7XG5cdGNvbnN0IGhvc3QgPSBjcmVhdGVIb3N0Q2hhbm5lbChob3N0Q2hhbm5lbCA/PyBcIiRob3N0JFwiKTtcblx0YXdhaXQgaG9zdD8uY3JlYXRlUmVtb3RlQ2hhbm5lbChjaGFubmVsLCBvcHRpb25zLCBicm9hZGNhc3QpO1xuXHRyZXR1cm4gd3JhcENoYW5uZWwoY2hhbm5lbCwgaG9zdCA/PyBTRUxGX0NIQU5ORUw/Lmluc3RhbmNlKTtcbn07XG52YXIgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uUnVudGltZUNoYW5uZWwgPSAoY2hhbm5lbE5hbWUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRjb25zdCBjb250ZXh0ID0gZGV0ZWN0RXhlY3V0aW9uQ29udGV4dCgpO1xuXHRpZiAoY29udGV4dCAhPT0gXCJjaHJvbWUtZXh0ZW5zaW9uXCIpIHJldHVybiB7XG5cdFx0YXN5bmMgcmVxdWVzdChtZXRob2QpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgQ2hyb21lIGV4dGVuc2lvbiBtZXNzYWdpbmcgbm90IGF2YWlsYWJsZSBpbiAke2NvbnRleHR9YCk7XG5cdFx0fSxcblx0XHRjbG9zZSgpIHt9XG5cdH07XG5cdHJldHVybiB7XG5cdFx0YXN5bmMgcmVxdWVzdChtZXRob2QsIGFyZ3MgPSBbXSkge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7XG5cdFx0XHRcdFx0XHRpZDogYGNyeF8ke0RhdGUubm93KCl9XyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMil9YCxcblx0XHRcdFx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdFx0XHRcdHNvdXJjZTogY29udGV4dCxcblx0XHRcdFx0XHRcdHRhcmdldDogY2hhbm5lbE5hbWUsXG5cdFx0XHRcdFx0XHRkYXRhOiBhcmdzPy5sZW5ndGggPT09IDEgPyBhcmdzWzBdIDogYXJncyxcblx0XHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcblx0XHRcdFx0XHRcdFx0Li4ub3B0aW9ucz8ubWV0YWRhdGEgPz8ge31cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCAocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0XHRcdGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpIHJlamVjdChuZXcgRXJyb3IoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yLm1lc3NhZ2UpKTtcblx0XHRcdFx0XHRcdGVsc2UgcmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRjbG9zZSgpIHt9XG5cdH07XG59O1xuXG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7ICRjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbCwgJGRlc2NyaXB0b3IsICRyZXF1ZXN0SGFuZGxlciwgQWJzdHJhY3RUcmFuc3BvcnQsIEF0b21pY3NCdWZmZXIsIEF0b21pY3NSaW5nQnVmZmVyLCBBdG9taWNzVHJhbnNwb3J0LCBBdG9taWNzVHJhbnNwb3J0RmFjdG9yeSwgQmlkaXJlY3Rpb25hbEludm9rZXIsIEJyb2FkY2FzdENoYW5uZWxPYnNlcnZhYmxlLCBCcm9hZGNhc3RDaGFubmVsVHJhbnNwb3J0LCBDSEFOTkVMX01BUCwgQ2hhbm5lbENvbm5lY3Rpb24sIENoYW5uZWxDb250ZXh0LCBDaGFubmVsSGFuZGxlciwgQ2hhbm5lbEhhbmRsZXIgYXMgT2JzZXJ2YWJsZUNoYW5uZWxIYW5kbGVyLCBDaGFubmVsTWVzc2FnZU9ic2VydmFibGUsIE9ic2VydmFibGUgYXMgQ2hhbm5lbE5hdGl2ZU9ic2VydmFibGUsIE9ic2VydmFibGUsIENoYW5uZWxPYnNlcnZhYmxlLCBDaGFubmVsU3RvcmFnZSwgQ2hhbm5lbFN1YmplY3QsIENoYW5uZWxUcmFuc2FjdGlvbiwgQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbCwgQ2hyb21lRXh0ZW5zaW9uUG9ydENoYW5uZWwsIENocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsLCBDaHJvbWVFeHRlcm5hbE9ic2VydmFibGUsIENocm9tZUV4dGVybmFsVHJhbnNwb3J0LCBDaHJvbWVPYnNlcnZhYmxlRmFjdG9yeSwgQ2hyb21lUG9ydE9ic2VydmFibGUsIENocm9tZVBvcnRUcmFuc3BvcnQsIENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlLCBDaHJvbWVSdW50aW1lVHJhbnNwb3J0LCBDaHJvbWVUYWJzT2JzZXJ2YWJsZSwgQ2hyb21lVGFic1RyYW5zcG9ydCwgQ29ubmVjdGlvblBvb2wsIERlZmF1bHRSZWZsZWN0LCBEaXNwYXRjaFByb3h5SGFuZGxlciBhcyBEaXNwYXRjaEhhbmRsZXIsIERpc3BhdGNoUHJveHlIYW5kbGVyLCBNZXNzYWdlT2JzZXJ2YWJsZSwgTWVzc2FnZVBvcnRPYnNlcnZhYmxlLCBNZXNzYWdlUG9ydFRyYW5zcG9ydCwgTWVzc2FnZVF1ZXVlLCBNZXNzYWdlUXVldWVTdG9yYWdlLCBPYnNlcnZhYmxlRmFjdG9yeSwgT2JzZXJ2YWJsZVJlcXVlc3REaXNwYXRjaGVyLCBPcHRpbWl6ZWRXb3JrZXJDaGFubmVsLCBQUk9YWV9JTlRFUk5BTFMsIFBST1hZX01BUktFUiwgUGVuZGluZ01lc3NhZ2VTdG9yZSwgUG9ydFBvb2wsIFBvcnRUcmFuc3BvcnQsIFBvcnRUcmFuc3BvcnRGYWN0b3J5LCBQcm90b2NvbFJlcGxheUd1YXJkLCBQcm94eUJ1aWxkZXIsIFF1ZXVlZFdvcmtlckNoYW5uZWwsIFJFQUQsIFJUQ1BlZXJNYW5hZ2VyLCBSVENQZWVyVHJhbnNwb3J0LCBSVENUcmFuc3BvcnRGYWN0b3J5LCBSZW1vdGVDaGFubmVsSGVscGVyLCBSZW1vdGVDaGFubmVscywgUmVtb3RlUHJveHlIYW5kbGVyLCBSZXBsYXlDaGFubmVsU3ViamVjdCwgUmVxdWVzdG9yLCBSZXNwb25kZXIsIFNFTEZfQ0hBTk5FTCwgU2VsZk9ic2VydmFibGUsIFNlbGZUcmFuc3BvcnQsIFNlcnZpY2VDaGFubmVsTWFuYWdlciwgU2VydmljZVdvcmtlckNsaWVudCwgU2VydmljZVdvcmtlckNsaWVudE9ic2VydmFibGUsIFNlcnZpY2VXb3JrZXJIb3N0LCBTZXJ2aWNlV29ya2VySG9zdE9ic2VydmFibGUsIFNlcnZpY2VXb3JrZXJUcmFuc3BvcnQsIFNoYXJlZFdvcmtlckNsaWVudCwgU2hhcmVkV29ya2VySG9zdCwgU2hhcmVkV29ya2VyT2JzZXJ2YWJsZUZhY3RvcnksIFNvY2tldElPT2JzZXJ2YWJsZSwgU29ja2V0SU9PYnNlcnZhYmxlRmFjdG9yeSwgU29ja2V0SU9Sb29tT2JzZXJ2YWJsZSwgVHJhbnNmZXJhYmxlU3RvcmFnZSwgVHJhbnNmZXJhYmxlU3RvcmFnZUZhY3RvcnksIFRyYW5zcG9ydEFkYXB0ZXIsIENocm9tZVBvcnRPYnNlcnZhYmxlJDEgYXMgVHJhbnNwb3J0Q2hyb21lUG9ydE9ic2VydmFibGUsIENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlJDEgYXMgVHJhbnNwb3J0Q2hyb21lUnVudGltZU9ic2VydmFibGUsIENocm9tZVRhYnNPYnNlcnZhYmxlJDEgYXMgVHJhbnNwb3J0Q2hyb21lVGFic09ic2VydmFibGUsIFRyYW5zcG9ydENvcmVGYWN0b3J5LCBUcmFuc3BvcnRGYWN0b3J5LCBUcmFuc3BvcnRPYnNlcnZhYmxlLCBUcmFuc3BvcnRPYnNlcnZhYmxlRmFjdG9yeSwgVW5pZmllZENoYW5uZWwsIFVuaWZpZWRNZXNzYWdpbmdNYW5hZ2VyLCBVbmlmaWVkVHJhbnNwb3J0RmFjdG9yeSwgV1JlZmxlY3RBY3Rpb24sIFdTdGF0dXMsIFdUeXBlLCBXZWJTb2NrZXRPYnNlcnZhYmxlLCBXZWJTb2NrZXRUcmFuc3BvcnQsIFdpbmRvd1BvcnRDb25uZWN0b3IsIFdvcmtlckNvbnRleHQsIFdvcmtlck9ic2VydmFibGUsIFdvcmtlclRyYW5zcG9ydCwgYWRkQnJvYWRjYXN0Q2hhbm5lbCwgYWRkUG9ydENoYW5uZWwsIGFkZFNlbGZDaGFubmVsVG9EZWZhdWx0LCBhZGRXb3JrZXJDaGFubmVsLCBhdXRvSW52b2tlciwgYmluZFNlcnZpY2VXb3JrZXJIb3N0QnJpZGdlLCBidWlsZFJlc3BvbnNlLCBjbG9zZUFsbFN0b3JhZ2UsIGNsb3NlVW5pZmllZENoYW5uZWwsIGNvbm5lY3RUb0NoYW5uZWxBc01vZHVsZSwgY3JlYXRlQXRvbWljc0NoYW5uZWxQYWlyLCBjcmVhdGVCaWRpcmVjdGlvbmFsQ2hhbm5lbCwgY3JlYXRlQmlkaXJlY3Rpb25hbENoYW5uZWwkMSBhcyBjcmVhdGVCaWRpcmVjdGlvbmFsVHJhbnNwb3J0LCBjcmVhdGVCcm9hZGNhc3RTaWduYWxpbmcsIGNyZWF0ZUJyb2FkY2FzdFRyYW5zcG9ydCwgY3JlYXRlQ2hhbm5lbENvbnRleHQsIGNyZWF0ZUNoYW5uZWxQYWlyLCBjcmVhdGVDaGFubmVsUmVxdWVzdEhhbmRsZXIsIGNyZWF0ZUNoYW5uZWxzSW5Db250ZXh0LCBjcmVhdGVDaHJvbWVFeHRlbnNpb25Ccm9hZGNhc3QsIGNyZWF0ZUNocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWwsIGNyZWF0ZUNocm9tZUV4dGVuc2lvbkNoYW5uZWwsIGNyZWF0ZUNocm9tZUV4dGVuc2lvblJ1bnRpbWVDaGFubmVsLCBjcmVhdGVDaHJvbWVFeHRlbnNpb25UYWJzQ2hhbm5lbCwgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uVGFic01lc3NhZ2luZ0NoYW5uZWwsIGNyZWF0ZUNocm9tZUxpc3RlbmVyLCBjcmVhdGVDaHJvbWVSZXF1ZXN0SGFuZGxlciwgY3JlYXRlQ2hyb21lVGFic0xpc3RlbmVyLCBjcmVhdGVDb25uZWN0aW9uT2JzZXJ2ZXIsIGNyZWF0ZUNvbnRleHQsIGNyZWF0ZURlZmF1bHRDaGFubmVsUGFpciwgY3JlYXRlRXhwb3NlSGFuZGxlciwgY3JlYXRlRnJvbVBvcnQsIGNyZWF0ZUhvc3RDaGFubmVsLCBjcmVhdGVIb3N0UHJveHksIGNyZWF0ZUludm9rZXIsIGNyZWF0ZUludm9rZXJPYnNlcnZhYmxlLCBjcmVhdGVNZXNzYWdlSWQsIGNyZWF0ZU1lc3NhZ2VRdWV1ZSwgY3JlYXRlTXVsdGlDaGFubmVsLCBjcmVhdGVPYnNlcnZhYmxlQ2hhbm5lbCwgY3JlYXRlT3B0aW1pemVkV29ya2VyQ2hhbm5lbCwgY3JlYXRlT3JVc2VFeGlzdGluZ0NoYW5uZWwsIGNyZWF0ZVBvcnRQcm94eSwgY3JlYXRlUHJvdG9jb2xFbnZlbG9wZSwgY3JlYXRlUXVldWVkT3B0aW1pemVkV29ya2VyQ2hhbm5lbCwgY3JlYXRlUXVldWVkV29ya2VyQ2hhbm5lbCwgY3JlYXRlUmVmbGVjdEhhbmRsZXIsIGNyZWF0ZVJlbW90ZVByb3h5LCBjcmVhdGVSZXF1ZXN0b3IsIGNyZWF0ZVJlc3BvbmRlciwgY3JlYXRlU2VuZGVyUHJveHksIGNyZWF0ZVNlcnZpY2VDaGFubmVsTWFuYWdlciwgY3JlYXRlU2VydmljZVdvcmtlckNoYW5uZWwsIGNyZWF0ZVNlcnZpY2VXb3JrZXJDbGllbnQsIGNyZWF0ZVNlcnZpY2VXb3JrZXJIb3N0LCBjcmVhdGVTaGFyZWRXb3JrZXJIb3N0T2JzZXJ2YWJsZSwgY3JlYXRlU2hhcmVkV29ya2VyT2JzZXJ2YWJsZSwgY3JlYXRlU29ja2V0T2JzZXJ2YWJsZSwgY3JlYXRlU29ja2V0UmVxdWVzdEhhbmRsZXIsIGNyZWF0ZVRyYW5zcG9ydCwgY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIsIGNyZWF0ZVRyYW5zcG9ydFNlbmRlciwgY3JlYXRlVW5pZmllZENoYW5uZWwsIGNyZWF0ZVVuaWZpZWRDaGFubmVsUGFpciwgY3JlYXRlVW5pZmllZE1lc3NhZ2luZywgY3JlYXRlV2ViU29ja2V0VHJhbnNwb3J0LCBjcmVhdGVXb3JrZXJBdG9taWNzVHJhbnNwb3J0LCBjcmVhdGVXb3JrZXJDaGFubmVsLCBkZWJvdW5jZSwgZGVmZXJDaGFubmVsLCBkZWxheSwgZGVsZXRlQ29udGV4dCwgZGVzY01hcCwgZGV0ZWN0Q29udGV4dFR5cGUsIGRldGVjdEV4ZWN1dGlvbkNvbnRleHQsIGRldGVjdEluY29taW5nQ29udGV4dFR5cGUsIGRldGVjdFRyYW5zcG9ydFR5cGUgYXMgZGV0ZWN0VHJhbnNwb3J0LCBkZXRlY3RUcmFuc3BvcnRUeXBlJDEgYXMgZGV0ZWN0VHJhbnNwb3J0VHlwZSwgZXhlY3V0ZUFjdGlvbiwgZXhwb3NlRnJvbVVuaWZpZWQsIGV4cG9zZUZyb21Xb3JrZXIsIGV4cG9zZU92ZXJQb3J0LCBmaWx0ZXIsIGZyb21FdmVudCwgZnJvbVByb21pc2UsIGdldEJyb2FkY2FzdENoYW5uZWwsIGdldENoYW5uZWxGcm9tRGVmYXVsdCwgZ2V0Q2hhbm5lbFN0b3JhZ2UsIGdldENvbm5lY3Rpb24sIGdldENvbm5lY3Rpb25Qb29sLCBnZXRDb250ZXh0LCBnZXRDb250ZXh0TmFtZXMsIGdldEN1cnJlbnRUYWJJZCwgZ2V0RGVmYXVsdENvbnRleHQsIGdldEhvc3RDb25uZWN0aW9uLCBnZXRNZXNzYWdlUXVldWUsIGdldE9yQ3JlYXRlQ29udGV4dCwgZ2V0UHJveHlEZXNjcmlwdG9yLCBnZXRQcm94eUludGVybmFscywgZ2V0U2VydmljZUNoYW5uZWxNYW5hZ2VyLCBnZXRTaGFyZWRDb250ZXh0LCBnZXRUcmFuc3BvcnRNZXRhLCBnZXRUcmFuc3BvcnRSZWdpc3RyeSwgZ2V0VW5pZmllZENoYW5uZWwsIGdldFVuaWZpZWRDaGFubmVsTmFtZXMsIGdldFVuaWZpZWRNZXNzYWdpbmcsIGdldFZpc2libGVUYWJJZCwgZ2V0V29ya2VyQ2hhbm5lbCwgZ2V0V29ya2VyQ29udGV4dCwgZ2V0V29ya2VySW52b2tlciwgZ2V0V29ya2VyUmVzb2x2ZUJhc2VVcmwsIGdldFdvcmtlclJlc3BvbmRlciwgaGFuZE1hcCwgaGFuZGxlUmVxdWVzdCwgaGFzTm9QYXRoLCBpbXBvcnRJbkhvc3QsIGltcG9ydElzb2xhdGVkTW9kdWxlLCBpbXBvcnRNb2R1bGVJbkNoYW5uZWwsIGltcG9ydE1vZHVsZUluQ29udGV4dCwgaW5pdENoYW5uZWxIYW5kbGVyLCBpbml0RGVmZXJyZWRDaGFubmVsLCBpbml0TWFpbkNoYW5uZWwsIGluaXRXb3JrZXJDb250ZXh0LCBpbnRlcnZhbCwgaXNDaHJvbWVFeHRlbnNpb25Db250ZXh0LCBpc1Byb3RvY29sRW52ZWxvcGUsIGlzUmVtb3RlUHJveHksIGlzU2VydmljZVdvcmtlckNvbnRleHQsIGxvYWRXb3JrZXIsIG1ha2VCcm9hZGNhc3RJbnZva2VyLCBtYWtlQ2hhbm5lbE1lc3NhZ2VIYW5kbGVyLCBtYWtlQ2hyb21lUnVudGltZUludm9rZXIsIG1ha2VNZXNzYWdlUG9ydEludm9rZXIsIG1ha2VPYnNlcnZhYmxlUmVxdWVzdFByb3h5LCBtYWtlUmVxdWVzdFByb3h5LCBtYWtlU2VsZkludm9rZXIsIG1ha2VTZXJ2aWNlV29ya2VyQ2xpZW50SW52b2tlciwgbWFrZVNlcnZpY2VXb3JrZXJIb3N0SW52b2tlciwgbWFrZVdlYlNvY2tldEludm9rZXIsIG1ha2VXb3JrZXJJbnZva2VyLCBtYXAsIG1lcmdlLCBub3JtYWxpemVQcm90b2NvbEVudmVsb3BlLCBub3JtYWxpemVSZWYsIG9iamVjdFRvUmVmLCBvbldvcmtlckNoYW5uZWxDcmVhdGVkLCBvbldvcmtlckNvbm5lY3Rpb24sIG9uV29ya2VySW52b2NhdGlvbiwgcHJveHlCdWlsZGVyLCByZWFkQnlQYXRoLCByZWdpc3RlckhhbmRsZXIsIHJlZ2lzdGVyV29ya2VyQVBJLCByZWdpc3RlcmVkSW5QYXRoLCByZW1vdGVGcm9tVW5pZmllZCwgcmVtb3ZlQnlEYXRhLCByZW1vdmVCeVBhdGgsIHJlc2V0U2VydmljZUNoYW5uZWxNYW5hZ2VyLCByZXNldFVuaWZpZWRNZXNzYWdpbmcsIHJlc29sdmVXb3JrZXJTcGVjaWZpZXJIcmVmLCBzZW5kTWVzc2FnZSwgc2V0dXBJbnZva2VyLCBzZXR1cFVuaWZpZWRDaGFubmVsLCBzdG9yZWREYXRhLCBzdXBwb3J0c0RlZGljYXRlZFdvcmtlcnMsIHN5bmMsIHRha2UsIHRha2VVbnRpbCwgdGhyb3R0bGUsIHRyYXZlcnNlQnlQYXRoLCB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5LCB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5UmVjdXJzaXZlLCB3aGVuLCBjdHggYXMgd29ya2VyQ29udGV4dCwgd3JhcENoYW5uZWwsIHdyYXBEZXNjcmlwdG9yLCB3cmFwTWFwLCB3cmFwT2JzZXJ2YWJsZUNoYW5uZWwsIHdyaXRlQnlQYXRoIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxZQUFBQSxJQUFVLFVBQUFDLEdBQVEsdUJBQUFDLElBQXFCLG1CQUFBQyxJQUFpQixpQkFBQUMsSUFBZSxxQkFBQUMsSUFBbUIsZUFBQUMsVUFBbUI7QUFHdEgsSUFBSUMsS0FBMEIsMEJBQVNBLEdBQVM7QUFDL0MsU0FBQUEsRUFBUSxVQUFhLFdBQ3JCQSxFQUFRLFFBQVcsU0FDWkE7QUFDUixHQUFFLENBQUMsQ0FBQyxHQUNBQyxLQUF3QiwwQkFBU0EsR0FBTztBQUMzQyxTQUFBQSxFQUFNLFlBQWUsYUFDckJBLEVBQU0sU0FBWSxVQUNsQkEsRUFBTSxTQUFZLFVBQ2xCQSxFQUFNLFVBQWEsV0FDbkJBLEVBQU0sU0FBWSxVQUNsQkEsRUFBTSxZQUFlLGFBQ3JCQSxFQUFNLE9BQVUsUUFDaEJBLEVBQU0sU0FBWSxVQUNsQkEsRUFBTSxXQUFjLFlBQ3BCQSxF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VixRQUFRO0FBQUEsUUFDUixlQUFlO0FBQUEsUUFDZixXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsTUFDYjtBQUFBLE1BQ0Esa0JBQWtCO0FBQUEsUUFDakIsVUFBVTtBQUFBLFFBQ1YsUUFBUTtBQUFBLFFBQ1IsZUFBZTtBQUFBLFFBQ2YsV0FBVztBQUFBLFFBQ1gsWUFBWTtBQUFBLE1BQ2I7QUFBQSxNQUNBLGVBQWU7QUFBQSxRQUNkLFVBQVU7QUFBQSxRQUNWLFFBQVE7QUFBQSxRQUNSLGVBQWU7QUFBQSxRQUNmLFdBQVc7QUFBQSxRQUNYLFlBQVk7QUFBQSxNQUNiO0FBQUEsTUFDQSxlQUFlO0FBQUEsUUFDZCxVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsUUFDUixlQUFlO0FBQUEsUUFDZixXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsTUFDYjtBQUFBLE1BQ0EsbUJBQW1CO0FBQUEsUUFDbEIsVUFBVTtBQUFBLFFBQ1YsUUFBUTtBQUFBLFFBQ1IsZUFBZTtBQUFBLFFBQ2YsV0FBVztBQUFBLFFBQ1gsWUFBWTtBQUFBLE1BQ2I7QUFBQSxNQUNBLGFBQWE7QUFBQSxRQUNaLFVBQVU7QUFBQSxRQUNWLFFBQVE7QUFBQSxRQUNSLGVBQWU7QUFBQSxRQUNmLFdBQVc7QUFBQSxRQUNYLFlBQVk7QUFBQSxNQUNiO0FBQUEsTUFDQSxZQUFZO0FBQUEsUUFDWCxVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsUUFDUixlQUFlO0FBQUEsUUFDZixXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsTUFDYjtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBVTtBQUFBLFFBQ1YsUUFBUTtBQUFBLFFBQ1IsZUFBZTtBQUFBLFFBQ2YsV0FBVztBQUFBLFFBQ1gsWUFBWTtBQUFBLE1BQ2I7QUFBQSxNQUNBLE1BQVE7QUFBQSxRQUNQLFVBQVU7QUFBQSxRQUNWLFFBQVE7QUFBQSxRQUNSLGVBQWU7QUFBQSxRQUNmLFdBQVc7QUFBQSxRQUNYLFlBQVk7QUFBQSxNQUNiO0FBQUEsTUFDQSxVQUFZO0FBQUEsUUFDWCxVQUFVO0FB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UTtBQUFBLElBQUM7QUFBQSxFQUNWO0FBQ0Q7IiwKICAibmFtZXMiOiBbIlByb21pc2VkIiwgIlVVSUR2NCIsICJkZWVwT3BlcmF0ZUFuZENsb25lIiwgImlzQ2FuSnVzdFJldHVybiIsICJpc0NhblRyYW5zZmVyIiwgImlzTm90Q29tcGxleEFycmF5IiwgImlzUHJpbWl0aXZlIiwgIldTdGF0dXMiLCAiV1R5cGUiLCAiV1JlZmxlY3RBY3Rpb24iLCAiVFJBTlNQT1JUX1RZUEVfQUxJQVNFUyIsICJub3JtYWxpemVUcmFuc3BvcnRUeXBlQWxpYXMiLCAidHJhbnNwb3J0IiwgInJhdyIsICJkZXRlY3RUcmFuc3BvcnRUeXBlJDEiLCAiZ2V0VHJhbnNwb3J0TWV0YSIsICJ0eXBlIiwgImNyZWF0ZVRyYW5zcG9ydFNlbmRlciIsICJvcHRpb25zIiwgIm1zZyIsICJ0cmFuc2ZlciIsICJ0cmFuc2ZlcmFibGUiLCAiXyIsICJkYXRhIiwgInRhYklkIiwgInBvcnROYW1lIiwgImV4dGVybmFsSWQiLCAicmVnIiwgImNsaWVudElkIiwgImFsbCIsICJjIiwgImNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyIiwgIm9uTWVzc2FnZSIsICJvbkVycm9yIiwgIm9uQ2xvc2UiLCAibXNnSGFuZGxlciIsICJlIiwgImVyciIsICJlcnJIYW5kbGVyIiwgImNsb3NlSGFuZGxlciIsICJsaXN0ZW5lciIsICJjcmVhdGVDaHJvbWVUYWJzTGlzdGVuZXIiLCAicG9ydCIsICJoYW5kbGVyIiwgImNyZWF0ZUNocm9tZUxpc3RlbmVyIiwgIm1lc3NhZ2UiLCAic2VuZGVyIiwgInNlbmRSZXNwb25zZSIsICJjcmVhdGVXZWJTb2NrZXRUcmFuc3BvcnQiLCAidXJsIiwgInNvY2tldCIsICJyZWNvbm5lY3RBdHRlbXB0cyIsICJyZWNvbm5lY3RUaW1lciIsICJzZW5kIiwgInJlY29ubmVjdCIsICJjbG9zZSIsICJoIiwgImNyZWF0ZUJyb2FkY2FzdFRyYW5zcG9ydCIsICJjaGFubmVsTmFtZSIsICJjaGFubmVsIiwgIlRyYW5zcG9ydENvcmVGYWN0b3J5IiwgIkJhc2VTdWJzY3JpcHRpb24iLCAiX3Vuc3Vic2NyaWJlIiwgIk9ic2VydmFibGUiLCAiX3Byb2R1Y2VyIiwgIm9ic2VydmVyT3JOZXh0IiwgIm9wdHMiLCAib2JzZXJ2ZXIiLCAiY3RybCIsICJhY3RpdmUiLCAiY2xlYW51cCIsICJkb0NsZWFudXAiLCAic3Vic2NyaWJlciIsICJ2IiwgIm9wcyIsICJzIiwgIm9wIiwgIkNoYW5uZWxTdWJqZWN0IiwgInZhbHVlIiwgIm9icyIsICJSZXBsYXlDaGFubmVsU3ViamVjdCIsICJidWZmZXJTaXplIiwgIkNoYW5uZWxPYnNlcnZhYmxlIiwgIl90cmFuc3BvcnQiLCAiX2NoYW5uZWxOYW1lIiwgInJlcUlkIiwgInJlc29sdmUiLCAicmVqZWN0IiwgInAiLCAiZCIsICJjcmVhdGVJbnZva2VyT2JzZXJ2YWJsZSIsICJyZXN1bHQiLCAiY3JlYXRlUmVmbGVjdEhhbmRsZXIiLCAicmVzcG9uZCIsICJoYW5kbGVSZXF1ZXN0IiwgIk1lc3NhZ2VPYnNlcnZhYmxlIiwgInNvdXJjZSIsICJtZXNzYWdlVHlwZSIsICJmaWx0ZXIiLCAicHJlZCIsICJzcmMiLCAic3ViIiwgIm1hcCIsICJmbiIsICJ0YWtlIiwgIm4iLCAidGFrZVVudGlsIiwgInNpZ25hbCIsICJzcyIsICJzaWciLCAiZGVib3VuY2UiLCAibXMiLCAidCIsICJ0aHJvdHRsZSIsICJsYXN0IiwgIm5vdyIsICJmcm9tRXZlbnQiLCAidGFyZ2V0IiwgImV2ZW50IiwgImZyb21Qcm9taXNlIiwgInByb21pc2UiLCAiZGVsYXkiLCAiaW50ZXJ2YWwiLCAibWVyZ2UiLCAic291cmNlcyIsICJzdWJzIiwgImNyZWF0ZU1lc3NhZ2VJZCIsICJtYWtlSW52b2tlciIsICJtYWtlV29ya2VySW52b2tlciIsICJ3b3JrZXIiLCAibWFrZU1lc3NhZ2VQb3J0SW52b2tlciIsICJtYWtlQnJvYWRjYXN0SW52b2tlciIsICJuYW1lIiwgIm1ha2VXZWJTb2NrZXRJbnZva2VyIiwgInByb3RvY29scyIsICJtYWtlQ2hyb21lUnVudGltZUludm9rZXIiLCAibWFrZVNlcnZpY2VXb3JrZXJDbGllbnRJbnZva2VyIiwgIm1ha2VTZXJ2aWNlV29ya2VySG9zdEludm9rZXIiLCAibWFrZVNlbGZJbnZva2VyIiwgImNyZWF0ZUJpZGlyZWN0aW9uYWxDaGFubmVsIiwgImluYm91bmQiLCAid2hlbiIsICJldmVudE5hbWUiLCAiT2JzZXJ2YWJsZUZhY3RvcnkiLCAiZGV0ZWN0Q29udGV4dFR5cGUiLCAic2VydmljZVdvcmtlclNjb3BlIiwgInNoYXJlZFdvcmtlclNjb3BlIiwgImRlZGljYXRlZFdvcmtlclNjb3BlIiwgImRldGVjdFRyYW5zcG9ydFR5cGUiLCAiZGV0ZWN0ZWQiLCAiZGV0ZWN0SW5jb21pbmdDb250ZXh0VHlwZSIsICJEZWZhdWx0UmVmbGVjdCIsICJwcm9wIiwgInRoaXNBcmciLCAiYXJncyIsICJwcm90byIsICJSZXF1ZXN0b3IiLCAiY29uZmlnIiwgImNyZWF0ZVVuaWZpZWRDaGFubmVsIiwgInRhcmdldENoYW5uZWwiLCAiYWN0aW9uIiwgInBhdGgiLCAiYmFzZVBhdGgiLCAiUmVzcG9uZGVyIiwgIm9iaiIsICJCaWRpcmVjdGlvbmFsSW52b2tlciIsICJjcmVhdGVSZXF1ZXN0b3IiLCAiY3JlYXRlUmVzcG9uZGVyIiwgImNyZWF0ZUludm9rZXIiLCAic2V0dXBJbnZva2VyIiwgImF1dG9JbnZva2VyIiwgImludm9rZXIiLCAiUFJPWFlfTUFSS0VSIiwgIlBST1hZX0lOVEVSTkFMUyIsICJSZW1vdGVQcm94eUhhbmRsZXIiLCAiX2ludm9rZXIiLCAicmVjZWl2ZXIiLCAicHJvcFN0ciIsICIkcmVxdWVzdEhhbmRsZXIiLCAiJGRlc2NyaXB0b3IiLCAiY2hpbGRQYXRoIiwgImNoaWxkUHJveHkiLCAiY3JlYXRlUmVtb3RlUHJveHkiLCAibmV3VGFyZ2V0IiwgIkRpc3BhdGNoUHJveHlIYW5kbGVyIiwgIl9kaXNwYXRjaCIsICJ3cmFwRGVzY3JpcHRvciIsICJkZXNjcmlwdG9yIiwgImNhY2hlZCIsICJkZXNjTWFwIiwgInByb3h5IiwgIndyYXBNYXAiLCAiaXNSZW1vdGVQcm94eSIsICJnZXRQcm94eURlc2NyaXB0b3IiLCAiZ2V0UHJveHlJbnRlcm5hbHMiLCAiaW50ZXJuYWxzIiwgImNyZWF0ZUV4cG9zZUhhbmRsZXIiLCAicmVmbGVjdCIsICJjcmVhdGVPYmplY3RIYW5kbGVyIiwgImNyZWF0ZVNlbmRlclByb3h5IiwgIlByb3h5QnVpbGRlciIsICJlbmFibGVkIiwgInByb3h5QnVpbGRlciIsICJtYWtlUmVxdWVzdFByb3h5IiwgImNyZWF0ZUNvbm5lY3Rpb25LZXkiLCAicGFyYW1zIiwgInF1ZXJ5Q29ubmVjdGlvbnMiLCAiY29ubmVjdGlvbnMiLCAicXVlcnkiLCAiaW5jbHVkZUNsb3NlZCIsICJkZXNpcmVkU3RhdHVzIiwgImNvbm5lY3Rpb24iLCAiYSIsICJiIiwgIkNvbm5lY3Rpb25SZWdpc3RyeSIsICJfY3JlYXRlSWQiLCAiX2VtaXRFdmVudCIsICJrZXkiLCAiZXhpc3RpbmciLCAicGF5bG9hZCIsICJVbmlmaWVkQ2hhbm5lbCIsICJjZmciLCAidHJhbnNwb3J0VHlwZSIsICJiaW5kaW5nIiwgInNvdXJjZUNoYW5uZWwiLCAid3JpdGVCeVBhdGgiLCAiZW50cmllcyIsICJpZCIsICJyZXNvbHZlcnMiLCAidGltZW91dCIsICJtb2R1bGVOYW1lIiwgImV2ZW50VHlwZSIsICJzZW50IiwgInRhcmdldHMiLCAidG9UcmFuc2ZlciIsICJuZXdQYXRoIiwgImV4ZWN1dGVBY3Rpb24iLCAicmF3UmVzdWx0IiwgImNvcmVSZXNwb25zZSIsICJidWlsZFJlc3BvbnNlIiwgInJlc3BvbnNlIiwgInJlbW90ZUNoYW5uZWwiLCAic2lnbmFsVHlwZSIsICJzZW5kZXJNZXRhIiwgInNldHVwVW5pZmllZENoYW5uZWwiLCAiY3JlYXRlVW5pZmllZENoYW5uZWxQYWlyIiwgIm5hbWUxIiwgIm5hbWUyIiwgIm1jIiwgIkNIQU5ORUxfUkVHSVNUUlkiLCAiZ2V0VW5pZmllZENoYW5uZWwiLCAiZ2V0VW5pZmllZENoYW5uZWxOYW1lcyIsICJjbG9zZVVuaWZpZWRDaGFubmVsIiwgIldPUktFUl9DSEFOTkVMIiwgImdldFdvcmtlckNoYW5uZWwiLCAiY29udGV4dFR5cGUiLCAiZXhwb3NlRnJvbVVuaWZpZWQiLCAicmVtb3RlRnJvbVVuaWZpZWQiLCAid3JhcENoYW5uZWwiLCAiY29ubmVjdENoYW5uZWwiLCAiaG9zdCIsICJ3cmFwT2JzZXJ2YWJsZUNoYW5uZWwiLCAiY2hhbm5lbE9icyIsICJtYWtlT2JzZXJ2YWJsZVJlcXVlc3RQcm94eSIsICJjcmVhdGVPYnNlcnZhYmxlQ2hhbm5lbCIsICJUUyIsICJUcmFuc2ZlcmFibGUiLCAiRSIsICJpc1NlcnZpY2VXb3JrZXJDb250ZXh0IiwgIlNXR1MiLCAiaXNDaHJvbWVFeHRlbnNpb25Db250ZXh0IiwgImRldGVjdEV4ZWN1dGlvbkNvbnRleHQiLCAic3VwcG9ydHNEZWRpY2F0ZWRXb3JrZXJzIiwgImdldFdvcmtlclJlc29sdmVCYXNlVXJsIiwgImhyZWYiLCAicmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYiLCAic3BlYyIsICJiYXNlIiwgIm5vcm1hbGl6ZWQiLCAiUmVtb3RlQ2hhbm5lbHMiLCAiU0VMRl9DSEFOTkVMIiwgIkNIQU5ORUxfTUFQIiwgImlzUmVmbGVjdEFjdGlvbiQxIiwgImxvYWRXb3JrZXIiLCAiV1giLCAiUmVtb3RlQ2hhbm5lbEhlbHBlciIsICJDaGFubmVsSGFuZGxlciIsICJicm9hZGNhc3QiLCAidG9DaGFubmVsIiwgInJlcXVlc3QiLCAicmVzcG9uc2VGbiIsICJpbml0Q2hhbm5lbEhhbmRsZXIiLCAiJGNoYW5uZWwiLCAiY3JlYXRlSG9zdENoYW5uZWwiLCAiY3JlYXRlT3JVc2VFeGlzdGluZ0NoYW5uZWwiLCAiJGhvc3QiLCAiJGNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsIiwgImhhbmRNYXAiLCAiUkVBRCIsICJvYmplY3RUb1JlZiIsICJyZWdpc3RlcmVkSW5QYXRoIiwgIm5vcm1hbGl6ZVJlZiIsICJ1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5IiwgInVud3JhcERlc2NyaXB0b3JGcm9tUHJveHlSZWN1cnNpdmUiLCAic3RvcmVkRGF0YSIsICJ0cmF2ZXJzZUJ5UGF0aCIsICIkZGVzYyIsICJyZWFkQnlQYXRoIiwgInJvb3QiLCAicmVtb3ZlQnlQYXRoIiwgInJlbW92ZUJ5RGF0YSIsICJoYXNOb1BhdGgiLCAiaXNPYmplY3QiLCAiZGVmYXVsdFJlZmxlY3QiLCAiY3R4IiwgImdvdCIsICJub3JtYWxpemVkVmFsdWUiLCAibm9ybWFsaXplZEFyZ3MiLCAiY2FuQmVSZXR1cm4iLCAiZmluYWxQYXRoIiwgImN0eEtleSIsICJlbCIsICJwYXJlbnQiLCAiY3VycmVudCIsICJpIiwgImNhbGxBcmdzIiwgImN0b3JBcmdzIiwgIkNoYW5uZWxDb25uZWN0aW9uIiwgIl9uYW1lIiwgIl90cmFuc3BvcnRUeXBlIiwgImZyb21DaGFubmVsIiwgIm0iLCAib3JpZ2luYWwiLCAiciIsICJzdGF0ZSIsICJDb25uZWN0aW9uUG9vbCIsICJnZXRDb25uZWN0aW9uUG9vbCIsICJnZXRDb25uZWN0aW9uIiwgImdldEhvc3RDb25uZWN0aW9uIiwgIlRyYW5zcG9ydEFkYXB0ZXIiLCAiX29wdGlvbnMiLCAiY2FsbGJhY2siLCAiV29ya2VyVHJhbnNwb3J0IiwgIl93b3JrZXJTb3VyY2UiLCAiTWVzc2FnZVBvcnRUcmFuc3BvcnQiLCAiX3BvcnQiLCAiQnJvYWRjYXN0Q2hhbm5lbFRyYW5zcG9ydCIsICJfYmNOYW1lIiwgImlzTmV3IiwgIldlYlNvY2tldFRyYW5zcG9ydCIsICJfdXJsIiwgIl9wcm90b2NvbHMiLCAiQ2hyb21lUnVudGltZVRyYW5zcG9ydCIsICJDaHJvbWVUYWJzVHJhbnNwb3J0IiwgIl90YWJJZCIsICJDaHJvbWVQb3J0VHJhbnNwb3J0IiwgIl9wb3J0TmFtZSIsICJDaHJvbWVFeHRlcm5hbFRyYW5zcG9ydCIsICJfZXh0ZXJuYWxJZCIsICJTZXJ2aWNlV29ya2VyVHJhbnNwb3J0IiwgIl9pc0hvc3QiLCAiU2VsZlRyYW5zcG9ydCIsICJUcmFuc3BvcnRGYWN0b3J5IiwgImJjTmFtZSIsICJpc0hvc3QiLCAiY3JlYXRlQ29ubmVjdGlvbk9ic2VydmVyIiwgInRyYW5zcG9ydHMiLCAic3ViamVjdCIsICJjb25uIiwgIkRCX05BTUUiLCAiREJfVkVSU0lPTiIsICJTVE9SRVMiLCAiQ2hhbm5lbFN0b3JhZ2UiLCAiZGIiLCAibWVzc2FnZXNTdG9yZSIsICJtYWlsYm94U3RvcmUiLCAicGVuZGluZ1N0b3JlIiwgImV4Y2hhbmdlU3RvcmUiLCAic3RvcmVkTWVzc2FnZSIsICJ0eCIsICJzdG9yZSIsICJpbmRleCIsICJyZXN1bHRzIiwgImN1cnNvciIsICJtZXNzYWdlSWQiLCAic3RhdHVzIiwgIm1lc3NhZ2VzIiwgInN0YXRzIiwgImRlbGV0ZWRDb3VudCIsICJvcGVyYXRpb24iLCAicGVuZGluZyIsICJvcGVyYXRpb25JZCIsICJwb2xsSW50ZXJ2YWwiLCAic3RhcnRUaW1lIiwgInJlY29yZCIsICJnZXRSZXF1ZXN0IiwgIkNoYW5uZWxUcmFuc2FjdGlvbiIsICJvcGVyYXRpb25zIiwgInN0b3JlTmFtZXMiLCAiZ2V0UmVxIiwgIm1zZ1JlcXVlc3QiLCAibWFpbFJlcXVlc3QiLCAiX3N0b3JhZ2UiLCAidXBkYXRlcyIsICJfc3RvcmFnZUluc3RhbmNlcyIsICJnZXRDaGFubmVsU3RvcmFnZSIsICJjbG9zZUFsbFN0b3JhZ2UiLCAic3RvcmFnZSIsICJ3b3JrZXJCYXNlIiwgIndvcmtlckNvZGUiLCAiUmVtb3RlQ2hhbm5lbEhlbHBlciQxIiwgIl9jaGFubmVsIiwgIl9jb250ZXh0IiwgIm5vcm1hbGl6ZWRQYXRoIiwgIm5vcm1hbGl6ZWRBY3Rpb24iLCAiaXNSZWZsZWN0QWN0aW9uIiwgIkNoYW5uZWxIYW5kbGVyJDEiLCAibm9ybWFsaXplVHJhbnNwb3J0QmluZGluZyIsICJnZXREeW5hbWljVHJhbnNwb3J0VHlwZSIsICJDaGFubmVsQ29udGV4dCIsICJob3N0TmFtZSIsICJlbmRwb2ludCIsICJjb25uZWN0ZWRUYXJnZXRzIiwgIm5hbWVzIiwgImluaXRGbiIsICJ3b3JrZXJJbnN0YW5jZSIsICJsb2FkV29ya2VyJDEiLCAicmVhZHkiLCAiYnJvYWRjYXN0TmFtZSIsICJiYyIsICJzZWxmVGFyZ2V0IiwgImhhbmRsZXIxIiwgImhhbmRsZXIyIiwgInJlYWR5MSIsICJyZWFkeTIiLCAiY2hhbm5lbDEiLCAiY2hhbm5lbDIiLCAibXNnQ2hhbm5lbCIsICJpbmZvIiwgImRpcmVjdGlvbiIsICJtYXBwZWRUcmFuc3BvcnRUeXBlIiwgInVuaWZpZWQiLCAic3Vic2NyaXB0aW9uIiwgImlzVHJhbnNwb3J0QmluZGluZyIsICJuYXRpdmVUYXJnZXQiLCAiZWZmZWN0aXZlVGFyZ2V0IiwgIkNPTlRFWFRfUkVHSVNUUlkiLCAiREVGQVVMVF9DT05URVhUIiwgImdldERlZmF1bHRDb250ZXh0IiwgImNyZWF0ZUNoYW5uZWxDb250ZXh0IiwgImdldE9yQ3JlYXRlQ29udGV4dCIsICJnZXRDb250ZXh0IiwgImRlbGV0ZUNvbnRleHQiLCAiZ2V0Q29udGV4dE5hbWVzIiwgImNyZWF0ZUNoYW5uZWxzSW5Db250ZXh0IiwgImNoYW5uZWxOYW1lcyIsICJjb250ZXh0T3B0aW9ucyIsICJjb250ZXh0IiwgImltcG9ydE1vZHVsZUluQ29udGV4dCIsICJhZGRXb3JrZXJDaGFubmVsIiwgImFkZFBvcnRDaGFubmVsIiwgImFkZEJyb2FkY2FzdENoYW5uZWwiLCAiYWRkU2VsZkNoYW5uZWxUb0RlZmF1bHQiLCAiZGVmZXJDaGFubmVsIiwgImluaXREZWZlcnJlZENoYW5uZWwiLCAiZ2V0Q2hhbm5lbEZyb21EZWZhdWx0IiwgImNyZWF0ZURlZmF1bHRDaGFubmVsUGFpciIsICJUcmFuc3BvcnRPYnNlcnZhYmxlIiwgImZpcnN0IiwgIldvcmtlck9ic2VydmFibGUiLCAiX3dvcmtlciIsICJNZXNzYWdlUG9ydE9ic2VydmFibGUiLCAiQnJvYWRjYXN0Q2hhbm5lbE9ic2VydmFibGUiLCAiV2ViU29ja2V0T2JzZXJ2YWJsZSIsICJjb2RlIiwgInJlYXNvbiIsICJDaHJvbWVSdW50aW1lT2JzZXJ2YWJsZSQxIiwgIkNocm9tZVRhYnNPYnNlcnZhYmxlJDEiLCAiQ2hyb21lUG9ydE9ic2VydmFibGUkMSIsICJTZXJ2aWNlV29ya2VyQ2xpZW50T2JzZXJ2YWJsZSIsICJTZXJ2aWNlV29ya2VySG9zdE9ic2VydmFibGUiLCAiU2VsZk9ic2VydmFibGUiLCAiVHJhbnNwb3J0T2JzZXJ2YWJsZUZhY3RvcnkiLCAidyIsICJjaCIsICJjcmVhdGVCaWRpcmVjdGlvbmFsQ2hhbm5lbCQxIiwgIm91dGJvdW5kIiwgIldvcmtlckNvbnRleHQiLCAiY2xvc2VkIiwgIldPUktFUl9DT05URVhUIiwgImdldFdvcmtlckNvbnRleHQiLCAiaW5pdFdvcmtlckNvbnRleHQiLCAib25Xb3JrZXJDb25uZWN0aW9uIiwgIm9uV29ya2VyQ2hhbm5lbENyZWF0ZWQiLCAiV09SS0VSX1JFU1BPTkRFUiIsICJXT1JLRVJfSU5WT0tFUiIsICJnZXRXb3JrZXJSZXNwb25kZXIiLCAiZ2V0V29ya2VySW52b2tlciIsICJleHBvc2VGcm9tV29ya2VyIiwgIm9uV29ya2VySW52b2NhdGlvbiIsICJjcmVhdGVIb3N0UHJveHkiLCAiaG9zdENoYW5uZWwiLCAiaW1wb3J0SW5Ib3N0IiwgIkJhc2VDaHJvbWVPYnNlcnZhYmxlIiwgIkNocm9tZVJ1bnRpbWVPYnNlcnZhYmxlIiwgIl9oYW5kbGVyIiwgIl9zZW5kZXIiLCAiX2ZyYW1lSWQiLCAiQ2hyb21lVGFic09ic2VydmFibGUiLCAiQ2hyb21lUG9ydE9ic2VydmFibGUiLCAiQ2hyb21lRXh0ZXJuYWxPYnNlcnZhYmxlIiwgIl9leHRlbnNpb25JZCIsICJjcmVhdGVDaHJvbWVSZXF1ZXN0SGFuZGxlciIsICJoYW5kbGVycyIsICJlcnJvciIsICJDaHJvbWVPYnNlcnZhYmxlRmFjdG9yeSIsICJleHRlbnNpb25JZCIsICJTb2NrZXRJT09ic2VydmFibGUiLCAiX3NvY2tldCIsICJhY2siLCAib25Db25uZWN0IiwgIm9uRGlzY29ubmVjdCIsICJTb2NrZXRJT1Jvb21PYnNlcnZhYmxlIiwgIl9wYXJlbnQiLCAiX3Jvb21OYW1lIiwgImNyZWF0ZVNvY2tldFJlcXVlc3RIYW5kbGVyIiwgIlNvY2tldElPT2JzZXJ2YWJsZUZhY3RvcnkiLCAicm9vbU5hbWUiLCAiY3JlYXRlU29ja2V0T2JzZXJ2YWJsZSIsICJTaGFyZWRXb3JrZXJDbGllbnQiLCAiX3NjcmlwdFVybCIsICJTaGFyZWRXb3JrZXJIb3N0IiwgInBvcnRJZCIsICJyZWFsUG9ydElkIiwgImVudHJ5IiwgImV4Y2x1ZGVQb3J0SWQiLCAiY3JlYXRlU2hhcmVkV29ya2VyT2JzZXJ2YWJsZSIsICJzY3JpcHRVcmwiLCAiY3JlYXRlU2hhcmVkV29ya2VySG9zdE9ic2VydmFibGUiLCAiU2hhcmVkV29ya2VyT2JzZXJ2YWJsZUZhY3RvcnkiLCAiY2JvckVuY29kZXIiLCAiZ2V0Q0JPUkVuY29kZXIiLCAiY2JvcngiLCAicmVwbGFjZXIiLCAicmV2aXZlciIsICJfa2V5IiwgIlR5cGVkQXJyYXlDdG9yIiwgIkhFQURFUl9TSVpFIiwgIkxPQ0tfT0ZGU0VUIiwgIlNFUV9PRkZTRVQiLCAiU0laRV9PRkZTRVQiLCAiRkxBR1NfT0ZGU0VUIiwgIlJFQURZX09GRlNFVCIsICJBQ0tfT0ZGU0VUIiwgIkRBVEFfT0ZGU0VUIiwgIkZMQUdfSEFTX1RSQU5TRkVSIiwgIkZMQUdfQ09NUFJFU1NFRCIsICJGTEFHX1JFU1BPTlNFIiwgIkF0b21pY3NCdWZmZXIiLCAiYnVmZmVyT3JTaXplIiwgIl9jb25maWciLCAiZmxhZ3MiLCAic2l6ZSIsICJzZXEiLCAiZXhwZWN0ZWRTZXEiLCAic3RhcnQiLCAiQXRvbWljc1RyYW5zcG9ydCIsICJzZW5kQnVmZmVyIiwgInJlY3ZCdWZmZXIiLCAiZW5jb2RlZCIsICJjcmVhdGVBdG9taWNzQ2hhbm5lbFBhaXIiLCAiYnVmZmVyQSIsICJidWZmZXJCIiwgImNyZWF0ZVdvcmtlckF0b21pY3NUcmFuc3BvcnQiLCAiQXRvbWljc1JpbmdCdWZmZXIiLCAiYnVmZmVyT3JDb25maWciLCAidG90YWxTaXplIiwgIndyaXRlSWR4IiwgInJlYWRJZHgiLCAic2xvdCIsICJBdG9taWNzVHJhbnNwb3J0RmFjdG9yeSIsICJyZWN2IiwgInNpemVPckJ1ZmZlciIsICJERUZBVUxUX0lDRV9TRVJWRVJTIiwgIlJUQ1BlZXJUcmFuc3BvcnQiLCAicmVtb3RlSWQiLCAib2ZmZXIiLCAiYW5zd2VyIiwgImJpbmFyeSIsICJwZWVySWQiLCAiZGF0YUNoYW5uZWxMYWJlbCIsICJqc29uIiwgImJ1ZmZlciIsICJSVENQZWVyTWFuYWdlciIsICJwZWVyIiwgImNyZWF0ZUJyb2FkY2FzdFNpZ25hbGluZyIsICJSVENUcmFuc3BvcnRGYWN0b3J5IiwgIlBvcnRUcmFuc3BvcnQiLCAiY3JlYXRlQ2hhbm5lbFBhaXIiLCAiY3JlYXRlRnJvbVBvcnQiLCAiUG9ydFBvb2wiLCAiX2RlZmF1bHRDb25maWciLCAiV2luZG93UG9ydENvbm5lY3RvciIsICJfdGFyZ2V0IiwgImxvY2FsIiwgInJlbW90ZSIsICJjcmVhdGVQb3J0UHJveHkiLCAidGFyZ2V0UGF0aCIsICJleHBvc2VPdmVyUG9ydCIsICJQb3J0VHJhbnNwb3J0RmFjdG9yeSIsICJUcmFuc2ZlcmFibGVTdG9yYWdlIiwgImlkeCIsICJidWZmZXJzIiwgImJ1ZiIsICJhcnJheSIsICJza2lwcGVkIiwgIm9mZnNldCIsICJsaW1pdCIsICJleHBpcmVkIiwgIk1lc3NhZ2VRdWV1ZVN0b3JhZ2UiLCAiZGJOYW1lIiwgInF1ZXVlZE1lc3NhZ2UiLCAiVHJhbnNmZXJhYmxlU3RvcmFnZUZhY3RvcnkiLCAiU2VydmljZVdvcmtlckhvc3QiLCAiY2xpZW50SW5mbyIsICJjbGllbnQiLCAic3Vic2NyaWJlcnMiLCAiZGVsaXZlcmVkQ291bnQiLCAic3RvcmVkIiwgIm1lc3NhZ2VTdWIiLCAiYWxsQ2xpZW50cyIsICJhY3RpdmVJZHMiLCAiU2VydmljZVdvcmtlckNsaWVudCIsICJjcmVhdGVTZXJ2aWNlV29ya2VySG9zdCIsICJjcmVhdGVTZXJ2aWNlV29ya2VyQ2xpZW50IiwgImJpbmRTZXJ2aWNlV29ya2VySG9zdEJyaWRnZSIsICJzY29wZSIsICJBYnN0cmFjdFRyYW5zcG9ydCIsICJfdHlwZSIsICJOYXRpdmVUcmFuc3BvcnQiLCAiY3JlYXRlVHJhbnNwb3J0IiwgImJhc2VDb25maWciLCAid3MiLCAibyIsICJicmlkZ2UiLCAibWFuYWdlciIsICJUcmFuc3BvcnRSZWdpc3RyeSIsICJfcmVnaXN0cnkiLCAiZ2V0VHJhbnNwb3J0UmVnaXN0cnkiLCAiVW5pZmllZFRyYW5zcG9ydEZhY3RvcnkiLCAiUXVldWVkV29ya2VyQ2hhbm5lbCIsICJvbkNoYW5uZWxSZWFkeSIsICJ1bmRlcmx5aW5nQ2hhbm5lbCIsICJtZXRob2QiLCAicXVldWVkUmVxdWVzdCIsICJxdWV1ZUNvcHkiLCAiZ2V0Q3VycmVudFRhYklkIiwgInRhYnMiLCAiZ2V0VmlzaWJsZVRhYklkIiwgInZpc2libGVUYWIiLCAidGFiIiwgInJlZ2lzdGVyV29ya2VyQVBJIiwgImFwaSIsICJjaGFubmVsSGFuZGxlciIsICJtZXRob2ROYW1lIiwgIk9wdGltaXplZFdvcmtlckNoYW5uZWwiLCAiZW52ZWxvcGUiLCAiY2h1bmsiLCAiYmF0Y2hFbnZlbG9wZSIsICJNZXNzYWdlUXVldWUiLCAiZGVzdGluYXRpb24iLCAicmV0cnlDb3VudCIsICJleHBpcmVkSWRzIiwgImJ5UHJpb3JpdHkiLCAiYnlEZXN0aW5hdGlvbiIsICJmaWx0ZXJlZCIsICJpbnN0YW5jZXMiLCAiZ2V0TWVzc2FnZVF1ZXVlIiwgImNyZWF0ZU1lc3NhZ2VRdWV1ZSIsICJydW50aW1lTGlzdGVuZXJSZWdpc3RyeSIsICJydW50aW1lTGlzdGVuZXJJbnN0YWxsZWQiLCAiZW5zdXJlUnVudGltZUxpc3RlbmVyIiwgImxpc3RlbmVycyIsICJvdXQiLCAiQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbCIsICJzZXQiLCAibWVzc2FnZVdpdGhDaGFubmVsIiwgIkNocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsIiwgIndyYXBwZWQiLCAidGFyZ2V0VGFiSWQiLCAidGFyZ2V0VGFicyIsICJwcm9taXNlcyIsICJDaHJvbWVFeHRlbnNpb25Qb3J0Q2hhbm5lbCIsICJjcmVhdGVDaHJvbWVFeHRlbnNpb25DaGFubmVsIiwgImNyZWF0ZUNocm9tZUV4dGVuc2lvbkJyb2FkY2FzdCIsICJjcmVhdGVDaHJvbWVFeHRlbnNpb25Ccm9hZGNhc3RDaGFubmVsIiwgImNyZWF0ZUNocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsIiwgImNyZWF0ZUNocm9tZUV4dGVuc2lvblRhYnNNZXNzYWdpbmdDaGFubmVsIiwgImluaXRNYWluQ2hhbm5lbCIsICJjcmVhdGVRdWV1ZWRXb3JrZXJDaGFubmVsIiwgImNyZWF0ZVNlcnZpY2VXb3JrZXJDaGFubmVsIiwgImNyZWF0ZVdvcmtlckNoYW5uZWwiLCAiY3JlYXRlT3B0aW1pemVkV29ya2VyQ2hhbm5lbCIsICJiYXNlQ2hhbm5lbCIsICJjcmVhdGVRdWV1ZWRPcHRpbWl6ZWRXb3JrZXJDaGFubmVsIiwgIm9wdGltaXplZENoYW5uZWwiLCAiUFVSUE9TRVMiLCAiVFlQRVMiLCAiREVGQVVMVF9QVVJQT1NFIiwgImFzU3RyaW5nIiwgIm5vcm1hbGl6ZVBhdGgiLCAibm9ybWFsaXplQXJncyIsICJub3JtYWxpemVUcmFuc2ZlciIsICJub3JtYWxpemVQdXJwb3NlIiwgInB1cnBvc2UiLCAiaW5wdXQiLCAiZGVkdXBlZCIsICJpbmZlclR5cGUiLCAiZXhwbGljaXQiLCAiaW5mZXJPcGVyYXRpb24iLCAicmVzb2x2ZWRUeXBlIiwgImluZmVyUHJvdG9jb2wiLCAicHJvdG9jb2wiLCAicmFuZG9tSWQiLCAiY3JlYXRlUHJvdG9jb2xFbnZlbG9wZSIsICJ0aW1lc3RhbXAiLCAiZHN0Q2hhbm5lbCIsICJ1dWlkIiwgIm1ldGFkYXRhIiwgImlzUHJvdG9jb2xFbnZlbG9wZSIsICJjYW5kaWRhdGUiLCAibm9ybWFsaXplUHJvdG9jb2xFbnZlbG9wZSIsICJQcm90b2NvbFJlcGxheUd1YXJkIiwgIndpbmRvd01zIiwgInByZXZpb3VzIiwgInRzIiwgIlBlbmRpbmdNZXNzYWdlU3RvcmUiLCAicGFyc2VkIiwgImtlZXAiLCAiVW5pZmllZE1lc3NhZ2luZ01hbmFnZXIiLCAiZnVsbE1lc3NhZ2UiLCAidmlld0hhc2giLCAiY29uZmlncyIsICJjaGFubmVsS2V5IiwgImRlZmVycmVkIiwgImluaXRQcm9taXNlcyIsICJ3b3JrZXJOYW1lIiwgInBpcGVsaW5lTmFtZSIsICJwaXBlbGluZSIsICJjdXJyZW50TWVzc2FnZSIsICJzdGFnZSIsICJzdGFnZVRpbWVvdXQiLCAicmV0cmllcyIsICJhdHRlbXB0IiwgInF1ZXVlZE1lc3NhZ2VzIiwgImRhdGFBc01lc3NhZ2UiLCAiY29tcG9uZW50SWQiLCAiZGVzdCIsICJtYXBwaW5ncyIsICJmYWxsYmFja1NvdXJjZSIsICJyZXMiLCAicmVqIiwgImRlZmF1bHRJbnN0YW5jZSIsICJnZXRVbmlmaWVkTWVzc2FnaW5nIiwgImNyZWF0ZVVuaWZpZWRNZXNzYWdpbmciLCAicmVzZXRVbmlmaWVkTWVzc2FnaW5nIiwgInNlbmRNZXNzYWdlIiwgInJlZ2lzdGVySGFuZGxlciIsICJnZXRCcm9hZGNhc3RDaGFubmVsIiwgIlNlcnZpY2VDaGFubmVsTWFuYWdlciIsICJjaGFubmVsSWQiLCAicmVzb2x2ZVJlYWR5IiwgInJlYWR5UHJvbWlzZSIsICJjcmVhdGVTZXJ2aWNlQ2hhbm5lbE1hbmFnZXIiLCAiZGVmYXVsdE1hbmFnZXIiLCAiZ2V0U2VydmljZUNoYW5uZWxNYW5hZ2VyIiwgInJlc2V0U2VydmljZUNoYW5uZWxNYW5hZ2VyIiwgIm1ha2VDaGFubmVsTWVzc2FnZUhhbmRsZXIiLCAiQ2hhbm5lbE1lc3NhZ2VPYnNlcnZhYmxlIiwgImNyZWF0ZUNoYW5uZWxSZXF1ZXN0SGFuZGxlciIsICJPYnNlcnZhYmxlUmVxdWVzdERpc3BhdGNoZXIiLCAiX3RhcmdldENoYW5uZWwiLCAic3luYyIsICJpbXBvcnRNb2R1bGVJbkNoYW5uZWwiLCAiY3JlYXRlQ29udGV4dCIsICJnZXRTaGFyZWRDb250ZXh0IiwgImNyZWF0ZU11bHRpQ2hhbm5lbCIsICJpbXBvcnRJc29sYXRlZE1vZHVsZSIsICJjb25uZWN0VG9DaGFubmVsQXNNb2R1bGUiLCAiY3JlYXRlQ2hyb21lRXh0ZW5zaW9uUnVudGltZUNoYW5uZWwiXQp9Cg==
8292
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidW5pZm9ybS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgUHJvbWlzZWQsIFVVSUR2NCwgZGVlcE9wZXJhdGVBbmRDbG9uZSwgaXNDYW5KdXN0UmV0dXJuLCBpc0NhblRyYW5zZmVyLCBpc05vdENvbXBsZXhBcnJheSwgaXNQcmltaXRpdmUgfSBmcm9tIFwiQGZlc3QtbGliL2NvcmVcIjtcblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3R5cGVzL0ludGVyZmFjZS50c1xudmFyIFdTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oV1N0YXR1cykge1xuXHRXU3RhdHVzW1wiU1VDQ0VTU1wiXSA9IFwic3VjY2Vzc1wiO1xuXHRXU3RhdHVzW1wiRVJST1JcIl0gPSBcImVycm9yXCI7XG5cdHJldHVybiBXU3RhdHVzO1xufSh7fSk7XG52YXIgV1R5cGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oV1R5cGUpIHtcblx0V1R5cGVbXCJQUklNSVRJVkVcIl0gPSBcInByaW1pdGl2ZVwiO1xuXHRXVHlwZVtcIk5VTUJFUlwiXSA9IFwibnVtYmVyXCI7XG5cdFdUeXBlW1wiU1RSSU5HXCJdID0gXCJzdHJpbmdcIjtcblx0V1R5cGVbXCJCT09MRUFOXCJdID0gXCJib29sZWFuXCI7XG5cdFdUeXBlW1wiQklHSU5UXCJdID0gXCJiaWdpbnRcIjtcblx0V1R5cGVbXCJVTkRFRklORURcIl0gPSBcInVuZGVmaW5lZFwiO1xuXHRXVHlwZVtcIk5VTExcIl0gPSBcIm51bGxcIjtcblx0V1R5cGVbXCJPQkpFQ1RcIl0gPSBcIm9iamVjdFwiO1xuXHRXVHlwZVtcIkZVTkNUSU9OXCJdID0gXCJmdW5jdGlvblwiO1xuXHRXVHlwZVtcIkFSUkFZXCJdID0gXCJhcnJheVwiO1xuXHRXVHlwZVtcIk1BUFwiXSA9IFwibWFwXCI7XG5cdFdUeXBlW1wiU0VUXCJdID0gXCJzZXRcIjtcblx0V1R5cGVbXCJTWU1CT0xcIl0gPSBcInN5bWJvbFwiO1xuXHRXVHlwZVtcIldFQUtfUkVGXCJdID0gXCJ3ZWFrUmVmXCI7XG5cdFdUeXBlW1wiUFJPTUlTRVwiXSA9IFwicHJvbWlzZVwiO1xuXHRXVHlwZVtcIlVOS05PV05cIl0gPSBcInVua25vd25cIjtcblx0cmV0dXJuIFdUeXBlO1xufSh7fSk7XG52YXIgV1JlZmxlY3RBY3Rpb24gPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oV1JlZmxlY3RBY3Rpb24pIHtcblx0V1JlZmxlY3RBY3Rpb25bXCJHRVRcIl0gPSBcImdldFwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIlNFVFwiXSA9IFwic2V0XCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiQ0FMTFwiXSA9IFwiY2FsbFwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIkFQUExZXCJdID0gXCJhcHBseVwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIkNPTlNUUlVDVFwiXSA9IFwiY29uc3RydWN0XCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiREVMRVRFXCJdID0gXCJkZWxldGVcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJERUxFVEVfUFJPUEVSVFlcIl0gPSBcImRlbGV0ZVByb3BlcnR5XCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiSEFTXCJdID0gXCJoYXNcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJPV05fS0VZU1wiXSA9IFwib3duS2V5c1wiO1xuXHRXUmVmbGVjdEFjdGlvbltcIkdFVF9PV05fUFJPUEVSVFlfREVTQ1JJUFRPUlwiXSA9IFwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiR0VUX1BST1BFUlRZX0RFU0NSSVBUT1JcIl0gPSBcImdldFByb3BlcnR5RGVzY3JpcHRvclwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIkdFVF9QUk9UT1RZUEVfT0ZcIl0gPSBcImdldFByb3RvdHlwZU9mXCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiU0VUX1BST1RPVFlQRV9PRlwiXSA9IFwic2V0UHJvdG90eXBlT2ZcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJJU19FWFRFTlNJQkxFXCJdID0gXCJpc0V4dGVuc2libGVcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJQUkVWRU5UX0VYVEVOU0lPTlNcIl0gPSBcInByZXZlbnRFeHRlbnNpb25zXCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiVFJBTlNGRVJcIl0gPSBcInRyYW5zZmVyXCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiSU1QT1JUXCJdID0gXCJpbXBvcnRcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJESVNQT1NFXCJdID0gXCJkaXNwb3NlXCI7XG5cdHJldHVybiBXUmVmbGVjdEFjdGlvbjtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvY29yZS9UcmFuc3BvcnRDb3JlLnRzXG52YXIgVFJBTlNQT1JUX1RZUEVfQUxJQVNFUyA9IHtcblx0XCJ3c1wiOiBcIndlYnNvY2tldFwiLFxuXHRcInNvY2tldFwiOiBcIndlYnNvY2tldFwiLFxuXHRcInNvY2tldGlvXCI6IFwic29ja2V0LWlvXCIsXG5cdFwic2VydmljZVwiOiBcInNlcnZpY2Utd29ya2VyXCIsXG5cdFwic3dcIjogXCJzZXJ2aWNlLXdvcmtlclwiLFxuXHRcInNlcnZpY2Utd29ya2VyLWNsaWVudFwiOiBcInNlcnZpY2Utd29ya2VyXCIsXG5cdFwic2VydmljZS13b3JrZXItaG9zdFwiOiBcInNlcnZpY2Utd29ya2VyXCIsXG5cdFwicmluZy1idWZmZXJcIjogXCJhdG9taWNzXCJcbn07XG5mdW5jdGlvbiBub3JtYWxpemVUcmFuc3BvcnRUeXBlQWxpYXModHJhbnNwb3J0KSB7XG5cdGNvbnN0IHJhdyA9IFN0cmluZyh0cmFuc3BvcnQgPz8gXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cdGlmICghcmF3KSByZXR1cm4gXCJpbnRlcm5hbFwiO1xuXHRyZXR1cm4gVFJBTlNQT1JUX1RZUEVfQUxJQVNFU1tyYXddID8/IHJhdztcbn1cbmZ1bmN0aW9uIGRldGVjdFRyYW5zcG9ydFR5cGUkMSh0cmFuc3BvcnQpIHtcblx0aWYgKHR5cGVvZiB0cmFuc3BvcnQgPT09IFwic3RyaW5nXCIpIHJldHVybiBub3JtYWxpemVUcmFuc3BvcnRUeXBlQWxpYXModHJhbnNwb3J0KTtcblx0aWYgKHR5cGVvZiBXb3JrZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgV29ya2VyKSByZXR1cm4gXCJ3b3JrZXJcIjtcblx0aWYgKHR5cGVvZiBTaGFyZWRXb3JrZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgU2hhcmVkV29ya2VyKSByZXR1cm4gXCJzaGFyZWQtd29ya2VyXCI7XG5cdGlmICh0eXBlb2YgTWVzc2FnZVBvcnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgTWVzc2FnZVBvcnQpIHJldHVybiBcIm1lc3NhZ2UtcG9ydFwiO1xuXHRpZiAodHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgQnJvYWRjYXN0Q2hhbm5lbCkgcmV0dXJuIFwiYnJvYWRjYXN0XCI7XG5cdGlmICh0eXBlb2YgV2ViU29ja2V0ICE9PSBcInVuZGVmaW5lZFwiICYmIHRyYW5zcG9ydCBpbnN0YW5jZW9mIFdlYlNvY2tldCkgcmV0dXJuIFwid2Vic29ja2V0XCI7XG5cdGlmICh0eXBlb2YgUlRDRGF0YUNoYW5uZWwgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgUlRDRGF0YUNoYW5uZWwpIHJldHVybiBcInJ0Yy1kYXRhXCI7XG5cdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIHRyYW5zcG9ydCAmJiB0eXBlb2YgdHJhbnNwb3J0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB0cmFuc3BvcnQucG9zdE1lc3NhZ2UgPT09IFwiZnVuY3Rpb25cIiAmJiB0cmFuc3BvcnQub25NZXNzYWdlPy5hZGRMaXN0ZW5lcikgcmV0dXJuIFwiY2hyb21lLXBvcnRcIjtcblx0cmV0dXJuIFwiaW50ZXJuYWxcIjtcbn1cbmZ1bmN0aW9uIGdldFRyYW5zcG9ydE1ldGEodHJhbnNwb3J0KSB7XG5cdGNvbnN0IHR5cGUgPSBkZXRlY3RUcmFuc3BvcnRUeXBlJDEodHJhbnNwb3J0KTtcblx0cmV0dXJuIHtcblx0XHR0eXBlLFxuXHRcdHN1cHBvcnRzOiB7XG5cdFx0XHRcIndvcmtlclwiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiB0cnVlLFxuXHRcdFx0XHRiaW5hcnk6IHRydWUsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcInNoYXJlZC13b3JrZXJcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogdHJ1ZSxcblx0XHRcdFx0YmluYXJ5OiB0cnVlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IHRydWUsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcInNlcnZpY2Utd29ya2VyXCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IHRydWUsXG5cdFx0XHRcdGJpbmFyeTogdHJ1ZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiB0cnVlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0XCJicm9hZGNhc3RcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogZmFsc2UsXG5cdFx0XHRcdGJpbmFyeTogZmFsc2UsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IGZhbHNlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IHRydWUsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0XCJtZXNzYWdlLXBvcnRcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogdHJ1ZSxcblx0XHRcdFx0YmluYXJ5OiB0cnVlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IGZhbHNlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdFwid2Vic29ja2V0XCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IGZhbHNlLFxuXHRcdFx0XHRiaW5hcnk6IHRydWUsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcImNocm9tZS1ydW50aW1lXCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IGZhbHNlLFxuXHRcdFx0XHRiaW5hcnk6IGZhbHNlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IHRydWUsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0XCJjaHJvbWUtdGFic1wiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiBmYWxzZSxcblx0XHRcdFx0YmluYXJ5OiBmYWxzZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiBmYWxzZSxcblx0XHRcdFx0cGVyc2lzdGVudDogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRcImNocm9tZS1wb3J0XCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IGZhbHNlLFxuXHRcdFx0XHRiaW5hcnk6IGZhbHNlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IGZhbHNlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0XCJjaHJvbWUtZXh0ZXJuYWxcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogZmFsc2UsXG5cdFx0XHRcdGJpbmFyeTogZmFsc2UsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0XCJzb2NrZXQtaW9cIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogZmFsc2UsXG5cdFx0XHRcdGJpbmFyeTogdHJ1ZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiB0cnVlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0XCJydGMtZGF0YVwiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiBmYWxzZSxcblx0XHRcdFx0YmluYXJ5OiB0cnVlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IGZhbHNlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0XCJhdG9taWNzXCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IGZhbHNlLFxuXHRcdFx0XHRiaW5hcnk6IHRydWUsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcInNlbGZcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogdHJ1ZSxcblx0XHRcdFx0YmluYXJ5OiB0cnVlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IGZhbHNlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0XCJpbnRlcm5hbFwiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiBmYWxzZSxcblx0XHRcdFx0YmluYXJ5OiBmYWxzZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiBmYWxzZSxcblx0XHRcdFx0cGVyc2lzdGVudDogZmFsc2Vcblx0XHRcdH1cblx0XHR9W3R5cGVdXG5cdH07XG59XG5mdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnRTZW5kZXIodHJhbnNwb3J0LCBvcHRpb25zKSB7XG5cdHJldHVybiAobXNnLCB0cmFuc2ZlcikgPT4ge1xuXHRcdGNvbnN0IHRyYW5zZmVyYWJsZSA9IHRyYW5zZmVyID8/IG1zZz8udHJhbnNmZXJhYmxlID8/IFtdO1xuXHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlOiBfLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0aWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIFdvcmtlcikge1xuXHRcdFx0dHJhbnNwb3J0LnBvc3RNZXNzYWdlKGRhdGEsIHsgdHJhbnNmZXI6IHRyYW5zZmVyYWJsZSB9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBTaGFyZWRXb3JrZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgU2hhcmVkV29ya2VyKSB7XG5cdFx0XHR0cmFuc3BvcnQucG9ydC5wb3N0TWVzc2FnZShkYXRhLCB7IHRyYW5zZmVyOiB0cmFuc2ZlcmFibGUgfSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0cmFuc3BvcnQgaW5zdGFuY2VvZiBNZXNzYWdlUG9ydCkge1xuXHRcdFx0dHJhbnNwb3J0LnBvc3RNZXNzYWdlKGRhdGEsIHsgdHJhbnNmZXI6IHRyYW5zZmVyYWJsZSB9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIEJyb2FkY2FzdENoYW5uZWwpIHtcblx0XHRcdHRyYW5zcG9ydC5wb3N0TWVzc2FnZShkYXRhKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIFdlYlNvY2tldCkge1xuXHRcdFx0aWYgKHRyYW5zcG9ydC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xuXHRcdFx0XHRpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkgdHJhbnNwb3J0LnNlbmQoZGF0YSk7XG5cdFx0XHRcdGVsc2UgdHJhbnNwb3J0LnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS1ydW50aW1lXCIpIHtcblx0XHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lKSBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZShkYXRhKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRyYW5zcG9ydCA9PT0gXCJjaHJvbWUtdGFic1wiKSB7XG5cdFx0XHRpZiAodHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjaHJvbWUudGFicykge1xuXHRcdFx0XHRjb25zdCB0YWJJZCA9IG9wdGlvbnM/LnRhYklkID8/IG1zZz8uX3RhYklkO1xuXHRcdFx0XHRpZiAodGFiSWQgIT0gbnVsbCkgY2hyb21lLnRhYnMuc2VuZE1lc3NhZ2UodGFiSWQsIGRhdGEpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS1wb3J0XCIpIHtcblx0XHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lKSB7XG5cdFx0XHRcdGNvbnN0IHBvcnROYW1lID0gb3B0aW9ucz8ucG9ydE5hbWUgPz8gbXNnPy5fcG9ydE5hbWU7XG5cdFx0XHRcdGlmIChwb3J0TmFtZSkge1xuXHRcdFx0XHRcdGNvbnN0IHRhYklkID0gb3B0aW9ucz8udGFiSWQgPz8gbXNnPy5fdGFiSWQ7XG5cdFx0XHRcdFx0KHRhYklkICE9IG51bGwgJiYgY2hyb21lLnRhYnM/LmNvbm5lY3QgPyBjaHJvbWUudGFicy5jb25uZWN0KHRhYklkLCB7IG5hbWU6IHBvcnROYW1lIH0pIDogY2hyb21lLnJ1bnRpbWUuY29ubmVjdCh7IG5hbWU6IHBvcnROYW1lIH0pKS5wb3N0TWVzc2FnZShkYXRhKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS1leHRlcm5hbFwiKSB7XG5cdFx0XHRpZiAodHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjaHJvbWUucnVudGltZSkge1xuXHRcdFx0XHRjb25zdCBleHRlcm5hbElkID0gb3B0aW9ucz8uZXh0ZXJuYWxJZCA/PyBtc2c/Ll9leHRlcm5hbElkO1xuXHRcdFx0XHRpZiAoZXh0ZXJuYWxJZCkgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoZXh0ZXJuYWxJZCwgZGF0YSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0cmFuc3BvcnQgPT09IFwic2VydmljZS13b3JrZXItY2xpZW50XCIpIHtcblx0XHRcdGlmIChcInNlcnZpY2VXb3JrZXJcIiBpbiBuYXZpZ2F0b3IpIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5LnRoZW4oKHJlZykgPT4ge1xuXHRcdFx0XHRyZWcuYWN0aXZlPy5wb3N0TWVzc2FnZShkYXRhLCB0cmFuc2ZlcmFibGUpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0cmFuc3BvcnQgPT09IFwic2VydmljZS13b3JrZXItaG9zdFwiKSB7XG5cdFx0XHRpZiAodHlwZW9mIGNsaWVudHMgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0Y29uc3QgY2xpZW50SWQgPSBvcHRpb25zPy5jbGllbnRJZCA/PyBtc2c/Ll9jbGllbnRJZDtcblx0XHRcdFx0aWYgKGNsaWVudElkKSBjbGllbnRzLmdldChjbGllbnRJZCkudGhlbigoYykgPT4gYz8ucG9zdE1lc3NhZ2UoZGF0YSwgdHJhbnNmZXJhYmxlKSk7XG5cdFx0XHRcdGVsc2UgY2xpZW50cy5tYXRjaEFsbCh7IGluY2x1ZGVVbmNvbnRyb2xsZWQ6IHRydWUgfSkudGhlbigoYWxsKSA9PiB7XG5cdFx0XHRcdFx0YWxsLmZvckVhY2goKGMpID0+IGMucG9zdE1lc3NhZ2UoZGF0YSwgdHJhbnNmZXJhYmxlKSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHJhbnNwb3J0ID09PSBcInNlbGZcIikge1xuXHRcdFx0aWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIFwicG9zdE1lc3NhZ2VcIiBpbiBzZWxmKSBzZWxmLnBvc3RNZXNzYWdlKGRhdGEsIHsgdHJhbnNmZXI6IHRyYW5zZmVyYWJsZSB9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH07XG59XG5mdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0cmFuc3BvcnQsIG9uTWVzc2FnZSwgb25FcnJvciwgb25DbG9zZSwgb3B0aW9ucykge1xuXHRjb25zdCBtc2dIYW5kbGVyID0gKGUpID0+IHtcblx0XHRpZiAodHJhbnNwb3J0IGluc3RhbmNlb2YgV2ViU29ja2V0ICYmIHR5cGVvZiBlLmRhdGEgPT09IFwic3RyaW5nXCIpIHRyeSB7XG5cdFx0XHRvbk1lc3NhZ2UoSlNPTi5wYXJzZShlLmRhdGEpKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdG9uRXJyb3I/LihlcnIpO1xuXHRcdH1cblx0XHRlbHNlIGlmICh0cmFuc3BvcnQgaW5zdGFuY2VvZiBXZWJTb2NrZXQgJiYgZS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIG9uTWVzc2FnZShlLmRhdGEpO1xuXHRcdGVsc2Ugb25NZXNzYWdlKGUuZGF0YSk7XG5cdH07XG5cdGNvbnN0IGVyckhhbmRsZXIgPSAoZSkgPT4ge1xuXHRcdG9uRXJyb3I/LihuZXcgRXJyb3IoZS5tZXNzYWdlID8/IFwiVHJhbnNwb3J0IGVycm9yXCIpKTtcblx0fTtcblx0Y29uc3QgY2xvc2VIYW5kbGVyID0gKCkgPT4gb25DbG9zZT8uKCk7XG5cdGlmICh0cmFuc3BvcnQgaW5zdGFuY2VvZiBXb3JrZXIpIHtcblx0XHR0cmFuc3BvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0dHJhbnNwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBlcnJIYW5kbGVyKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dHJhbnNwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0dHJhbnNwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBlcnJIYW5kbGVyKTtcblx0XHR9O1xuXHR9XG5cdGlmICh0eXBlb2YgU2hhcmVkV29ya2VyICE9PSBcInVuZGVmaW5lZFwiICYmIHRyYW5zcG9ydCBpbnN0YW5jZW9mIFNoYXJlZFdvcmtlcikge1xuXHRcdHRyYW5zcG9ydC5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdHRyYW5zcG9ydC5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlZXJyb3JcIiwgZXJySGFuZGxlcik7XG5cdFx0dHJhbnNwb3J0LnBvcnQuc3RhcnQoKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dHJhbnNwb3J0LnBvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0XHR0cmFuc3BvcnQucG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZWVycm9yXCIsIGVyckhhbmRsZXIpO1xuXHRcdFx0dHJhbnNwb3J0LnBvcnQuY2xvc2UoKTtcblx0XHR9O1xuXHR9XG5cdGlmICh0cmFuc3BvcnQgaW5zdGFuY2VvZiBNZXNzYWdlUG9ydCkge1xuXHRcdHRyYW5zcG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtc2dIYW5kbGVyKTtcblx0XHR0cmFuc3BvcnQuc3RhcnQoKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dHJhbnNwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0dHJhbnNwb3J0LmNsb3NlKCk7XG5cdFx0fTtcblx0fVxuXHRpZiAodHJhbnNwb3J0IGluc3RhbmNlb2YgQnJvYWRjYXN0Q2hhbm5lbCkge1xuXHRcdHRyYW5zcG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtc2dIYW5kbGVyKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dHJhbnNwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0dHJhbnNwb3J0LmNsb3NlKCk7XG5cdFx0fTtcblx0fVxuXHRpZiAodHJhbnNwb3J0IGluc3RhbmNlb2YgV2ViU29ja2V0KSB7XG5cdFx0dHJhbnNwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdHRyYW5zcG9ydC5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgZXJySGFuZGxlcik7XG5cdFx0dHJhbnNwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbG9zZVwiLCBjbG9zZUhhbmRsZXIpO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHR0cmFuc3BvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0XHR0cmFuc3BvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIGVyckhhbmRsZXIpO1xuXHRcdFx0dHJhbnNwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbG9zZVwiLCBjbG9zZUhhbmRsZXIpO1xuXHRcdFx0aWYgKHRyYW5zcG9ydC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikgdHJhbnNwb3J0LmNsb3NlKCk7XG5cdFx0fTtcblx0fVxuXHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS1ydW50aW1lXCIpIHtcblx0XHRpZiAodHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjaHJvbWUucnVudGltZSkge1xuXHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdG9uTWVzc2FnZShtc2cpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHRcdHJldHVybiAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdH1cblx0fVxuXHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS10YWJzXCIpIHtcblx0XHRpZiAodHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjaHJvbWUucnVudGltZSkge1xuXHRcdFx0Y29uc3QgdGFiSWQgPSBvcHRpb25zPy50YWJJZDtcblx0XHRcdGlmICh0YWJJZCAhPSBudWxsKSByZXR1cm4gY3JlYXRlQ2hyb21lVGFic0xpc3RlbmVyKHRhYklkLCAobXNnKSA9PiBvbk1lc3NhZ2UobXNnKSk7XG5cdFx0XHRjb25zdCBsaXN0ZW5lciA9IChtc2cpID0+IHtcblx0XHRcdFx0b25NZXNzYWdlKG1zZyk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdFx0cmV0dXJuICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0fVxuXHR9XG5cdGlmICh0cmFuc3BvcnQgPT09IFwiY2hyb21lLXBvcnRcIikge1xuXHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lKSB7XG5cdFx0XHRjb25zdCBwb3J0TmFtZSA9IG9wdGlvbnM/LnBvcnROYW1lO1xuXHRcdFx0aWYgKHBvcnROYW1lKSB7XG5cdFx0XHRcdGNvbnN0IHBvcnQgPSBjaHJvbWUucnVudGltZS5jb25uZWN0KHsgbmFtZTogcG9ydE5hbWUgfSk7XG5cdFx0XHRcdHBvcnQub25NZXNzYWdlLmFkZExpc3RlbmVyKG9uTWVzc2FnZSk7XG5cdFx0XHRcdHBvcnQub25EaXNjb25uZWN0LmFkZExpc3RlbmVyKGNsb3NlSGFuZGxlcik7XG5cdFx0XHRcdHJldHVybiAoKSA9PiBwb3J0LmRpc2Nvbm5lY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKHRyYW5zcG9ydCA9PT0gXCJjaHJvbWUtZXh0ZXJuYWxcIikge1xuXHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lPy5vbk1lc3NhZ2VFeHRlcm5hbCkge1xuXHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdG9uTWVzc2FnZShtc2cpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlRXh0ZXJuYWwuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdFx0cmV0dXJuICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHR9XG5cdH1cblx0aWYgKHRyYW5zcG9ydCA9PT0gXCJzZXJ2aWNlLXdvcmtlci1jbGllbnRcIikge1xuXHRcdGlmIChcInNlcnZpY2VXb3JrZXJcIiBpbiBuYXZpZ2F0b3IpIHtcblx0XHRcdG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0cmV0dXJuICgpID0+IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdH1cblx0fVxuXHRpZiAodHJhbnNwb3J0ID09PSBcInNlcnZpY2Utd29ya2VyLWhvc3RcIiB8fCB0cmFuc3BvcnQgPT09IFwic2VsZlwiKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHRjb25zdCBjbGllbnRJZCA9IHRyYW5zcG9ydCA9PT0gXCJzZXJ2aWNlLXdvcmtlci1ob3N0XCIgPyBlLnNvdXJjZT8uaWQgOiB2b2lkIDA7XG5cdFx0XHRvbk1lc3NhZ2UoY2xpZW50SWQgPyB7XG5cdFx0XHRcdC4uLmUuZGF0YSxcblx0XHRcdFx0X2NsaWVudElkOiBjbGllbnRJZFxuXHRcdFx0fSA6IGUuZGF0YSk7XG5cdFx0fTtcblx0XHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuXHRcdHJldHVybiAoKSA9PiBzZWxmLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuXHR9XG5cdHJldHVybiAoKSA9PiB7fTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNocm9tZUxpc3RlbmVyKG9uTWVzc2FnZSwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybiAoKSA9PiB7fTtcblx0Y29uc3QgbGlzdGVuZXIgPSAobWVzc2FnZSwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpID0+IG9uTWVzc2FnZShtZXNzYWdlLCBzZW5kUmVzcG9uc2UsIHNlbmRlcik7XG5cdGlmIChvcHRpb25zPy5leHRlcm5hbCAmJiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbCkge1xuXHRcdGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHRyZXR1cm4gKCkgPT4gY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlRXh0ZXJuYWwucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuXHR9XG5cdGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5hZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdHJldHVybiAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xufVxuZnVuY3Rpb24gY3JlYXRlQ2hyb21lVGFic0xpc3RlbmVyKHRhYklkLCBvbk1lc3NhZ2UpIHtcblx0aWYgKHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS5ydW50aW1lKSByZXR1cm4gKCkgPT4ge307XG5cdGNvbnN0IGxpc3RlbmVyID0gKG1zZywgc2VuZGVyKSA9PiB7XG5cdFx0aWYgKHNlbmRlci50YWI/LmlkID09PSB0YWJJZCkgb25NZXNzYWdlKG1zZywgc2VuZGVyKTtcblx0fTtcblx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0cmV0dXJuICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG59XG5mdW5jdGlvbiBjcmVhdGVXZWJTb2NrZXRUcmFuc3BvcnQodXJsLCBvcHRpb25zID0ge30pIHtcblx0bGV0IHNvY2tldCA9IG5ldyBXZWJTb2NrZXQodXJsLCBvcHRpb25zLnByb3RvY29scyk7XG5cdGlmIChvcHRpb25zLmJpbmFyeVR5cGUpIHNvY2tldC5iaW5hcnlUeXBlID0gb3B0aW9ucy5iaW5hcnlUeXBlO1xuXHRsZXQgcmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuXHRsZXQgcmVjb25uZWN0VGltZXIgPSBudWxsO1xuXHRjb25zdCBzZW5kID0gKG1zZywgdHJhbnNmZXIpID0+IHtcblx0XHRpZiAoc29ja2V0LnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5PUEVOKSByZXR1cm47XG5cdFx0aWYgKG1zZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhtc2cpKSBzb2NrZXQuc2VuZChtc2cpO1xuXHRcdGVsc2Ugc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkobXNnKSk7XG5cdH07XG5cdGNvbnN0IHJlY29ubmVjdCA9ICgpID0+IHtcblx0XHRpZiAocmVjb25uZWN0QXR0ZW1wdHMgPj0gKG9wdGlvbnMubWF4UmVjb25uZWN0QXR0ZW1wdHMgPz8gNSkpIHJldHVybjtcblx0XHRyZWNvbm5lY3RBdHRlbXB0cysrO1xuXHRcdHNvY2tldCA9IG5ldyBXZWJTb2NrZXQodXJsLCBvcHRpb25zLnByb3RvY29scyk7XG5cdFx0aWYgKG9wdGlvbnMuYmluYXJ5VHlwZSkgc29ja2V0LmJpbmFyeVR5cGUgPSBvcHRpb25zLmJpbmFyeVR5cGU7XG5cdH07XG5cdGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuXHRcdGlmIChyZWNvbm5lY3RUaW1lcikgY2xlYXJUaW1lb3V0KHJlY29ubmVjdFRpbWVyKTtcblx0XHRzb2NrZXQuY2xvc2UoKTtcblx0fTtcblx0aWYgKG9wdGlvbnMucmVjb25uZWN0KSBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcihcImNsb3NlXCIsICgpID0+IHtcblx0XHRyZWNvbm5lY3RUaW1lciA9IHNldFRpbWVvdXQocmVjb25uZWN0LCBvcHRpb25zLnJlY29ubmVjdEludGVydmFsID8/IDNlMyk7XG5cdH0pO1xuXHRyZXR1cm4ge1xuXHRcdHNvY2tldCxcblx0XHRzZW5kLFxuXHRcdGxpc3RlbjogKGhhbmRsZXIpID0+IHtcblx0XHRcdGNvbnN0IGggPSAoZSkgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIGUuZGF0YSA9PT0gXCJzdHJpbmdcIikgdHJ5IHtcblx0XHRcdFx0XHRoYW5kbGVyKEpTT04ucGFyc2UoZS5kYXRhKSk7XG5cdFx0XHRcdH0gY2F0Y2gge31cblx0XHRcdFx0ZWxzZSBoYW5kbGVyKGUuZGF0YSk7XG5cdFx0XHR9O1xuXHRcdFx0c29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGgpO1xuXHRcdFx0cmV0dXJuICgpID0+IHNvY2tldC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoKTtcblx0XHR9LFxuXHRcdHJlY29ubmVjdCxcblx0XHRjbG9zZVxuXHR9O1xufVxuZnVuY3Rpb24gY3JlYXRlQnJvYWRjYXN0VHJhbnNwb3J0KGNoYW5uZWxOYW1lKSB7XG5cdGNvbnN0IGNoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbChjaGFubmVsTmFtZSk7XG5cdHJldHVybiB7XG5cdFx0Y2hhbm5lbCxcblx0XHRzZW5kOiAobXNnKSA9PiBjaGFubmVsLnBvc3RNZXNzYWdlKG1zZyksXG5cdFx0bGlzdGVuOiAoaGFuZGxlcikgPT4ge1xuXHRcdFx0Y29uc3QgaCA9IChlKSA9PiBoYW5kbGVyKGUuZGF0YSk7XG5cdFx0XHRjaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGgpO1xuXHRcdFx0cmV0dXJuICgpID0+IGNoYW5uZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaCk7XG5cdFx0fSxcblx0XHRjbG9zZTogKCkgPT4gY2hhbm5lbC5jbG9zZSgpXG5cdH07XG59XG52YXIgVHJhbnNwb3J0Q29yZUZhY3RvcnkgPSB7XG5cdGNyZWF0ZVNlbmRlcjogY3JlYXRlVHJhbnNwb3J0U2VuZGVyLFxuXHRjcmVhdGVMaXN0ZW5lcjogY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIsXG5cdGRldGVjdFR5cGU6IGRldGVjdFRyYW5zcG9ydFR5cGUkMSxcblx0Z2V0TWV0YTogZ2V0VHJhbnNwb3J0TWV0YSxcblx0Y2hyb21lOiB7XG5cdFx0Y3JlYXRlTGlzdGVuZXI6IGNyZWF0ZUNocm9tZUxpc3RlbmVyLFxuXHRcdGNyZWF0ZVRhYnNMaXN0ZW5lcjogY3JlYXRlQ2hyb21lVGFic0xpc3RlbmVyXG5cdH0sXG5cdHdlYnNvY2tldDogY3JlYXRlV2ViU29ja2V0VHJhbnNwb3J0LFxuXHRicm9hZGNhc3Q6IGNyZWF0ZUJyb2FkY2FzdFRyYW5zcG9ydFxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvb2JzZXJ2YWJsZS9PYnNlcnZhYmxlLnRzXG52YXIgQmFzZVN1YnNjcmlwdGlvbiA9IGNsYXNzIHtcblx0X3Vuc3Vic2NyaWJlO1xuXHRfY2xvc2VkID0gZmFsc2U7XG5cdGNvbnN0cnVjdG9yKF91bnN1YnNjcmliZSkge1xuXHRcdHRoaXMuX3Vuc3Vic2NyaWJlID0gX3Vuc3Vic2NyaWJlO1xuXHR9XG5cdGdldCBjbG9zZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nsb3NlZDtcblx0fVxuXHR1bnN1YnNjcmliZSgpIHtcblx0XHRpZiAoIXRoaXMuX2Nsb3NlZCkge1xuXHRcdFx0dGhpcy5fY2xvc2VkID0gdHJ1ZTtcblx0XHRcdHRoaXMuX3Vuc3Vic2NyaWJlKCk7XG5cdFx0fVxuXHR9XG59O1xudmFyIE9ic2VydmFibGUgPSBjbGFzcyB7XG5cdF9wcm9kdWNlcjtcblx0Y29uc3RydWN0b3IoX3Byb2R1Y2VyKSB7XG5cdFx0dGhpcy5fcHJvZHVjZXIgPSBfcHJvZHVjZXI7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyT3JOZXh0LCBvcHRzKSB7XG5cdFx0Y29uc3Qgb2JzZXJ2ZXIgPSB0eXBlb2Ygb2JzZXJ2ZXJPck5leHQgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXJPck5leHQgfSA6IG9ic2VydmVyT3JOZXh0ID8/IHt9O1xuXHRcdGNvbnN0IGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cdFx0b3B0cz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gY3RybC5hYm9ydCgpKTtcblx0XHRsZXQgYWN0aXZlID0gdHJ1ZTtcblx0XHRsZXQgY2xlYW51cDtcblx0XHRjb25zdCBkb0NsZWFudXAgPSAoKSA9PiB7XG5cdFx0XHRhY3RpdmUgPSBmYWxzZTtcblx0XHRcdGN0cmwuYWJvcnQoKTtcblx0XHRcdGNsZWFudXA/LigpO1xuXHRcdH07XG5cdFx0Y29uc3Qgc3Vic2NyaWJlciA9IHtcblx0XHRcdG5leHQ6ICh2KSA9PiBhY3RpdmUgJiYgb2JzZXJ2ZXIubmV4dD8uKHYpLFxuXHRcdFx0ZXJyb3I6IChlKSA9PiB7XG5cdFx0XHRcdGlmIChhY3RpdmUpIHtcblx0XHRcdFx0XHRvYnNlcnZlci5lcnJvcj8uKGUpO1xuXHRcdFx0XHRcdGRvQ2xlYW51cCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Y29tcGxldGU6ICgpID0+IHtcblx0XHRcdFx0aWYgKGFjdGl2ZSkge1xuXHRcdFx0XHRcdG9ic2VydmVyLmNvbXBsZXRlPy4oKTtcblx0XHRcdFx0XHRkb0NsZWFudXAoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHNpZ25hbDogY3RybC5zaWduYWwsXG5cdFx0XHRnZXQgYWN0aXZlKCkge1xuXHRcdFx0XHRyZXR1cm4gYWN0aXZlICYmICFjdHJsLnNpZ25hbC5hYm9ydGVkO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dHJ5IHtcblx0XHRcdGNsZWFudXAgPSB0aGlzLl9wcm9kdWNlcihzdWJzY3JpYmVyKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRzdWJzY3JpYmVyLmVycm9yKGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IEJhc2VTdWJzY3JpcHRpb24oZG9DbGVhbnVwKTtcblx0fVxuXHRwaXBlKC4uLm9wcykge1xuXHRcdHJldHVybiBvcHMucmVkdWNlKChzLCBvcCkgPT4gb3AocyksIHRoaXMpO1xuXHR9XG59O1xudmFyIENoYW5uZWxTdWJqZWN0ID0gY2xhc3Mge1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9idWZmZXIgPSBbXTtcblx0X21heEJ1ZmZlcjtcblx0X3JlcGxheTtcblx0Y29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG5cdFx0dGhpcy5fbWF4QnVmZmVyID0gb3B0aW9ucy5idWZmZXJTaXplID8/IDA7XG5cdFx0dGhpcy5fcmVwbGF5ID0gb3B0aW9ucy5yZXBsYXlPblN1YnNjcmliZSA/PyBmYWxzZTtcblx0fVxuXHRuZXh0KHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuX21heEJ1ZmZlciA+IDApIHtcblx0XHRcdHRoaXMuX2J1ZmZlci5wdXNoKHZhbHVlKTtcblx0XHRcdGlmICh0aGlzLl9idWZmZXIubGVuZ3RoID4gdGhpcy5fbWF4QnVmZmVyKSB0aGlzLl9idWZmZXIuc2hpZnQoKTtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRzLm5leHQ/Lih2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdH1cblx0fVxuXHRlcnJvcihlcnIpIHtcblx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5lcnJvcj8uKGVycik7XG5cdH1cblx0Y29tcGxldGUoKSB7XG5cdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuY29tcGxldGU/LigpO1xuXHRcdHRoaXMuX3N1YnMuY2xlYXIoKTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXJPck5leHQpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXJPck5leHQgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXJPck5leHQgfSA6IG9ic2VydmVyT3JOZXh0O1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0aWYgKHRoaXMuX3JlcGxheSkgZm9yIChjb25zdCB2IG9mIHRoaXMuX2J1ZmZlcikgdHJ5IHtcblx0XHRcdG9icy5uZXh0Py4odik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0b2JzLmVycm9yPy4oZSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgQmFzZVN1YnNjcmlwdGlvbigoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdH0pO1xuXHR9XG5cdGdldFZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLl9idWZmZXIuYXQoLTEpO1xuXHR9XG5cdGdldEJ1ZmZlcigpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2J1ZmZlcl07XG5cdH1cblx0Z2V0IHN1YnNjcmliZXJDb3VudCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3Vicy5zaXplO1xuXHR9XG59O1xudmFyIFJlcGxheUNoYW5uZWxTdWJqZWN0ID0gY2xhc3MgZXh0ZW5kcyBDaGFubmVsU3ViamVjdCB7XG5cdGNvbnN0cnVjdG9yKGJ1ZmZlclNpemUgPSAxKSB7XG5cdFx0c3VwZXIoe1xuXHRcdFx0YnVmZmVyU2l6ZSxcblx0XHRcdHJlcGxheU9uU3Vic2NyaWJlOiB0cnVlXG5cdFx0fSk7XG5cdH1cbn07XG52YXIgQ2hhbm5lbE9ic2VydmFibGUgPSBjbGFzcyB7XG5cdF90cmFuc3BvcnQ7XG5cdF9jaGFubmVsTmFtZTtcblx0X3NlbmQ7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9saXN0ZW5pbmcgPSBmYWxzZTtcblx0Y29uc3RydWN0b3IoX3RyYW5zcG9ydCwgX2NoYW5uZWxOYW1lKSB7XG5cdFx0dGhpcy5fdHJhbnNwb3J0ID0gX3RyYW5zcG9ydDtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKF90cmFuc3BvcnQpO1xuXHR9XG5cdG5leHQobXNnLCB0cmFuc2Zlcikge1xuXHRcdHRoaXMuX3NlbmQobXNnLCB0cmFuc2Zlcik7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdGlmICghdGhpcy5fbGlzdGVuaW5nKSB0aGlzLl9hY3RpdmF0ZSgpO1xuXHRcdHJldHVybiBuZXcgQmFzZVN1YnNjcmlwdGlvbigoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCkgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHRcdH0pO1xuXHR9XG5cdHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdCxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMubmV4dCh7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWRcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdF9oYW5kbGUoZGF0YSkge1xuXHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRpZiAocCkge1xuXHRcdFx0XHRwLnJlc29sdmUoZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUoZGF0YS5yZXFJZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0cy5uZXh0Py4oZGF0YSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdH1cblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0aGlzLl90cmFuc3BvcnQsIChkKSA9PiB0aGlzLl9oYW5kbGUoZCksIChlKSA9PiB0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuZXJyb3I/LihlKSksICgpID0+IHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG5cdF9kZWFjdGl2YXRlKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBudWxsO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IGZhbHNlO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpO1xuXHRcdHRoaXMuX3N1YnMuY2xlYXIoKTtcblx0XHR0aGlzLl9kZWFjdGl2YXRlKCk7XG5cdH1cblx0Z2V0IGNoYW5uZWxOYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsTmFtZTtcblx0fVxuXHRnZXQgaXNMaXN0ZW5pbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xpc3RlbmluZztcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUludm9rZXJPYnNlcnZhYmxlKHRyYW5zcG9ydCwgY2hhbm5lbE5hbWUsIGhhbmRsZXIpIHtcblx0Y29uc3Qgc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0cmFuc3BvcnQpO1xuXHRyZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcblx0XHRjb25zdCBvbk1lc3NhZ2UgPSAoZGF0YSkgPT4ge1xuXHRcdFx0aWYgKCFzdWJzY3JpYmVyLmFjdGl2ZSkgcmV0dXJuO1xuXHRcdFx0Y29uc3QgcmVzcG9uZCA9IChyZXN1bHQsIHRyYW5zZmVyKSA9PiB7XG5cdFx0XHRcdHNlbmQoe1xuXHRcdFx0XHRcdC4uLnJlc3VsdCxcblx0XHRcdFx0XHRjaGFubmVsOiBkYXRhLnNlbmRlcixcblx0XHRcdFx0XHRzZW5kZXI6IGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdFx0XHRyZXFJZDogZGF0YS5yZXFJZFxuXHRcdFx0XHR9LCB0cmFuc2Zlcik7XG5cdFx0XHR9O1xuXHRcdFx0aGFuZGxlciA/IGhhbmRsZXIoZGF0YSwgcmVzcG9uZCwgc3Vic2NyaWJlcikgOiBzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG5cdFx0fTtcblx0XHRyZXR1cm4gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodHJhbnNwb3J0LCBvbk1lc3NhZ2UsIChlKSA9PiBzdWJzY3JpYmVyLmVycm9yKGUpLCAoKSA9PiBzdWJzY3JpYmVyLmNvbXBsZXRlKCkpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJlZmxlY3RIYW5kbGVyKGNoYW5uZWxOYW1lKSB7XG5cdHJldHVybiBhc3luYyAoZGF0YSwgcmVzcG9uZCwgc3Vic2NyaWJlcikgPT4ge1xuXHRcdGlmIChkYXRhLnR5cGUgIT09IFwicmVxdWVzdFwiKSB7XG5cdFx0XHRzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVJlcXVlc3QoZGF0YS5wYXlsb2FkLCBkYXRhLnJlcUlkLCBjaGFubmVsTmFtZSk7XG5cdFx0aWYgKHJlc3VsdCkgcmVzcG9uZChyZXN1bHQucmVzcG9uc2UsIHJlc3VsdC50cmFuc2Zlcik7XG5cdFx0c3Vic2NyaWJlci5uZXh0KGRhdGEpO1xuXHR9O1xufVxudmFyIE1lc3NhZ2VPYnNlcnZhYmxlID0gY2xhc3MgZXh0ZW5kcyBDaGFubmVsU3ViamVjdCB7XG5cdGNvbnN0cnVjdG9yKHNvdXJjZSwgbWVzc2FnZVR5cGUpIHtcblx0XHRzdXBlcigpO1xuXHRcdHNvdXJjZS5zdWJzY3JpYmUoe1xuXHRcdFx0bmV4dDogKG1zZykgPT4ge1xuXHRcdFx0XHRpZiAoIW1lc3NhZ2VUeXBlIHx8IG1zZy50eXBlID09PSBtZXNzYWdlVHlwZSkgdGhpcy5uZXh0KG1zZyk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3I6IChlKSA9PiB0aGlzLmVycm9yKGUpLFxuXHRcdFx0Y29tcGxldGU6ICgpID0+IHRoaXMuY29tcGxldGUoKVxuXHRcdH0pO1xuXHR9XG59O1xudmFyIGZpbHRlciA9IChwcmVkKSA9PiAoc3JjKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdGNvbnN0IHMgPSBzcmMuc3Vic2NyaWJlKHtcblx0XHRuZXh0OiAodikgPT4gcHJlZCh2KSAmJiBzdWIubmV4dCh2KSxcblx0XHRlcnJvcjogKGUpID0+IHN1Yi5lcnJvcihlKSxcblx0XHRjb21wbGV0ZTogKCkgPT4gc3ViLmNvbXBsZXRlKClcblx0fSk7XG5cdHJldHVybiAoKSA9PiBzLnVuc3Vic2NyaWJlKCk7XG59KTtcbnZhciBtYXAgPSAoZm4pID0+IChzcmMpID0+IG5ldyBPYnNlcnZhYmxlKChzdWIpID0+IHtcblx0Y29uc3QgcyA9IHNyYy5zdWJzY3JpYmUoe1xuXHRcdG5leHQ6ICh2KSA9PiBzdWIubmV4dChmbih2KSksXG5cdFx0ZXJyb3I6IChlKSA9PiBzdWIuZXJyb3IoZSksXG5cdFx0Y29tcGxldGU6ICgpID0+IHN1Yi5jb21wbGV0ZSgpXG5cdH0pO1xuXHRyZXR1cm4gKCkgPT4gcy51bnN1YnNjcmliZSgpO1xufSk7XG52YXIgdGFrZSA9IChuKSA9PiAoc3JjKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdGxldCBjID0gMDtcblx0Y29uc3QgcyA9IHNyYy5zdWJzY3JpYmUoe1xuXHRcdG5leHQ6ICh2KSA9PiB7XG5cdFx0XHRpZiAoYysrIDwgbikge1xuXHRcdFx0XHRzdWIubmV4dCh2KTtcblx0XHRcdFx0aWYgKGMgPj0gbikgc3ViLmNvbXBsZXRlKCk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRlcnJvcjogKGUpID0+IHN1Yi5lcnJvcihlKSxcblx0XHRjb21wbGV0ZTogKCkgPT4gc3ViLmNvbXBsZXRlKClcblx0fSk7XG5cdHJldHVybiAoKSA9PiBzLnVuc3Vic2NyaWJlKCk7XG59KTtcbnZhciB0YWtlVW50aWwgPSAoc2lnbmFsKSA9PiAoc3JjKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdGNvbnN0IHNzID0gc3JjLnN1YnNjcmliZSh7XG5cdFx0bmV4dDogKHYpID0+IHN1Yi5uZXh0KHYpLFxuXHRcdGVycm9yOiAoZSkgPT4gc3ViLmVycm9yKGUpLFxuXHRcdGNvbXBsZXRlOiAoKSA9PiBzdWIuY29tcGxldGUoKVxuXHR9KTtcblx0Y29uc3Qgc2lnID0gc2lnbmFsLnN1YnNjcmliZSh7IG5leHQ6ICgpID0+IHN1Yi5jb21wbGV0ZSgpIH0pO1xuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdHNzLnVuc3Vic2NyaWJlKCk7XG5cdFx0c2lnLnVuc3Vic2NyaWJlKCk7XG5cdH07XG59KTtcbnZhciBkZWJvdW5jZSA9IChtcykgPT4gKHNyYykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRsZXQgdDtcblx0Y29uc3QgcyA9IHNyYy5zdWJzY3JpYmUoe1xuXHRcdG5leHQ6ICh2KSA9PiB7XG5cdFx0XHRjbGVhclRpbWVvdXQodCk7XG5cdFx0XHR0ID0gc2V0VGltZW91dCgoKSA9PiBzdWIubmV4dCh2KSwgbXMpO1xuXHRcdH0sXG5cdFx0ZXJyb3I6IChlKSA9PiBzdWIuZXJyb3IoZSksXG5cdFx0Y29tcGxldGU6ICgpID0+IHN1Yi5jb21wbGV0ZSgpXG5cdH0pO1xuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGNsZWFyVGltZW91dCh0KTtcblx0XHRzLnVuc3Vic2NyaWJlKCk7XG5cdH07XG59KTtcbnZhciB0aHJvdHRsZSA9IChtcykgPT4gKHNyYykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRsZXQgbGFzdCA9IDA7XG5cdGNvbnN0IHMgPSBzcmMuc3Vic2NyaWJlKHtcblx0XHRuZXh0OiAodikgPT4ge1xuXHRcdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRcdGlmIChub3cgLSBsYXN0ID49IG1zKSB7XG5cdFx0XHRcdGxhc3QgPSBub3c7XG5cdFx0XHRcdHN1Yi5uZXh0KHYpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZXJyb3I6IChlKSA9PiBzdWIuZXJyb3IoZSksXG5cdFx0Y29tcGxldGU6ICgpID0+IHN1Yi5jb21wbGV0ZSgpXG5cdH0pO1xuXHRyZXR1cm4gKCkgPT4gcy51bnN1YnNjcmliZSgpO1xufSk7XG52YXIgZnJvbUV2ZW50ID0gKHRhcmdldCwgZXZlbnQpID0+IG5ldyBPYnNlcnZhYmxlKChzdWIpID0+IHtcblx0Y29uc3QgaCA9IChlKSA9PiBzdWIuYWN0aXZlICYmIHN1Yi5uZXh0KGUpO1xuXHR0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaCk7XG5cdHJldHVybiAoKSA9PiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaCk7XG59KTtcbnZhciBmcm9tUHJvbWlzZSA9IChwcm9taXNlKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdHByb21pc2UudGhlbigodikgPT4ge1xuXHRcdHN1Yi5uZXh0KHYpO1xuXHRcdHN1Yi5jb21wbGV0ZSgpO1xuXHR9KS5jYXRjaCgoZSkgPT4gc3ViLmVycm9yKGUpKTtcbn0pO1xudmFyIGRlbGF5ID0gKHZhbHVlLCBtcykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRjb25zdCB0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0c3ViLm5leHQodmFsdWUpO1xuXHRcdHN1Yi5jb21wbGV0ZSgpO1xuXHR9LCBtcyk7XG5cdHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodCk7XG59KTtcbnZhciBpbnRlcnZhbCA9IChtcykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRsZXQgbiA9IDA7XG5cdGNvbnN0IHQgPSBzZXRJbnRlcnZhbCgoKSA9PiBzdWIubmV4dChuKyspLCBtcyk7XG5cdHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKHQpO1xufSk7XG52YXIgbWVyZ2UgPSAoLi4uc291cmNlcykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRjb25zdCBzdWJzID0gc291cmNlcy5tYXAoKHMpID0+IHMuc3Vic2NyaWJlKHtcblx0XHRuZXh0OiAodikgPT4gc3ViLm5leHQodiksXG5cdFx0ZXJyb3I6IChlKSA9PiBzdWIuZXJyb3IoZSlcblx0fSkpO1xuXHRyZXR1cm4gKCkgPT4gc3Vicy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xufSk7XG52YXIgY3JlYXRlTWVzc2FnZUlkID0gKCkgPT4gVVVJRHY0KCk7XG52YXIgbWFrZUludm9rZXIgPSAodHJhbnNwb3J0LCBoYW5kbGVyKSA9PiAoc3Vic2NyaWJlcikgPT4ge1xuXHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRyYW5zcG9ydCk7XG5cdGNvbnN0IHJlc3BvbmQgPSAocmVzdWx0LCB0cmFuc2ZlcikgPT4gc2VuZChyZXN1bHQsIHRyYW5zZmVyKTtcblx0cmV0dXJuIGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRyYW5zcG9ydCwgKGRhdGEpID0+IHtcblx0XHRpZiAoIXN1YnNjcmliZXIuYWN0aXZlKSByZXR1cm47XG5cdFx0aGFuZGxlciA/IGhhbmRsZXIoZGF0YSwgcmVzcG9uZCwgc3Vic2NyaWJlcikgOiBzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG5cdH0sIChlcnIpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyKSwgKCkgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpKTtcbn07XG52YXIgbWFrZVdvcmtlckludm9rZXIgPSAod29ya2VyLCBoYW5kbGVyKSA9PiBtYWtlSW52b2tlcih3b3JrZXIsIGhhbmRsZXIpO1xudmFyIG1ha2VNZXNzYWdlUG9ydEludm9rZXIgPSAocG9ydCwgaGFuZGxlcikgPT4gbWFrZUludm9rZXIocG9ydCwgaGFuZGxlcik7XG52YXIgbWFrZUJyb2FkY2FzdEludm9rZXIgPSAobmFtZSwgaGFuZGxlcikgPT4gbWFrZUludm9rZXIobmV3IEJyb2FkY2FzdENoYW5uZWwobmFtZSksIGhhbmRsZXIpO1xudmFyIG1ha2VXZWJTb2NrZXRJbnZva2VyID0gKHVybCwgcHJvdG9jb2xzLCBoYW5kbGVyKSA9PiBtYWtlSW52b2tlcihuZXcgV2ViU29ja2V0KHR5cGVvZiB1cmwgPT09IFwic3RyaW5nXCIgPyB1cmwgOiB1cmwuaHJlZiwgcHJvdG9jb2xzKSwgaGFuZGxlcik7XG52YXIgbWFrZUNocm9tZVJ1bnRpbWVJbnZva2VyID0gKGhhbmRsZXIpID0+IG1ha2VJbnZva2VyKFwiY2hyb21lLXJ1bnRpbWVcIiwgaGFuZGxlcik7XG52YXIgbWFrZVNlcnZpY2VXb3JrZXJDbGllbnRJbnZva2VyID0gKGhhbmRsZXIpID0+IG1ha2VJbnZva2VyKFwic2VydmljZS13b3JrZXItY2xpZW50XCIsIGhhbmRsZXIpO1xudmFyIG1ha2VTZXJ2aWNlV29ya2VySG9zdEludm9rZXIgPSAoaGFuZGxlcikgPT4gbWFrZUludm9rZXIoXCJzZXJ2aWNlLXdvcmtlci1ob3N0XCIsIGhhbmRsZXIpO1xudmFyIG1ha2VTZWxmSW52b2tlciA9IChoYW5kbGVyKSA9PiBtYWtlSW52b2tlcihcInNlbGZcIiwgaGFuZGxlcik7XG5mdW5jdGlvbiBjcmVhdGVCaWRpcmVjdGlvbmFsQ2hhbm5lbCh0cmFuc3BvcnQsIGNoYW5uZWxOYW1lLCBoYW5kbGVyKSB7XG5cdGNvbnN0IHNlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIodHJhbnNwb3J0KTtcblx0Y29uc3QgaW5ib3VuZCA9IG5ldyBPYnNlcnZhYmxlKChzdWIpID0+IG1ha2VJbnZva2VyKHRyYW5zcG9ydCwgaGFuZGxlcikoc3ViKSk7XG5cdHJldHVybiB7XG5cdFx0aW5ib3VuZCxcblx0XHRvdXRib3VuZDogeyBuZXh0OiBzZW5kIH0sXG5cdFx0c3Vic2NyaWJlOiAob2JzKSA9PiBpbmJvdW5kLnN1YnNjcmliZShvYnMpLFxuXHRcdHNlbmQ6ICh2YWx1ZSwgdHJhbnNmZXIpID0+IHNlbmQodmFsdWUsIHRyYW5zZmVyKVxuXHR9O1xufVxuZnVuY3Rpb24gd2hlbih0YXJnZXQsIGV2ZW50TmFtZSkge1xuXHRyZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRcdGNvbnN0IGggPSAoZSkgPT4gc3ViLmFjdGl2ZSAmJiBzdWIubmV4dChlKTtcblx0XHR0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGgpO1xuXHRcdHJldHVybiAoKSA9PiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGgpO1xuXHR9KTtcbn1cbnZhciBPYnNlcnZhYmxlRmFjdG9yeSA9IHtcblx0Y2hhbm5lbDogKHRyYW5zcG9ydCwgbmFtZSkgPT4gbmV3IENoYW5uZWxPYnNlcnZhYmxlKHRyYW5zcG9ydCwgbmFtZSksXG5cdGludm9rZXI6ICh0cmFuc3BvcnQsIG5hbWUsIGhhbmRsZXIpID0+IGNyZWF0ZUludm9rZXJPYnNlcnZhYmxlKHRyYW5zcG9ydCwgbmFtZSwgaGFuZGxlciksXG5cdGhhbmRsZXI6ICh0cmFuc3BvcnQsIG5hbWUpID0+IGNyZWF0ZUludm9rZXJPYnNlcnZhYmxlKHRyYW5zcG9ydCwgbmFtZSwgY3JlYXRlUmVmbGVjdEhhbmRsZXIobmFtZSkpLFxuXHRiaWRpcmVjdGlvbmFsOiBjcmVhdGVCaWRpcmVjdGlvbmFsQ2hhbm5lbCxcblx0ZnJvbUV2ZW50LFxuXHRmcm9tUHJvbWlzZSxcblx0ZGVsYXksXG5cdGludGVydmFsLFxuXHRtZXJnZSxcblx0d2hlblxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvcHJveHkvSW52b2tlci50c1xuZnVuY3Rpb24gZGV0ZWN0Q29udGV4dFR5cGUoKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5EZW5vICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJkZW5vXCI7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbFRoaXMucHJvY2Vzcz8udmVyc2lvbnM/Lm5vZGUpIHJldHVybiBcIm5vZGVcIjtcblx0Y29uc3Qgc2VydmljZVdvcmtlclNjb3BlID0gZ2xvYmFsVGhpcy5TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU7XG5cdGNvbnN0IHNoYXJlZFdvcmtlclNjb3BlID0gZ2xvYmFsVGhpcy5TaGFyZWRXb3JrZXJHbG9iYWxTY29wZTtcblx0Y29uc3QgZGVkaWNhdGVkV29ya2VyU2NvcGUgPSBnbG9iYWxUaGlzLkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlO1xuXHRpZiAoc2VydmljZVdvcmtlclNjb3BlICYmIHNlbGYgaW5zdGFuY2VvZiBzZXJ2aWNlV29ya2VyU2NvcGUpIHJldHVybiBcInNlcnZpY2Utd29ya2VyXCI7XG5cdGlmIChzaGFyZWRXb3JrZXJTY29wZSAmJiBzZWxmIGluc3RhbmNlb2Ygc2hhcmVkV29ya2VyU2NvcGUpIHJldHVybiBcInNoYXJlZC13b3JrZXJcIjtcblx0aWYgKGRlZGljYXRlZFdvcmtlclNjb3BlICYmIHNlbGYgaW5zdGFuY2VvZiBkZWRpY2F0ZWRXb3JrZXJTY29wZSkgcmV0dXJuIFwid29ya2VyXCI7XG5cdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lPy5pZCkge1xuXHRcdGlmICh0eXBlb2YgY2hyb21lLnJ1bnRpbWUuZ2V0QmFja2dyb3VuZFBhZ2UgPT09IFwiZnVuY3Rpb25cIiB8fCAoY2hyb21lLnJ1bnRpbWUuZ2V0TWFuaWZlc3Q/LigpPy5iYWNrZ3JvdW5kKT8uc2VydmljZV93b3JrZXIpIHJldHVybiBcImNocm9tZS1iYWNrZ3JvdW5kXCI7XG5cdFx0aWYgKHR5cGVvZiBjaHJvbWUuZGV2dG9vbHMgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcImNocm9tZS1kZXZ0b29sc1wiO1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsVGhpcz8ubG9jYXRpb24/LnByb3RvY29sID09PSBcImNocm9tZS1leHRlbnNpb246XCIpIHtcblx0XHRcdGlmICgoY2hyb21lLmV4dGVuc2lvbj8uZ2V0Vmlld3M/Lih7IHR5cGU6IFwicG9wdXBcIiB9KSA/PyBbXSkuaW5jbHVkZXMoZ2xvYmFsVGhpcykpIHJldHVybiBcImNocm9tZS1wb3B1cFwiO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbFRoaXM/LmxvY2F0aW9uPy5wcm90b2NvbCAhPT0gXCJjaHJvbWUtZXh0ZW5zaW9uOlwiKSByZXR1cm4gXCJjaHJvbWUtY29udGVudFwiO1xuXHR9XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcIndpbmRvd1wiO1xuXHRyZXR1cm4gXCJ1bmtub3duXCI7XG59XG5mdW5jdGlvbiBkZXRlY3RUcmFuc3BvcnRUeXBlKHNvdXJjZSkge1xuXHRpZiAodHlwZW9mIFJUQ0RhdGFDaGFubmVsICE9PSBcInVuZGVmaW5lZFwiICYmIHNvdXJjZSBpbnN0YW5jZW9mIFJUQ0RhdGFDaGFubmVsKSByZXR1cm4gXCJydGMtZGF0YVwiO1xuXHRjb25zdCBkZXRlY3RlZCA9IGRldGVjdFRyYW5zcG9ydFR5cGUkMShzb3VyY2UpO1xuXHRpZiAoZGV0ZWN0ZWQgJiYgZGV0ZWN0ZWQgIT09IFwiaW50ZXJuYWxcIikgcmV0dXJuIGRldGVjdGVkO1xuXHRpZiAoc291cmNlID09PSBzZWxmIHx8IHNvdXJjZSA9PT0gZ2xvYmFsVGhpcyB8fCBzb3VyY2UgPT09IFwic2VsZlwiKSByZXR1cm4gXCJzZWxmXCI7XG5cdHJldHVybiBcImludGVybmFsXCI7XG59XG5mdW5jdGlvbiBkZXRlY3RJbmNvbWluZ0NvbnRleHRUeXBlKGRhdGEpIHtcblx0aWYgKCFkYXRhKSByZXR1cm4gXCJ1bmtub3duXCI7XG5cdGlmIChkYXRhLmNvbnRleHRUeXBlKSByZXR1cm4gZGF0YS5jb250ZXh0VHlwZTtcblx0Y29uc3Qgc2VuZGVyID0gZGF0YS5zZW5kZXIgPz8gXCJcIjtcblx0aWYgKHNlbmRlci5pbmNsdWRlcyhcIndvcmtlclwiKSkgcmV0dXJuIFwid29ya2VyXCI7XG5cdGlmIChzZW5kZXIuaW5jbHVkZXMoXCJzd1wiKSB8fCBzZW5kZXIuaW5jbHVkZXMoXCJzZXJ2aWNlXCIpKSByZXR1cm4gXCJzZXJ2aWNlLXdvcmtlclwiO1xuXHRpZiAoc2VuZGVyLmluY2x1ZGVzKFwiY2hyb21lXCIpIHx8IHNlbmRlci5pbmNsdWRlcyhcImNyeFwiKSkgcmV0dXJuIFwiY2hyb21lLWNvbnRlbnRcIjtcblx0aWYgKHNlbmRlci5pbmNsdWRlcyhcImJhY2tncm91bmRcIikpIHJldHVybiBcImNocm9tZS1iYWNrZ3JvdW5kXCI7XG5cdHJldHVybiBcInVua25vd25cIjtcbn1cbnZhciBEZWZhdWx0UmVmbGVjdCA9IHtcblx0Z2V0OiAodGFyZ2V0LCBwcm9wKSA9PiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3ApLFxuXHRzZXQ6ICh0YXJnZXQsIHByb3AsIHZhbHVlKSA9PiBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3AsIHZhbHVlKSxcblx0aGFzOiAodGFyZ2V0LCBwcm9wKSA9PiBSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3ApLFxuXHRhcHBseTogKHRhcmdldCwgdGhpc0FyZywgYXJncykgPT4gUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmcsIGFyZ3MpLFxuXHRjb25zdHJ1Y3Q6ICh0YXJnZXQsIGFyZ3MpID0+IFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJncyksXG5cdGRlbGV0ZVByb3BlcnR5OiAodGFyZ2V0LCBwcm9wKSA9PiBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCksXG5cdG93bktleXM6ICh0YXJnZXQpID0+IFJlZmxlY3Qub3duS2V5cyh0YXJnZXQpLFxuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICh0YXJnZXQsIHByb3ApID0+IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcCksXG5cdGdldFByb3RvdHlwZU9mOiAodGFyZ2V0KSA9PiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCksXG5cdHNldFByb3RvdHlwZU9mOiAodGFyZ2V0LCBwcm90bykgPT4gUmVmbGVjdC5zZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSxcblx0aXNFeHRlbnNpYmxlOiAodGFyZ2V0KSA9PiBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpLFxuXHRwcmV2ZW50RXh0ZW5zaW9uczogKHRhcmdldCkgPT4gUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG59O1xudmFyIFJlcXVlc3RvciA9IGNsYXNzIHtcblx0X2NoYW5uZWw7XG5cdF9jb250ZXh0VHlwZTtcblx0Y29uc3RydWN0b3IoY29uZmlnKSB7XG5cdFx0dGhpcy5fY29udGV4dFR5cGUgPSBjb25maWcuYXV0b0RldGVjdCAhPT0gZmFsc2UgPyBkZXRlY3RDb250ZXh0VHlwZSgpIDogXCJ1bmtub3duXCI7XG5cdFx0dGhpcy5fY2hhbm5lbCA9IGNyZWF0ZVVuaWZpZWRDaGFubmVsKHtcblx0XHRcdG5hbWU6IGNvbmZpZy5jaGFubmVsLFxuXHRcdFx0dGltZW91dDogY29uZmlnLnRpbWVvdXQsXG5cdFx0XHRhdXRvTGlzdGVuOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cdGNvbm5lY3QodGFyZ2V0LCBvcHRpb25zKSB7XG5cdFx0dGhpcy5fY2hhbm5lbC5jb25uZWN0KHRhcmdldCwgb3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0aW52b2tlKHRhcmdldENoYW5uZWwsIGFjdGlvbiwgcGF0aCwgYXJncyA9IFtdKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuaW52b2tlKHRhcmdldENoYW5uZWwsIGFjdGlvbiwgcGF0aCwgYXJncyk7XG5cdH1cblx0Z2V0KHRhcmdldENoYW5uZWwsIHBhdGgsIHByb3ApIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbC5nZXQodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgcHJvcCk7XG5cdH1cblx0c2V0KHRhcmdldENoYW5uZWwsIHBhdGgsIHByb3AsIHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuc2V0KHRhcmdldENoYW5uZWwsIHBhdGgsIHByb3AsIHZhbHVlKTtcblx0fVxuXHRjYWxsKHRhcmdldENoYW5uZWwsIHBhdGgsIGFyZ3MgPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsLmNhbGwodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgYXJncyk7XG5cdH1cblx0Y29uc3RydWN0KHRhcmdldENoYW5uZWwsIHBhdGgsIGFyZ3MgPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsLmNvbnN0cnVjdCh0YXJnZXRDaGFubmVsLCBwYXRoLCBhcmdzKTtcblx0fVxuXHRpbXBvcnRNb2R1bGUodGFyZ2V0Q2hhbm5lbCwgdXJsKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuaW1wb3J0KHVybCwgdGFyZ2V0Q2hhbm5lbCk7XG5cdH1cblx0Y3JlYXRlUHJveHkodGFyZ2V0Q2hhbm5lbCwgYmFzZVBhdGggPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsLnByb3h5KHRhcmdldENoYW5uZWwsIGJhc2VQYXRoKTtcblx0fVxuXHRnZXQgb25SZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbC5vblJlc3BvbnNlO1xuXHR9XG5cdGdldCBjb250ZXh0VHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dFR5cGU7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fY2hhbm5lbC5jbG9zZSgpO1xuXHR9XG59O1xudmFyIFJlc3BvbmRlciA9IGNsYXNzIHtcblx0X2NoYW5uZWw7XG5cdF9jb250ZXh0VHlwZTtcblx0Y29uc3RydWN0b3IoY29uZmlnKSB7XG5cdFx0dGhpcy5fY29udGV4dFR5cGUgPSBjb25maWcuYXV0b0RldGVjdCAhPT0gZmFsc2UgPyBkZXRlY3RDb250ZXh0VHlwZSgpIDogXCJ1bmtub3duXCI7XG5cdFx0dGhpcy5fY2hhbm5lbCA9IGNyZWF0ZVVuaWZpZWRDaGFubmVsKHtcblx0XHRcdG5hbWU6IGNvbmZpZy5jaGFubmVsLFxuXHRcdFx0dGltZW91dDogY29uZmlnLnRpbWVvdXQsXG5cdFx0XHRhdXRvTGlzdGVuOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cdGxpc3Rlbihzb3VyY2UsIG9wdGlvbnMpIHtcblx0XHR0aGlzLl9jaGFubmVsLmxpc3Rlbihzb3VyY2UsIG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGV4cG9zZShuYW1lLCBvYmopIHtcblx0XHR0aGlzLl9jaGFubmVsLmV4cG9zZShuYW1lLCBvYmopO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGdldCBvbkludm9jYXRpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwub25JbnZvY2F0aW9uO1xuXHR9XG5cdHN1YnNjcmliZUludm9jYXRpb25zKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbC5vbkludm9jYXRpb24uc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdGdldCBjb250ZXh0VHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dFR5cGU7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fY2hhbm5lbC5jbG9zZSgpO1xuXHR9XG59O1xudmFyIEJpZGlyZWN0aW9uYWxJbnZva2VyID0gY2xhc3Mge1xuXHRyZXF1ZXN0b3I7XG5cdHJlc3BvbmRlcjtcblx0X2NvbnRleHRUeXBlO1xuXHRjb25zdHJ1Y3Rvcihjb25maWcpIHtcblx0XHR0aGlzLl9jb250ZXh0VHlwZSA9IGNvbmZpZy5hdXRvRGV0ZWN0ICE9PSBmYWxzZSA/IGRldGVjdENvbnRleHRUeXBlKCkgOiBcInVua25vd25cIjtcblx0XHR0aGlzLnJlcXVlc3RvciA9IG5ldyBSZXF1ZXN0b3IoY29uZmlnKTtcblx0XHR0aGlzLnJlc3BvbmRlciA9IG5ldyBSZXNwb25kZXIoY29uZmlnKTtcblx0fVxuXHRjb25uZWN0KHRhcmdldCkge1xuXHRcdHRoaXMucmVxdWVzdG9yLmNvbm5lY3QodGFyZ2V0KTtcblx0XHR0aGlzLnJlc3BvbmRlci5saXN0ZW4odGFyZ2V0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRleHBvc2UobmFtZSwgb2JqKSB7XG5cdFx0dGhpcy5yZXNwb25kZXIuZXhwb3NlKG5hbWUsIG9iaik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0Y3JlYXRlUHJveHkodGFyZ2V0Q2hhbm5lbCwgYmFzZVBhdGggPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLnJlcXVlc3Rvci5jcmVhdGVQcm94eSh0YXJnZXRDaGFubmVsLCBiYXNlUGF0aCk7XG5cdH1cblx0aW1wb3J0TW9kdWxlKHRhcmdldENoYW5uZWwsIHVybCkge1xuXHRcdHJldHVybiB0aGlzLnJlcXVlc3Rvci5pbXBvcnRNb2R1bGUodGFyZ2V0Q2hhbm5lbCwgdXJsKTtcblx0fVxuXHRnZXQgY29udGV4dFR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHRUeXBlO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMucmVxdWVzdG9yLmNsb3NlKCk7XG5cdFx0dGhpcy5yZXNwb25kZXIuY2xvc2UoKTtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RvcihjaGFubmVsLCBjb25maWcpIHtcblx0cmV0dXJuIG5ldyBSZXF1ZXN0b3Ioe1xuXHRcdGNoYW5uZWwsXG5cdFx0Li4uY29uZmlnXG5cdH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlUmVzcG9uZGVyKGNoYW5uZWwsIGNvbmZpZykge1xuXHRyZXR1cm4gbmV3IFJlc3BvbmRlcih7XG5cdFx0Y2hhbm5lbCxcblx0XHQuLi5jb25maWdcblx0fSk7XG59XG5mdW5jdGlvbiBjcmVhdGVJbnZva2VyKGNoYW5uZWwsIGNvbmZpZykge1xuXHRyZXR1cm4gbmV3IEJpZGlyZWN0aW9uYWxJbnZva2VyKHtcblx0XHRjaGFubmVsLFxuXHRcdC4uLmNvbmZpZ1xuXHR9KTtcbn1cbmZ1bmN0aW9uIHNldHVwSW52b2tlcihjaGFubmVsLCB0YXJnZXQsIGNvbmZpZykge1xuXHRyZXR1cm4gY3JlYXRlSW52b2tlcihjaGFubmVsLCBjb25maWcpLmNvbm5lY3QodGFyZ2V0KTtcbn1cbmZ1bmN0aW9uIGF1dG9JbnZva2VyKGNoYW5uZWwsIGNvbmZpZykge1xuXHRjb25zdCBpbnZva2VyID0gY3JlYXRlSW52b2tlcihjaGFubmVsLCB7XG5cdFx0YXV0b0RldGVjdDogdHJ1ZSxcblx0XHQuLi5jb25maWdcblx0fSk7XG5cdHN3aXRjaCAoZGV0ZWN0Q29udGV4dFR5cGUoKSkge1xuXHRcdGNhc2UgXCJ3b3JrZXJcIjpcblx0XHRjYXNlIFwic2VydmljZS13b3JrZXJcIjpcblx0XHRjYXNlIFwic2hhcmVkLXdvcmtlclwiOlxuXHRcdFx0aW52b2tlci5jb25uZWN0KHNlbGYpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImNocm9tZS1jb250ZW50XCI6XG5cdFx0Y2FzZSBcImNocm9tZS1iYWNrZ3JvdW5kXCI6XG5cdFx0Y2FzZSBcImNocm9tZS1wb3B1cFwiOiBpbnZva2VyLmNvbm5lY3QoXCJjaHJvbWUtcnVudGltZVwiKTtcblx0fVxuXHRyZXR1cm4gaW52b2tlcjtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvcHJveHkvUHJveHkudHNcbnZhciBQUk9YWV9NQVJLRVIgPSBTeW1ib2wuZm9yKFwidW5pZm9ybS5wcm94eVwiKTtcbnZhciBQUk9YWV9JTlRFUk5BTFMgPSBTeW1ib2wuZm9yKFwidW5pZm9ybS5wcm94eS5pbnRlcm5hbHNcIik7XG52YXIgUmVtb3RlUHJveHlIYW5kbGVyID0gY2xhc3Mge1xuXHRfaW52b2tlcjtcblx0X2NvbmZpZztcblx0X2NoaWxkQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjb25zdHJ1Y3RvcihfaW52b2tlciwgY29uZmlnKSB7XG5cdFx0dGhpcy5faW52b2tlciA9IF9pbnZva2VyO1xuXHRcdHRoaXMuX2NvbmZpZyA9IHtcblx0XHRcdGNoYW5uZWw6IGNvbmZpZy5jaGFubmVsLFxuXHRcdFx0YmFzZVBhdGg6IGNvbmZpZy5iYXNlUGF0aCA/PyBbXSxcblx0XHRcdGludm9rZXI6IF9pbnZva2VyLFxuXHRcdFx0Y2FjaGU6IGNvbmZpZy5jYWNoZSA/PyB0cnVlLFxuXHRcdFx0dGltZW91dDogY29uZmlnLnRpbWVvdXQgPz8gM2U0XG5cdFx0fTtcblx0fVxuXHRnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuXHRcdGNvbnN0IHByb3BTdHIgPSBTdHJpbmcocHJvcCk7XG5cdFx0aWYgKHByb3AgPT09IFBST1hZX01BUktFUikgcmV0dXJuIHRydWU7XG5cdFx0aWYgKHByb3AgPT09IFBST1hZX0lOVEVSTkFMUykgcmV0dXJuIHRoaXMuX2NvbmZpZztcblx0XHRpZiAocHJvcCA9PT0gJHJlcXVlc3RIYW5kbGVyKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAocHJvcCA9PT0gJGRlc2NyaXB0b3IpIHJldHVybiB0aGlzLl9nZXREZXNjcmlwdG9yKCk7XG5cdFx0aWYgKHByb3AgPT09IFwidGhlblwiIHx8IHByb3AgPT09IFwiY2F0Y2hcIiB8fCBwcm9wID09PSBcImZpbmFsbHlcIikgcmV0dXJuIHZvaWQgMDtcblx0XHRpZiAodHlwZW9mIHByb3AgPT09IFwic3ltYm9sXCIpIHJldHVybiB2b2lkIDA7XG5cdFx0aWYgKHByb3AgPT09IFwiJHBhdGhcIikgcmV0dXJuIHRoaXMuX2NvbmZpZy5iYXNlUGF0aDtcblx0XHRpZiAocHJvcCA9PT0gXCIkY2hhbm5lbFwiKSByZXR1cm4gdGhpcy5fY29uZmlnLmNoYW5uZWw7XG5cdFx0aWYgKHByb3AgPT09IFwiJGRlc2NyaXB0b3JcIikgcmV0dXJuIHRoaXMuX2dldERlc2NyaXB0b3IoKTtcblx0XHRpZiAocHJvcCA9PT0gXCIkaW52b2tlXCIpIHJldHVybiB0aGlzLl9pbnZva2VyO1xuXHRcdGNvbnN0IGNoaWxkUGF0aCA9IFsuLi50aGlzLl9jb25maWcuYmFzZVBhdGgsIHByb3BTdHJdO1xuXHRcdGlmICh0aGlzLl9jb25maWcuY2FjaGUgJiYgdGhpcy5fY2hpbGRDYWNoZS5oYXMocHJvcFN0cikpIHJldHVybiB0aGlzLl9jaGlsZENhY2hlLmdldChwcm9wU3RyKTtcblx0XHRjb25zdCBjaGlsZFByb3h5ID0gY3JlYXRlUmVtb3RlUHJveHkodGhpcy5faW52b2tlciwge1xuXHRcdFx0Li4udGhpcy5fY29uZmlnLFxuXHRcdFx0YmFzZVBhdGg6IGNoaWxkUGF0aFxuXHRcdH0pO1xuXHRcdGlmICh0aGlzLl9jb25maWcuY2FjaGUpIHRoaXMuX2NoaWxkQ2FjaGUuc2V0KHByb3BTdHIsIGNoaWxkUHJveHkpO1xuXHRcdHJldHVybiBjaGlsZFByb3h5O1xuXHR9XG5cdHNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcikge1xuXHRcdGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIHRydWU7XG5cdFx0dGhpcy5faW52b2tlcihXUmVmbGVjdEFjdGlvbi5TRVQsIFsuLi50aGlzLl9jb25maWcuYmFzZVBhdGgsIFN0cmluZyhwcm9wKV0sIFt2YWx1ZV0pO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGFwcGx5KHRhcmdldCwgdGhpc0FyZywgYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9pbnZva2VyKFdSZWZsZWN0QWN0aW9uLkFQUExZLCB0aGlzLl9jb25maWcuYmFzZVBhdGgsIFthcmdzXSk7XG5cdH1cblx0Y29uc3RydWN0KHRhcmdldCwgYXJncywgbmV3VGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ludm9rZXIoV1JlZmxlY3RBY3Rpb24uQ09OU1RSVUNULCB0aGlzLl9jb25maWcuYmFzZVBhdGgsIFthcmdzXSk7XG5cdH1cblx0aGFzKHRhcmdldCwgcHJvcCkge1xuXHRcdGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0aGlzLl9pbnZva2VyKFdSZWZsZWN0QWN0aW9uLkhBUywgdGhpcy5fY29uZmlnLmJhc2VQYXRoLCBbcHJvcF0pO1xuXHR9XG5cdGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCkge1xuXHRcdGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIHRydWU7XG5cdFx0cmV0dXJuIHRoaXMuX2ludm9rZXIoV1JlZmxlY3RBY3Rpb24uREVMRVRFX1BST1BFUlRZLCBbLi4udGhpcy5fY29uZmlnLmJhc2VQYXRoLCBTdHJpbmcocHJvcCldLCBbXSk7XG5cdH1cblx0b3duS2V5cyh0YXJnZXQpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9O1xuXHR9XG5cdGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuXHRcdHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGU7XG5cdH1cblx0c2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuXHRcdHJldHVybiB0aGlzLl9pbnZva2VyKFdSZWZsZWN0QWN0aW9uLlNFVF9QUk9UT1RZUEVfT0YsIHRoaXMuX2NvbmZpZy5iYXNlUGF0aCwgW3Byb3RvXSk7XG5cdH1cblx0aXNFeHRlbnNpYmxlKHRhcmdldCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnZva2VyKFdSZWZsZWN0QWN0aW9uLlBSRVZFTlRfRVhURU5TSU9OUywgdGhpcy5fY29uZmlnLmJhc2VQYXRoLCBbXSk7XG5cdH1cblx0X2dldERlc2NyaXB0b3IoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhdGg6IHRoaXMuX2NvbmZpZy5iYXNlUGF0aCxcblx0XHRcdGNoYW5uZWw6IHRoaXMuX2NvbmZpZy5jaGFubmVsLFxuXHRcdFx0cHJpbWl0aXZlOiBmYWxzZVxuXHRcdH07XG5cdH1cbn07XG52YXIgRGlzcGF0Y2hQcm94eUhhbmRsZXIgPSBjbGFzcyB7XG5cdF9kaXNwYXRjaDtcblx0Y29uc3RydWN0b3IoX2Rpc3BhdGNoKSB7XG5cdFx0dGhpcy5fZGlzcGF0Y2ggPSBfZGlzcGF0Y2g7XG5cdH1cblx0Z2V0KC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uR0VULCBhcmdzKTtcblx0fVxuXHRzZXQoLi4uYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9kaXNwYXRjaChXUmVmbGVjdEFjdGlvbi5TRVQsIGFyZ3MpO1xuXHR9XG5cdGhhcyguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLkhBUywgYXJncyk7XG5cdH1cblx0ZGVsZXRlUHJvcGVydHkoLi4uYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9kaXNwYXRjaChXUmVmbGVjdEFjdGlvbi5ERUxFVEVfUFJPUEVSVFksIGFyZ3MpO1xuXHR9XG5cdGdldE93blByb3BlcnR5RGVzY3JpcHRvciguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLkdFVF9PV05fUFJPUEVSVFlfREVTQ1JJUFRPUiwgYXJncyk7XG5cdH1cblx0Z2V0UHJvdG90eXBlT2YoLi4uYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9kaXNwYXRjaChXUmVmbGVjdEFjdGlvbi5HRVRfUFJPVE9UWVBFX09GLCBhcmdzKTtcblx0fVxuXHRzZXRQcm90b3R5cGVPZiguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLlNFVF9QUk9UT1RZUEVfT0YsIGFyZ3MpO1xuXHR9XG5cdGlzRXh0ZW5zaWJsZSguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLklTX0VYVEVOU0lCTEUsIGFyZ3MpO1xuXHR9XG5cdHByZXZlbnRFeHRlbnNpb25zKC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uUFJFVkVOVF9FWFRFTlNJT05TLCBhcmdzKTtcblx0fVxuXHRvd25LZXlzKC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uT1dOX0tFWVMsIGFyZ3MpID8/IFtdO1xuXHR9XG5cdGFwcGx5KC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uQVBQTFksIGFyZ3MpO1xuXHR9XG5cdGNvbnN0cnVjdCguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLkNPTlNUUlVDVCwgYXJncyk7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVSZW1vdGVQcm94eShpbnZva2VyLCBjb25maWcpIHtcblx0Y29uc3QgZm4gPSBmdW5jdGlvbigpIHt9O1xuXHRjb25zdCBoYW5kbGVyID0gbmV3IFJlbW90ZVByb3h5SGFuZGxlcihpbnZva2VyLCBjb25maWcpO1xuXHRyZXR1cm4gbmV3IFByb3h5KGZuLCBoYW5kbGVyKTtcbn1cbmZ1bmN0aW9uIHdyYXBEZXNjcmlwdG9yKGRlc2NyaXB0b3IsIGludm9rZXIsIHRhcmdldENoYW5uZWwpIHtcblx0aWYgKCFkZXNjcmlwdG9yIHx8IHR5cGVvZiBkZXNjcmlwdG9yICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZGVzY3JpcHRvcjtcblx0aWYgKGRlc2NyaXB0b3IucHJpbWl0aXZlKSByZXR1cm4gZGVzY3JpcHRvcjtcblx0Y29uc3QgY2FjaGVkID0gZGVzY01hcC5nZXQoZGVzY3JpcHRvcik7XG5cdGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cdGNvbnN0IHByb3h5ID0gY3JlYXRlUmVtb3RlUHJveHkoaW52b2tlciwge1xuXHRcdGNoYW5uZWw6IHRhcmdldENoYW5uZWwgPz8gZGVzY3JpcHRvci5jaGFubmVsID8/IFwidW5rbm93blwiLFxuXHRcdGJhc2VQYXRoOiBkZXNjcmlwdG9yLnBhdGggPz8gW11cblx0fSk7XG5cdGRlc2NNYXAuc2V0KGRlc2NyaXB0b3IsIHByb3h5KTtcblx0d3JhcE1hcC5zZXQocHJveHksIGRlc2NyaXB0b3IpO1xuXHRyZXR1cm4gcHJveHk7XG59XG5mdW5jdGlvbiBpc1JlbW90ZVByb3h5KHZhbHVlKSB7XG5cdGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGZhbHNlO1xuXHR0cnkge1xuXHRcdHJldHVybiBSZWZsZWN0LmdldCh2YWx1ZSwgUFJPWFlfTUFSS0VSKSA9PT0gdHJ1ZTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5mdW5jdGlvbiBnZXRQcm94eURlc2NyaXB0b3IodmFsdWUpIHtcblx0aWYgKCFpc1JlbW90ZVByb3h5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG5cdHJldHVybiB2YWx1ZS4kZGVzY3JpcHRvciA/PyBudWxsO1xufVxuZnVuY3Rpb24gZ2V0UHJveHlJbnRlcm5hbHModmFsdWUpIHtcblx0aWYgKCFpc1JlbW90ZVByb3h5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG5cdHRyeSB7XG5cdFx0Y29uc3QgaW50ZXJuYWxzID0gUmVmbGVjdC5nZXQodmFsdWUsIFBST1hZX0lOVEVSTkFMUyk7XG5cdFx0aWYgKCFpbnRlcm5hbHMgfHwgdHlwZW9mIGludGVybmFscyAhPT0gXCJvYmplY3RcIikgcmV0dXJuIG51bGw7XG5cdFx0cmV0dXJuIGludGVybmFscztcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUV4cG9zZUhhbmRsZXIodGFyZ2V0LCByZWZsZWN0KSB7XG5cdHJldHVybiBjcmVhdGVPYmplY3RIYW5kbGVyKHRhcmdldCwgcmVmbGVjdCk7XG59XG5mdW5jdGlvbiBjcmVhdGVTZW5kZXJQcm94eShzZW5kZXIsIGJhc2VQYXRoID0gW10pIHtcblx0Y29uc3QgaW52b2tlciA9IChhY3Rpb24sIHBhdGgsIGFyZ3MpID0+IHtcblx0XHRyZXR1cm4gc2VuZGVyLnJlcXVlc3Qoe1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogc2VuZGVyLmNoYW5uZWxOYW1lLFxuXHRcdFx0c2VuZGVyOiBzZW5kZXIuc2VuZGVySWQgPz8gXCJwcm94eVwiLFxuXHRcdFx0dHlwZTogXCJyZXF1ZXN0XCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdGFjdGlvbixcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0YXJnc1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9O1xuXHRyZXR1cm4gY3JlYXRlUmVtb3RlUHJveHkoaW52b2tlciwge1xuXHRcdGNoYW5uZWw6IHNlbmRlci5jaGFubmVsTmFtZSxcblx0XHRiYXNlUGF0aFxuXHR9KTtcbn1cbnZhciBQcm94eUJ1aWxkZXIgPSBjbGFzcyB7XG5cdF9jb25maWcgPSB7fTtcblx0X2ludm9rZXIgPSBudWxsO1xuXHRjaGFubmVsKG5hbWUpIHtcblx0XHR0aGlzLl9jb25maWcuY2hhbm5lbCA9IG5hbWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0cGF0aChiYXNlUGF0aCkge1xuXHRcdHRoaXMuX2NvbmZpZy5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGludm9rZXIoZm4pIHtcblx0XHR0aGlzLl9pbnZva2VyID0gZm47XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0dGltZW91dChtcykge1xuXHRcdHRoaXMuX2NvbmZpZy50aW1lb3V0ID0gbXM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0Y2FjaGUoZW5hYmxlZCkge1xuXHRcdHRoaXMuX2NvbmZpZy5jYWNoZSA9IGVuYWJsZWQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0YnVpbGQoKSB7XG5cdFx0aWYgKCF0aGlzLl9pbnZva2VyKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZva2VyIGlzIHJlcXVpcmVkLiBDYWxsIC5pbnZva2VyKCkgYmVmb3JlIC5idWlsZCgpXCIpO1xuXHRcdGlmICghdGhpcy5fY29uZmlnLmNoYW5uZWwpIHRocm93IG5ldyBFcnJvcihcIkNoYW5uZWwgaXMgcmVxdWlyZWQuIENhbGwgLmNoYW5uZWwoKSBiZWZvcmUgLmJ1aWxkKClcIik7XG5cdFx0cmV0dXJuIGNyZWF0ZVJlbW90ZVByb3h5KHRoaXMuX2ludm9rZXIsIHRoaXMuX2NvbmZpZyk7XG5cdH1cbn07XG5mdW5jdGlvbiBwcm94eUJ1aWxkZXIoKSB7XG5cdHJldHVybiBuZXcgUHJveHlCdWlsZGVyKCk7XG59XG52YXIgbWFrZVJlcXVlc3RQcm94eSA9IHdyYXBEZXNjcmlwdG9yO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9jaGFubmVsL2ludGVybmFsL0Nvbm5lY3Rpb25Nb2RlbC50c1xuZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGlvbktleShwYXJhbXMpIHtcblx0cmV0dXJuIFtcblx0XHRwYXJhbXMubG9jYWxDaGFubmVsLFxuXHRcdHBhcmFtcy5yZW1vdGVDaGFubmVsLFxuXHRcdHBhcmFtcy5zZW5kZXIsXG5cdFx0cGFyYW1zLnRyYW5zcG9ydFR5cGUsXG5cdFx0cGFyYW1zLmRpcmVjdGlvblxuXHRdLmpvaW4oXCI6OlwiKTtcbn1cbmZ1bmN0aW9uIHF1ZXJ5Q29ubmVjdGlvbnMoY29ubmVjdGlvbnMsIHF1ZXJ5ID0ge30pIHtcblx0Y29uc3QgaW5jbHVkZUNsb3NlZCA9IHF1ZXJ5LmluY2x1ZGVDbG9zZWQgPz8gZmFsc2U7XG5cdGNvbnN0IGRlc2lyZWRTdGF0dXMgPSBxdWVyeS5zdGF0dXMgPz8gKGluY2x1ZGVDbG9zZWQgPyB2b2lkIDAgOiBcImFjdGl2ZVwiKTtcblx0cmV0dXJuIFsuLi5jb25uZWN0aW9uc10uZmlsdGVyKChjb25uZWN0aW9uKSA9PiB7XG5cdFx0aWYgKGRlc2lyZWRTdGF0dXMgJiYgY29ubmVjdGlvbi5zdGF0dXMgIT09IGRlc2lyZWRTdGF0dXMpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkuY2hhbm5lbCAmJiBjb25uZWN0aW9uLmxvY2FsQ2hhbm5lbCAhPT0gcXVlcnkuY2hhbm5lbCAmJiBjb25uZWN0aW9uLnJlbW90ZUNoYW5uZWwgIT09IHF1ZXJ5LmNoYW5uZWwpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkubG9jYWxDaGFubmVsICYmIGNvbm5lY3Rpb24ubG9jYWxDaGFubmVsICE9PSBxdWVyeS5sb2NhbENoYW5uZWwpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkucmVtb3RlQ2hhbm5lbCAmJiBjb25uZWN0aW9uLnJlbW90ZUNoYW5uZWwgIT09IHF1ZXJ5LnJlbW90ZUNoYW5uZWwpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkuc2VuZGVyICYmIGNvbm5lY3Rpb24uc2VuZGVyICE9PSBxdWVyeS5zZW5kZXIpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkudHJhbnNwb3J0VHlwZSAmJiBjb25uZWN0aW9uLnRyYW5zcG9ydFR5cGUgIT09IHF1ZXJ5LnRyYW5zcG9ydFR5cGUpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkuZGlyZWN0aW9uICYmIGNvbm5lY3Rpb24uZGlyZWN0aW9uICE9PSBxdWVyeS5kaXJlY3Rpb24pIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSkuc29ydCgoYSwgYikgPT4gYi51cGRhdGVkQXQgLSBhLnVwZGF0ZWRBdCk7XG59XG52YXIgQ29ubmVjdGlvblJlZ2lzdHJ5ID0gY2xhc3Mge1xuXHRfY3JlYXRlSWQ7XG5cdF9lbWl0RXZlbnQ7XG5cdF9jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0cnVjdG9yKF9jcmVhdGVJZCwgX2VtaXRFdmVudCkge1xuXHRcdHRoaXMuX2NyZWF0ZUlkID0gX2NyZWF0ZUlkO1xuXHRcdHRoaXMuX2VtaXRFdmVudCA9IF9lbWl0RXZlbnQ7XG5cdH1cblx0cmVnaXN0ZXIocGFyYW1zKSB7XG5cdFx0Y29uc3Qga2V5ID0gY3JlYXRlQ29ubmVjdGlvbktleShwYXJhbXMpO1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0Y29uc3QgZXhpc3RpbmcgPSB0aGlzLl9jb25uZWN0aW9ucy5nZXQoa2V5KTtcblx0XHRpZiAoZXhpc3RpbmcpIHtcblx0XHRcdGV4aXN0aW5nLnVwZGF0ZWRBdCA9IG5vdztcblx0XHRcdGV4aXN0aW5nLnN0YXR1cyA9IFwiYWN0aXZlXCI7XG5cdFx0XHRleGlzdGluZy5tZXRhZGF0YSA9IHtcblx0XHRcdFx0Li4uZXhpc3RpbmcubWV0YWRhdGEsXG5cdFx0XHRcdC4uLnBhcmFtcy5tZXRhZGF0YVxuXHRcdFx0fTtcblx0XHRcdHJldHVybiBleGlzdGluZztcblx0XHR9XG5cdFx0Y29uc3QgY29ubmVjdGlvbiA9IHtcblx0XHRcdGlkOiB0aGlzLl9jcmVhdGVJZCgpLFxuXHRcdFx0bG9jYWxDaGFubmVsOiBwYXJhbXMubG9jYWxDaGFubmVsLFxuXHRcdFx0cmVtb3RlQ2hhbm5lbDogcGFyYW1zLnJlbW90ZUNoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHBhcmFtcy5zZW5kZXIsXG5cdFx0XHR0cmFuc3BvcnRUeXBlOiBwYXJhbXMudHJhbnNwb3J0VHlwZSxcblx0XHRcdGRpcmVjdGlvbjogcGFyYW1zLmRpcmVjdGlvbixcblx0XHRcdHN0YXR1czogXCJhY3RpdmVcIixcblx0XHRcdGNyZWF0ZWRBdDogbm93LFxuXHRcdFx0dXBkYXRlZEF0OiBub3csXG5cdFx0XHRtZXRhZGF0YTogcGFyYW1zLm1ldGFkYXRhXG5cdFx0fTtcblx0XHR0aGlzLl9jb25uZWN0aW9ucy5zZXQoa2V5LCBjb25uZWN0aW9uKTtcblx0XHR0aGlzLl9lbWl0RXZlbnQ/Lih7XG5cdFx0XHR0eXBlOiBcImNvbm5lY3RlZFwiLFxuXHRcdFx0Y29ubmVjdGlvbixcblx0XHRcdHRpbWVzdGFtcDogbm93XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGNvbm5lY3Rpb247XG5cdH1cblx0bWFya05vdGlmaWVkKGNvbm5lY3Rpb24sIHBheWxvYWQpIHtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGNvbm5lY3Rpb24ubGFzdE5vdGlmeUF0ID0gbm93O1xuXHRcdGNvbm5lY3Rpb24udXBkYXRlZEF0ID0gbm93O1xuXHRcdHRoaXMuX2VtaXRFdmVudD8uKHtcblx0XHRcdHR5cGU6IFwibm90aWZpZWRcIixcblx0XHRcdGNvbm5lY3Rpb24sXG5cdFx0XHR0aW1lc3RhbXA6IG5vdyxcblx0XHRcdHBheWxvYWRcblx0XHR9KTtcblx0fVxuXHRjbG9zZUJ5Q2hhbm5lbChjaGFubmVsKSB7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgdGhpcy5fY29ubmVjdGlvbnMudmFsdWVzKCkpIHtcblx0XHRcdGlmIChjb25uZWN0aW9uLmxvY2FsQ2hhbm5lbCAhPT0gY2hhbm5lbCAmJiBjb25uZWN0aW9uLnJlbW90ZUNoYW5uZWwgIT09IGNoYW5uZWwpIGNvbnRpbnVlO1xuXHRcdFx0aWYgKGNvbm5lY3Rpb24uc3RhdHVzID09PSBcImNsb3NlZFwiKSBjb250aW51ZTtcblx0XHRcdGNvbm5lY3Rpb24uc3RhdHVzID0gXCJjbG9zZWRcIjtcblx0XHRcdGNvbm5lY3Rpb24udXBkYXRlZEF0ID0gbm93O1xuXHRcdFx0dGhpcy5fZW1pdEV2ZW50Py4oe1xuXHRcdFx0XHR0eXBlOiBcImRpc2Nvbm5lY3RlZFwiLFxuXHRcdFx0XHRjb25uZWN0aW9uLFxuXHRcdFx0XHR0aW1lc3RhbXA6IG5vd1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdGNsb3NlQWxsKCkge1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0Zm9yIChjb25zdCBjb25uZWN0aW9uIG9mIHRoaXMuX2Nvbm5lY3Rpb25zLnZhbHVlcygpKSB7XG5cdFx0XHRpZiAoY29ubmVjdGlvbi5zdGF0dXMgPT09IFwiY2xvc2VkXCIpIGNvbnRpbnVlO1xuXHRcdFx0Y29ubmVjdGlvbi5zdGF0dXMgPSBcImNsb3NlZFwiO1xuXHRcdFx0Y29ubmVjdGlvbi51cGRhdGVkQXQgPSBub3c7XG5cdFx0XHR0aGlzLl9lbWl0RXZlbnQ/Lih7XG5cdFx0XHRcdHR5cGU6IFwiZGlzY29ubmVjdGVkXCIsXG5cdFx0XHRcdGNvbm5lY3Rpb24sXG5cdFx0XHRcdHRpbWVzdGFtcDogbm93XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cXVlcnkocXVlcnkgPSB7fSkge1xuXHRcdHJldHVybiBxdWVyeUNvbm5lY3Rpb25zKHRoaXMuX2Nvbm5lY3Rpb25zLnZhbHVlcygpLCBxdWVyeSk7XG5cdH1cblx0dmFsdWVzKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5fY29ubmVjdGlvbnMudmFsdWVzKCldO1xuXHR9XG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25zLmNsZWFyKCk7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L2NoYW5uZWwvVW5pZmllZENoYW5uZWwudHNcbnZhciBVbmlmaWVkQ2hhbm5lbCA9IGNsYXNzIHtcblx0X25hbWU7XG5cdF9jb250ZXh0VHlwZTtcblx0X2NvbmZpZztcblx0X3RyYW5zcG9ydHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfZGVmYXVsdFRyYW5zcG9ydCA9IG51bGw7XG5cdF9jb25uZWN0aW9uRXZlbnRzID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogMjAwIH0pO1xuXHRfY29ubmVjdGlvblJlZ2lzdHJ5ID0gbmV3IENvbm5lY3Rpb25SZWdpc3RyeSgoKSA9PiBVVUlEdjQoKSwgKGV2ZW50KSA9PiB0aGlzLl9jb25uZWN0aW9uRXZlbnRzLm5leHQoZXZlbnQpKTtcblx0X3BlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3Vic2NyaXB0aW9ucyA9IFtdO1xuXHRfaW5ib3VuZCA9IG5ldyBDaGFubmVsU3ViamVjdCh7IGJ1ZmZlclNpemU6IDEwMCB9KTtcblx0X291dGJvdW5kID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogMTAwIH0pO1xuXHRfaW52b2NhdGlvbnMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdF9yZXNwb25zZXMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdF9leHBvc2VkID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3Byb3h5Q2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcblx0X19nZXRQcml2YXRlKGtleSkge1xuXHRcdHJldHVybiB0aGlzW2tleV07XG5cdH1cblx0X19zZXRQcml2YXRlKGtleSwgdmFsdWUpIHtcblx0XHR0aGlzW2tleV0gPSB2YWx1ZTtcblx0fVxuXHRjb25zdHJ1Y3Rvcihjb25maWcpIHtcblx0XHRjb25zdCBjZmcgPSB0eXBlb2YgY29uZmlnID09PSBcInN0cmluZ1wiID8geyBuYW1lOiBjb25maWcgfSA6IGNvbmZpZztcblx0XHR0aGlzLl9uYW1lID0gY2ZnLm5hbWU7XG5cdFx0dGhpcy5fY29udGV4dFR5cGUgPSBjZmcuYXV0b0RldGVjdCAhPT0gZmFsc2UgPyBkZXRlY3RDb250ZXh0VHlwZSgpIDogXCJ1bmtub3duXCI7XG5cdFx0dGhpcy5fY29uZmlnID0ge1xuXHRcdFx0bmFtZTogY2ZnLm5hbWUsXG5cdFx0XHRhdXRvRGV0ZWN0OiBjZmcuYXV0b0RldGVjdCA/PyB0cnVlLFxuXHRcdFx0dGltZW91dDogY2ZnLnRpbWVvdXQgPz8gM2U0LFxuXHRcdFx0cmVmbGVjdDogY2ZnLnJlZmxlY3QgPz8gRGVmYXVsdFJlZmxlY3QsXG5cdFx0XHRidWZmZXJTaXplOiBjZmcuYnVmZmVyU2l6ZSA/PyAxMDAsXG5cdFx0XHRhdXRvTGlzdGVuOiBjZmcuYXV0b0xpc3RlbiA/PyB0cnVlXG5cdFx0fTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmF1dG9MaXN0ZW4gJiYgdGhpcy5faXNXb3JrZXJDb250ZXh0KCkpIHRoaXMubGlzdGVuKHNlbGYpO1xuXHR9XG5cdGNvbm5lY3QodGFyZ2V0LCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCB0cmFuc3BvcnRUeXBlID0gZGV0ZWN0VHJhbnNwb3J0VHlwZSh0YXJnZXQpO1xuXHRcdGNvbnN0IHRhcmdldENoYW5uZWwgPSBvcHRpb25zLnRhcmdldENoYW5uZWwgPz8gdGhpcy5faW5mZXJUYXJnZXRDaGFubmVsKHRhcmdldCwgdHJhbnNwb3J0VHlwZSk7XG5cdFx0Y29uc3QgYmluZGluZyA9IHRoaXMuX2NyZWF0ZVRyYW5zcG9ydEJpbmRpbmcodGFyZ2V0LCB0cmFuc3BvcnRUeXBlLCB0YXJnZXRDaGFubmVsLCBvcHRpb25zKTtcblx0XHR0aGlzLl90cmFuc3BvcnRzLnNldCh0YXJnZXRDaGFubmVsLCBiaW5kaW5nKTtcblx0XHRpZiAoIXRoaXMuX2RlZmF1bHRUcmFuc3BvcnQpIHRoaXMuX2RlZmF1bHRUcmFuc3BvcnQgPSBiaW5kaW5nO1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9yZWdpc3RlckNvbm5lY3Rpb24oe1xuXHRcdFx0bG9jYWxDaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0cmVtb3RlQ2hhbm5lbDogdGFyZ2V0Q2hhbm5lbCxcblx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdHRyYW5zcG9ydFR5cGUsXG5cdFx0XHRkaXJlY3Rpb246IFwib3V0Z29pbmdcIixcblx0XHRcdG1ldGFkYXRhOiB7IHBoYXNlOiBcImNvbm5lY3RcIiB9XG5cdFx0fSk7XG5cdFx0dGhpcy5fZW1pdENvbm5lY3Rpb25TaWduYWwoYmluZGluZywgXCJjb25uZWN0XCIsIHtcblx0XHRcdGNvbm5lY3Rpb25JZDogY29ubmVjdGlvbi5pZCxcblx0XHRcdGZyb206IHRoaXMuX25hbWUsXG5cdFx0XHR0bzogdGFyZ2V0Q2hhbm5lbFxuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGxpc3Rlbihzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IHRyYW5zcG9ydFR5cGUgPSBkZXRlY3RUcmFuc3BvcnRUeXBlKHNvdXJjZSk7XG5cdFx0Y29uc3Qgc291cmNlQ2hhbm5lbCA9IG9wdGlvbnMudGFyZ2V0Q2hhbm5lbCA/PyB0aGlzLl9pbmZlclRhcmdldENoYW5uZWwoc291cmNlLCB0cmFuc3BvcnRUeXBlKTtcblx0XHRjb25zdCBoYW5kbGVyID0gKGRhdGEpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKGRhdGEpO1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9yZWdpc3RlckNvbm5lY3Rpb24oe1xuXHRcdFx0bG9jYWxDaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0cmVtb3RlQ2hhbm5lbDogc291cmNlQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogc291cmNlQ2hhbm5lbCxcblx0XHRcdHRyYW5zcG9ydFR5cGUsXG5cdFx0XHRkaXJlY3Rpb246IFwiaW5jb21pbmdcIixcblx0XHRcdG1ldGFkYXRhOiB7IHBoYXNlOiBcImxpc3RlblwiIH1cblx0XHR9KTtcblx0XHRzd2l0Y2ggKHRyYW5zcG9ydFR5cGUpIHtcblx0XHRcdGNhc2UgXCJ3b3JrZXJcIjpcblx0XHRcdGNhc2UgXCJtZXNzYWdlLXBvcnRcIjpcblx0XHRcdGNhc2UgXCJicm9hZGNhc3RcIjpcblx0XHRcdFx0aWYgKG9wdGlvbnMuYXV0b1N0YXJ0ICE9PSBmYWxzZSAmJiBzb3VyY2Uuc3RhcnQpIHNvdXJjZS5zdGFydCgpO1xuXHRcdFx0XHRzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcj8uKFwibWVzc2FnZVwiLCAoKGUpID0+IGhhbmRsZXIoZS5kYXRhKSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ3ZWJzb2NrZXRcIjpcblx0XHRcdFx0c291cmNlLmFkZEV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgKChlKSA9PiB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGhhbmRsZXIoSlNPTi5wYXJzZShlLmRhdGEpKTtcblx0XHRcdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2hyb21lLXJ1bnRpbWVcIjpcblx0XHRcdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlPy5hZGRMaXN0ZW5lcj8uKChtc2csIHNlbmRlciwgc2VuZFJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdFx0aGFuZGxlcihtc2cpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2hyb21lLXRhYnNcIjpcblx0XHRcdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlPy5hZGRMaXN0ZW5lcj8uKChtc2csIHNlbmRlcikgPT4ge1xuXHRcdFx0XHRcdGlmIChvcHRpb25zLnRhYklkICE9IG51bGwgJiYgc2VuZGVyPy50YWI/LmlkICE9PSBvcHRpb25zLnRhYklkKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0aGFuZGxlcihtc2cpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2hyb21lLXBvcnRcIjpcblx0XHRcdFx0c291cmNlPy5vbk1lc3NhZ2U/LmFkZExpc3RlbmVyPy4oKG1zZykgPT4ge1xuXHRcdFx0XHRcdGhhbmRsZXIobXNnKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNocm9tZS1leHRlcm5hbFwiOlxuXHRcdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbD8uYWRkTGlzdGVuZXI/LigobXNnKSA9PiB7XG5cdFx0XHRcdFx0aGFuZGxlcihtc2cpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2VsZlwiOlxuXHRcdFx0XHRhZGRFdmVudExpc3RlbmVyPy4oXCJtZXNzYWdlXCIsICgoZSkgPT4gaGFuZGxlcihlLmRhdGEpKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogaWYgKG9wdGlvbnMub25NZXNzYWdlKSBvcHRpb25zLm9uTWVzc2FnZShoYW5kbGVyKTtcblx0XHR9XG5cdFx0dGhpcy5fc2VuZFNpZ25hbFRvVGFyZ2V0KHNvdXJjZSwgdHJhbnNwb3J0VHlwZSwge1xuXHRcdFx0Y29ubmVjdGlvbklkOiBjb25uZWN0aW9uLmlkLFxuXHRcdFx0ZnJvbTogdGhpcy5fbmFtZSxcblx0XHRcdHRvOiBzb3VyY2VDaGFubmVsLFxuXHRcdFx0dGFiSWQ6IG9wdGlvbnMudGFiSWQsXG5cdFx0XHRleHRlcm5hbElkOiBvcHRpb25zLmV4dGVybmFsSWRcblx0XHR9LCBcIm5vdGlmeVwiKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRhdHRhY2godGFyZ2V0LCBvcHRpb25zID0ge30pIHtcblx0XHRyZXR1cm4gdGhpcy5jb25uZWN0KHRhcmdldCwgb3B0aW9ucyk7XG5cdH1cblx0ZXhwb3NlKG5hbWUsIG9iaikge1xuXHRcdGNvbnN0IHBhdGggPSBbbmFtZV07XG5cdFx0d3JpdGVCeVBhdGgocGF0aCwgb2JqKTtcblx0XHR0aGlzLl9leHBvc2VkLnNldChuYW1lLCB7XG5cdFx0XHRuYW1lLFxuXHRcdFx0b2JqLFxuXHRcdFx0cGF0aFxuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGV4cG9zZUFsbChlbnRyaWVzKSB7XG5cdFx0Zm9yIChjb25zdCBbbmFtZSwgb2JqXSBvZiBPYmplY3QuZW50cmllcyhlbnRyaWVzKSkgdGhpcy5leHBvc2UobmFtZSwgb2JqKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRhc3luYyBpbXBvcnQodXJsLCB0YXJnZXRDaGFubmVsKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW52b2tlKHRhcmdldENoYW5uZWwgPz8gdGhpcy5fZ2V0RGVmYXVsdFRhcmdldCgpLCBXUmVmbGVjdEFjdGlvbi5JTVBPUlQsIFtdLCBbdXJsXSk7XG5cdH1cblx0aW52b2tlKHRhcmdldENoYW5uZWwsIGFjdGlvbiwgcGF0aCwgYXJncyA9IFtdKSB7XG5cdFx0Y29uc3QgaWQgPSBVVUlEdjQoKTtcblx0XHRjb25zdCByZXNvbHZlcnMgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTtcblx0XHR0aGlzLl9wZW5kaW5nLnNldChpZCwgcmVzb2x2ZXJzKTtcblx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fcGVuZGluZy5oYXMoaWQpKSB7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGlkKTtcblx0XHRcdFx0cmVzb2x2ZXJzLnJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBSZXF1ZXN0IHRpbWVvdXQ6ICR7YWN0aW9ufSBvbiAke3BhdGguam9pbihcIi5cIil9YCkpO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMuX2NvbmZpZy50aW1lb3V0KTtcblx0XHRjb25zdCBtZXNzYWdlID0ge1xuXHRcdFx0aWQsXG5cdFx0XHRjaGFubmVsOiB0YXJnZXRDaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9uYW1lLFxuXHRcdFx0dHlwZTogXCJyZXF1ZXN0XCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdGNoYW5uZWw6IHRhcmdldENoYW5uZWwsXG5cdFx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRhcmdzXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHR0aGlzLl9zZW5kKHRhcmdldENoYW5uZWwsIG1lc3NhZ2UpO1xuXHRcdHRoaXMuX291dGJvdW5kLm5leHQobWVzc2FnZSk7XG5cdFx0cmV0dXJuIHJlc29sdmVycy5wcm9taXNlLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpKTtcblx0fVxuXHRnZXQodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgcHJvcCkge1xuXHRcdHJldHVybiB0aGlzLmludm9rZSh0YXJnZXRDaGFubmVsLCBXUmVmbGVjdEFjdGlvbi5HRVQsIHBhdGgsIFtwcm9wXSk7XG5cdH1cblx0c2V0KHRhcmdldENoYW5uZWwsIHBhdGgsIHByb3AsIHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW52b2tlKHRhcmdldENoYW5uZWwsIFdSZWZsZWN0QWN0aW9uLlNFVCwgcGF0aCwgW3Byb3AsIHZhbHVlXSk7XG5cdH1cblx0Y2FsbCh0YXJnZXRDaGFubmVsLCBwYXRoLCBhcmdzID0gW10pIHtcblx0XHRyZXR1cm4gdGhpcy5pbnZva2UodGFyZ2V0Q2hhbm5lbCwgV1JlZmxlY3RBY3Rpb24uQVBQTFksIHBhdGgsIFthcmdzXSk7XG5cdH1cblx0Y29uc3RydWN0KHRhcmdldENoYW5uZWwsIHBhdGgsIGFyZ3MgPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLmludm9rZSh0YXJnZXRDaGFubmVsLCBXUmVmbGVjdEFjdGlvbi5DT05TVFJVQ1QsIHBhdGgsIFthcmdzXSk7XG5cdH1cblx0cHJveHkodGFyZ2V0Q2hhbm5lbCwgYmFzZVBhdGggPSBbXSkge1xuXHRcdGNvbnN0IHRhcmdldCA9IHRhcmdldENoYW5uZWwgPz8gdGhpcy5fZ2V0RGVmYXVsdFRhcmdldCgpO1xuXHRcdHJldHVybiB0aGlzLl9jcmVhdGVQcm94eSh0YXJnZXQsIGJhc2VQYXRoKTtcblx0fVxuXHRyZW1vdGUobW9kdWxlTmFtZSwgdGFyZ2V0Q2hhbm5lbCkge1xuXHRcdHJldHVybiB0aGlzLnByb3h5KHRhcmdldENoYW5uZWwsIFttb2R1bGVOYW1lXSk7XG5cdH1cblx0d3JhcERlc2NyaXB0b3IoZGVzY3JpcHRvciwgdGFyZ2V0Q2hhbm5lbCkge1xuXHRcdGNvbnN0IGludm9rZXIgPSAoYWN0aW9uLCBwYXRoLCBhcmdzKSA9PiB7XG5cdFx0XHRjb25zdCBjaGFubmVsID0gdGFyZ2V0Q2hhbm5lbCA/PyBkZXNjcmlwdG9yPy5jaGFubmVsID8/IHRoaXMuX2dldERlZmF1bHRUYXJnZXQoKTtcblx0XHRcdHJldHVybiB0aGlzLmludm9rZShjaGFubmVsLCBhY3Rpb24sIHBhdGgsIGFyZ3MpO1xuXHRcdH07XG5cdFx0cmV0dXJuIHdyYXBEZXNjcmlwdG9yKGRlc2NyaXB0b3IsIGludm9rZXIsIHRhcmdldENoYW5uZWwgPz8gZGVzY3JpcHRvcj8uY2hhbm5lbCA/PyB0aGlzLl9nZXREZWZhdWx0VGFyZ2V0KCkpO1xuXHR9XG5cdHN1YnNjcmliZShoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luYm91bmQuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdG5leHQobWVzc2FnZSkge1xuXHRcdHRoaXMuX3NlbmQobWVzc2FnZS5jaGFubmVsLCBtZXNzYWdlKTtcblx0XHR0aGlzLl9vdXRib3VuZC5uZXh0KG1lc3NhZ2UpO1xuXHR9XG5cdGVtaXQodGFyZ2V0Q2hhbm5lbCwgZXZlbnRUeXBlLCBkYXRhKSB7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IHRhcmdldENoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX25hbWUsXG5cdFx0XHR0eXBlOiBcImV2ZW50XCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdHR5cGU6IGV2ZW50VHlwZSxcblx0XHRcdFx0ZGF0YVxuXHRcdFx0fSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH07XG5cdFx0dGhpcy5uZXh0KG1lc3NhZ2UpO1xuXHR9XG5cdG5vdGlmeSh0YXJnZXRDaGFubmVsLCBwYXlsb2FkID0ge30sIHR5cGUgPSBcIm5vdGlmeVwiKSB7XG5cdFx0Y29uc3QgYmluZGluZyA9IHRoaXMuX3RyYW5zcG9ydHMuZ2V0KHRhcmdldENoYW5uZWwpO1xuXHRcdGlmICghYmluZGluZykgcmV0dXJuIGZhbHNlO1xuXHRcdHRoaXMuX2VtaXRDb25uZWN0aW9uU2lnbmFsKGJpbmRpbmcsIHR5cGUsIHtcblx0XHRcdGZyb206IHRoaXMuX25hbWUsXG5cdFx0XHR0bzogdGFyZ2V0Q2hhbm5lbCxcblx0XHRcdC4uLnBheWxvYWRcblx0XHR9KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRnZXQgb25NZXNzYWdlKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbmJvdW5kO1xuXHR9XG5cdGdldCBvbk91dGJvdW5kKCkge1xuXHRcdHJldHVybiB0aGlzLl9vdXRib3VuZDtcblx0fVxuXHRnZXQgb25JbnZvY2F0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnZvY2F0aW9ucztcblx0fVxuXHRnZXQgb25SZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcmVzcG9uc2VzO1xuXHR9XG5cdGdldCBvbkNvbm5lY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25FdmVudHM7XG5cdH1cblx0c3Vic2NyaWJlQ29ubmVjdGlvbnMoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uRXZlbnRzLnN1YnNjcmliZShoYW5kbGVyKTtcblx0fVxuXHRxdWVyeUNvbm5lY3Rpb25zKHF1ZXJ5ID0ge30pIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LnF1ZXJ5KHF1ZXJ5KTtcblx0fVxuXHRub3RpZnlDb25uZWN0aW9ucyhwYXlsb2FkID0ge30sIHF1ZXJ5ID0ge30pIHtcblx0XHRsZXQgc2VudCA9IDA7XG5cdFx0Y29uc3QgdGFyZ2V0cyA9IHRoaXMucXVlcnlDb25uZWN0aW9ucyh7XG5cdFx0XHQuLi5xdWVyeSxcblx0XHRcdHN0YXR1czogXCJhY3RpdmVcIixcblx0XHRcdGluY2x1ZGVDbG9zZWQ6IGZhbHNlXG5cdFx0fSk7XG5cdFx0Zm9yIChjb25zdCBjb25uZWN0aW9uIG9mIHRhcmdldHMpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmcgPSB0aGlzLl90cmFuc3BvcnRzLmdldChjb25uZWN0aW9uLnJlbW90ZUNoYW5uZWwpO1xuXHRcdFx0aWYgKCFiaW5kaW5nKSBjb250aW51ZTtcblx0XHRcdHRoaXMuX2VtaXRDb25uZWN0aW9uU2lnbmFsKGJpbmRpbmcsIFwibm90aWZ5XCIsIHtcblx0XHRcdFx0Y29ubmVjdGlvbklkOiBjb25uZWN0aW9uLmlkLFxuXHRcdFx0XHRmcm9tOiB0aGlzLl9uYW1lLFxuXHRcdFx0XHR0bzogY29ubmVjdGlvbi5yZW1vdGVDaGFubmVsLFxuXHRcdFx0XHQuLi5wYXlsb2FkXG5cdFx0XHR9KTtcblx0XHRcdHNlbnQrKztcblx0XHR9XG5cdFx0cmV0dXJuIHNlbnQ7XG5cdH1cblx0Z2V0IG5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX25hbWU7XG5cdH1cblx0Z2V0IGNvbnRleHRUeXBlKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0VHlwZTtcblx0fVxuXHRnZXQgY29uZmlnKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb25maWc7XG5cdH1cblx0Z2V0IGNvbm5lY3RlZENoYW5uZWxzKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5fdHJhbnNwb3J0cy5rZXlzKCldO1xuXHR9XG5cdGdldCBleHBvc2VkTW9kdWxlcygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2V4cG9zZWQua2V5cygpXTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucyA9IFtdO1xuXHRcdHRoaXMuX3BlbmRpbmcuY2xlYXIoKTtcblx0XHR0aGlzLl9tYXJrQWxsQ29ubmVjdGlvbnNDbG9zZWQoKTtcblx0XHRmb3IgKGNvbnN0IGJpbmRpbmcgb2YgdGhpcy5fdHJhbnNwb3J0cy52YWx1ZXMoKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YmluZGluZy5jbGVhbnVwPy4oKTtcblx0XHRcdH0gY2F0Y2gge31cblx0XHRcdGlmIChiaW5kaW5nLnRyYW5zcG9ydFR5cGUgPT09IFwibWVzc2FnZS1wb3J0XCIgfHwgYmluZGluZy50cmFuc3BvcnRUeXBlID09PSBcImJyb2FkY2FzdFwiKSB0cnkge1xuXHRcdFx0XHRiaW5kaW5nLnRhcmdldD8uY2xvc2U/LigpO1xuXHRcdFx0fSBjYXRjaCB7fVxuXHRcdH1cblx0XHR0aGlzLl90cmFuc3BvcnRzLmNsZWFyKCk7XG5cdFx0dGhpcy5fZGVmYXVsdFRyYW5zcG9ydCA9IG51bGw7XG5cdFx0dGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LmNsZWFyKCk7XG5cdFx0dGhpcy5faW5ib3VuZC5jb21wbGV0ZSgpO1xuXHRcdHRoaXMuX291dGJvdW5kLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5faW52b2NhdGlvbnMuY29tcGxldGUoKTtcblx0XHR0aGlzLl9yZXNwb25zZXMuY29tcGxldGUoKTtcblx0XHR0aGlzLl9jb25uZWN0aW9uRXZlbnRzLmNvbXBsZXRlKCk7XG5cdH1cblx0X2hhbmRsZUluY29taW5nKGRhdGEpIHtcblx0XHRpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpIHJldHVybjtcblx0XHR0aGlzLl9pbmJvdW5kLm5leHQoZGF0YSk7XG5cdFx0c3dpdGNoIChkYXRhLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJyZXF1ZXN0XCI6XG5cdFx0XHRcdGlmIChkYXRhLmNoYW5uZWwgPT09IHRoaXMuX25hbWUpIHRoaXMuX2hhbmRsZVJlcXVlc3QoZGF0YSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInJlc3BvbnNlXCI6XG5cdFx0XHRcdHRoaXMuX2hhbmRsZVJlc3BvbnNlKGRhdGEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJldmVudFwiOiBicmVhaztcblx0XHRcdGNhc2UgXCJzaWduYWxcIjogdGhpcy5faGFuZGxlU2lnbmFsKGRhdGEpO1xuXHRcdH1cblx0fVxuXHRfaGFuZGxlUmVzcG9uc2UoZGF0YSkge1xuXHRcdGNvbnN0IGlkID0gZGF0YS5yZXFJZCA/PyBkYXRhLmlkO1xuXHRcdGNvbnN0IHJlc29sdmVycyA9IHRoaXMuX3BlbmRpbmcuZ2V0KGlkKTtcblx0XHRpZiAocmVzb2x2ZXJzKSB7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShpZCk7XG5cdFx0XHRpZiAoZGF0YS5wYXlsb2FkPy5lcnJvcikgcmVzb2x2ZXJzLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gZGF0YS5wYXlsb2FkPy5yZXN1bHQ7XG5cdFx0XHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBkYXRhLnBheWxvYWQ/LmRlc2NyaXB0b3I7XG5cdFx0XHRcdGlmIChyZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0ICE9PSB2b2lkIDApIHJlc29sdmVycy5yZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdGVsc2UgaWYgKGRlc2NyaXB0b3IpIHJlc29sdmVycy5yZXNvbHZlKHRoaXMud3JhcERlc2NyaXB0b3IoZGVzY3JpcHRvciwgZGF0YS5zZW5kZXIpKTtcblx0XHRcdFx0ZWxzZSByZXNvbHZlcnMucmVzb2x2ZSh2b2lkIDApO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fcmVzcG9uc2VzLm5leHQoe1xuXHRcdFx0XHRpZCxcblx0XHRcdFx0Y2hhbm5lbDogZGF0YS5jaGFubmVsLFxuXHRcdFx0XHRzZW5kZXI6IGRhdGEuc2VuZGVyLFxuXHRcdFx0XHRyZXN1bHQ6IGRhdGEucGF5bG9hZD8ucmVzdWx0LFxuXHRcdFx0XHRkZXNjcmlwdG9yOiBkYXRhLnBheWxvYWQ/LmRlc2NyaXB0b3IsXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIF9oYW5kbGVSZXF1ZXN0KGRhdGEpIHtcblx0XHRjb25zdCBwYXlsb2FkID0gZGF0YS5wYXlsb2FkO1xuXHRcdGlmICghcGF5bG9hZCkgcmV0dXJuO1xuXHRcdGNvbnN0IHsgYWN0aW9uLCBwYXRoLCBhcmdzLCBzZW5kZXIgfSA9IHBheWxvYWQ7XG5cdFx0Y29uc3QgcmVxSWQgPSBkYXRhLnJlcUlkID8/IGRhdGEuaWQ7XG5cdFx0dGhpcy5faW52b2NhdGlvbnMubmV4dCh7XG5cdFx0XHRpZDogcmVxSWQsXG5cdFx0XHRjaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0c2VuZGVyLFxuXHRcdFx0YWN0aW9uLFxuXHRcdFx0cGF0aCxcblx0XHRcdGFyZ3M6IGFyZ3MgPz8gW10sXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KCksXG5cdFx0XHRjb250ZXh0VHlwZTogZGV0ZWN0SW5jb21pbmdDb250ZXh0VHlwZShkYXRhKVxuXHRcdH0pO1xuXHRcdGNvbnN0IHsgcmVzdWx0LCB0b1RyYW5zZmVyLCBuZXdQYXRoIH0gPSBhd2FpdCB0aGlzLl9leGVjdXRlQWN0aW9uKGFjdGlvbiwgcGF0aCwgYXJncyA/PyBbXSwgc2VuZGVyKTtcblx0XHRhd2FpdCB0aGlzLl9zZW5kUmVzcG9uc2UocmVxSWQsIGFjdGlvbiwgc2VuZGVyLCBuZXdQYXRoLCByZXN1bHQsIHRvVHJhbnNmZXIpO1xuXHR9XG5cdGFzeW5jIF9leGVjdXRlQWN0aW9uKGFjdGlvbiwgcGF0aCwgYXJncywgc2VuZGVyKSB7XG5cdFx0Y29uc3QgeyByZXN1bHQsIHRvVHJhbnNmZXIsIHBhdGg6IG5ld1BhdGggfSA9IGV4ZWN1dGVBY3Rpb24oYWN0aW9uLCBwYXRoLCBhcmdzLCB7XG5cdFx0XHRjaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0c2VuZGVyLFxuXHRcdFx0cmVmbGVjdDogdGhpcy5fY29uZmlnLnJlZmxlY3Rcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVzdWx0OiBhd2FpdCByZXN1bHQsXG5cdFx0XHR0b1RyYW5zZmVyLFxuXHRcdFx0bmV3UGF0aFxuXHRcdH07XG5cdH1cblx0YXN5bmMgX3NlbmRSZXNwb25zZShyZXFJZCwgYWN0aW9uLCBzZW5kZXIsIHBhdGgsIHJhd1Jlc3VsdCwgdG9UcmFuc2Zlcikge1xuXHRcdGNvbnN0IHsgcmVzcG9uc2U6IGNvcmVSZXNwb25zZSwgdHJhbnNmZXIgfSA9IGF3YWl0IGJ1aWxkUmVzcG9uc2UocmVxSWQsIGFjdGlvbiwgdGhpcy5fbmFtZSwgc2VuZGVyLCBwYXRoLCByYXdSZXN1bHQsIHRvVHJhbnNmZXIpO1xuXHRcdGNvbnN0IHJlc3BvbnNlID0ge1xuXHRcdFx0aWQ6IHJlcUlkLFxuXHRcdFx0Li4uY29yZVJlc3BvbnNlLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpLFxuXHRcdFx0dHJhbnNmZXJhYmxlOiB0cmFuc2ZlclxuXHRcdH07XG5cdFx0dGhpcy5fc2VuZChzZW5kZXIsIHJlc3BvbnNlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2hhbmRsZVNpZ25hbChkYXRhKSB7XG5cdFx0Y29uc3QgcGF5bG9hZCA9IGRhdGE/LnBheWxvYWQgPz8ge307XG5cdFx0Y29uc3QgcmVtb3RlQ2hhbm5lbCA9IHBheWxvYWQuZnJvbSA/PyBkYXRhLnNlbmRlciA/PyBcInVua25vd25cIjtcblx0XHRjb25zdCB0cmFuc3BvcnRUeXBlID0gZGF0YS50cmFuc3BvcnRUeXBlID8/IHRoaXMuX3RyYW5zcG9ydHMuZ2V0KGRhdGEuY2hhbm5lbCk/LnRyYW5zcG9ydFR5cGUgPz8gXCJpbnRlcm5hbFwiO1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9yZWdpc3RlckNvbm5lY3Rpb24oe1xuXHRcdFx0bG9jYWxDaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0cmVtb3RlQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogZGF0YS5zZW5kZXIgPz8gcmVtb3RlQ2hhbm5lbCxcblx0XHRcdHRyYW5zcG9ydFR5cGUsXG5cdFx0XHRkaXJlY3Rpb246IFwiaW5jb21pbmdcIlxuXHRcdH0pO1xuXHRcdHRoaXMuX21hcmtDb25uZWN0aW9uTm90aWZpZWQoY29ubmVjdGlvbiwgcGF5bG9hZCk7XG5cdH1cblx0X3JlZ2lzdGVyQ29ubmVjdGlvbihwYXJhbXMpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LnJlZ2lzdGVyKHBhcmFtcyk7XG5cdH1cblx0X21hcmtDb25uZWN0aW9uTm90aWZpZWQoY29ubmVjdGlvbiwgcGF5bG9hZCkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25SZWdpc3RyeS5tYXJrTm90aWZpZWQoY29ubmVjdGlvbiwgcGF5bG9hZCk7XG5cdH1cblx0X2VtaXRDb25uZWN0aW9uU2lnbmFsKGJpbmRpbmcsIHNpZ25hbFR5cGUsIHBheWxvYWQgPSB7fSkge1xuXHRcdGNvbnN0IG1lc3NhZ2UgPSB7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHR0eXBlOiBcInNpZ25hbFwiLFxuXHRcdFx0Y2hhbm5lbDogYmluZGluZy50YXJnZXRDaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9uYW1lLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogYmluZGluZy50cmFuc3BvcnRUeXBlLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHR0eXBlOiBzaWduYWxUeXBlLFxuXHRcdFx0XHRmcm9tOiB0aGlzLl9uYW1lLFxuXHRcdFx0XHR0bzogYmluZGluZy50YXJnZXRDaGFubmVsLFxuXHRcdFx0XHQuLi5wYXlsb2FkXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHQoYmluZGluZz8uc2VuZGVyID8/IGJpbmRpbmc/LnBvc3RNZXNzYWdlKT8uY2FsbChiaW5kaW5nLCBtZXNzYWdlKTtcblx0XHRjb25zdCBjb25uZWN0aW9uID0gdGhpcy5fcmVnaXN0ZXJDb25uZWN0aW9uKHtcblx0XHRcdGxvY2FsQ2hhbm5lbDogdGhpcy5fbmFtZSxcblx0XHRcdHJlbW90ZUNoYW5uZWw6IGJpbmRpbmcudGFyZ2V0Q2hhbm5lbCxcblx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IGJpbmRpbmcudHJhbnNwb3J0VHlwZSxcblx0XHRcdGRpcmVjdGlvbjogXCJvdXRnb2luZ1wiXG5cdFx0fSk7XG5cdFx0dGhpcy5fbWFya0Nvbm5lY3Rpb25Ob3RpZmllZChjb25uZWN0aW9uLCBtZXNzYWdlLnBheWxvYWQpO1xuXHR9XG5cdF9zZW5kU2lnbmFsVG9UYXJnZXQodGFyZ2V0LCB0cmFuc3BvcnRUeXBlLCBwYXlsb2FkLCBzaWduYWxUeXBlKSB7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwic2lnbmFsXCIsXG5cdFx0XHRjaGFubmVsOiBwYXlsb2FkLnRvID8/IHRoaXMuX25hbWUsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX25hbWUsXG5cdFx0XHR0cmFuc3BvcnRUeXBlLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHR0eXBlOiBzaWduYWxUeXBlLFxuXHRcdFx0XHQuLi5wYXlsb2FkXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRyYW5zcG9ydFR5cGUgPT09IFwid2Vic29ja2V0XCIpIHtcblx0XHRcdFx0dGFyZ2V0Py5zZW5kPy4oSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAodHJhbnNwb3J0VHlwZSA9PT0gXCJjaHJvbWUtcnVudGltZVwiKSB7XG5cdFx0XHRcdGNocm9tZS5ydW50aW1lPy5zZW5kTWVzc2FnZT8uKG1lc3NhZ2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAodHJhbnNwb3J0VHlwZSA9PT0gXCJjaHJvbWUtdGFic1wiKSB7XG5cdFx0XHRcdGNvbnN0IHRhYklkID0gcGF5bG9hZC50YWJJZDtcblx0XHRcdFx0aWYgKHRhYklkICE9IG51bGwpIGNocm9tZS50YWJzPy5zZW5kTWVzc2FnZT8uKHRhYklkLCBtZXNzYWdlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRyYW5zcG9ydFR5cGUgPT09IFwiY2hyb21lLXBvcnRcIikge1xuXHRcdFx0XHR0YXJnZXQ/LnBvc3RNZXNzYWdlPy4obWVzc2FnZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmICh0cmFuc3BvcnRUeXBlID09PSBcImNocm9tZS1leHRlcm5hbFwiKSB7XG5cdFx0XHRcdGlmIChwYXlsb2FkLmV4dGVybmFsSWQpIGNocm9tZS5ydW50aW1lPy5zZW5kTWVzc2FnZT8uKHBheWxvYWQuZXh0ZXJuYWxJZCwgbWVzc2FnZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRhcmdldD8ucG9zdE1lc3NhZ2U/LihtZXNzYWdlLCB7IHRyYW5zZmVyOiBbXSB9KTtcblx0XHR9IGNhdGNoIHt9XG5cdH1cblx0X21hcmtBbGxDb25uZWN0aW9uc0Nsb3NlZCgpIHtcblx0XHR0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkuY2xvc2VBbGwoKTtcblx0fVxuXHRfY3JlYXRlVHJhbnNwb3J0QmluZGluZyh0YXJnZXQsIHRyYW5zcG9ydFR5cGUsIHRhcmdldENoYW5uZWwsIG9wdGlvbnMpIHtcblx0XHRsZXQgc2VuZGVyO1xuXHRcdGxldCBjbGVhbnVwO1xuXHRcdHN3aXRjaCAodHJhbnNwb3J0VHlwZSkge1xuXHRcdFx0Y2FzZSBcIndvcmtlclwiOlxuXHRcdFx0Y2FzZSBcIm1lc3NhZ2UtcG9ydFwiOlxuXHRcdFx0Y2FzZSBcImJyb2FkY2FzdFwiOlxuXHRcdFx0XHRpZiAob3B0aW9ucy5hdXRvU3RhcnQgIT09IGZhbHNlICYmIHRhcmdldC5zdGFydCkgdGFyZ2V0LnN0YXJ0KCk7XG5cdFx0XHRcdHNlbmRlciA9IChtc2csIHRyYW5zZmVyKSA9PiB0YXJnZXQucG9zdE1lc3NhZ2UobXNnLCB7IHRyYW5zZmVyIH0pO1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAoKGUpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKGUuZGF0YSkpO1xuXHRcdFx0XHRcdHRhcmdldC5hZGRFdmVudExpc3RlbmVyPy4oXCJtZXNzYWdlXCIsIGxpc3RlbmVyKTtcblx0XHRcdFx0XHRjbGVhbnVwID0gKCkgPT4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgbGlzdGVuZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIndlYnNvY2tldFwiOlxuXHRcdFx0XHRzZW5kZXIgPSAobXNnKSA9PiB0YXJnZXQuc2VuZChKU09OLnN0cmluZ2lmeShtc2cpKTtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnN0IGxpc3RlbmVyID0gKChlKSA9PiB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9oYW5kbGVJbmNvbWluZyhKU09OLnBhcnNlKGUuZGF0YSkpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCB7fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHRhcmdldC5hZGRFdmVudExpc3RlbmVyPy4oXCJtZXNzYWdlXCIsIGxpc3RlbmVyKTtcblx0XHRcdFx0XHRjbGVhbnVwID0gKCkgPT4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgbGlzdGVuZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNocm9tZS1ydW50aW1lXCI6XG5cdFx0XHRcdHNlbmRlciA9IChtc2cpID0+IGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKG1zZyk7XG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb25zdCBsaXN0ZW5lciA9IChtc2cpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKG1zZyk7XG5cdFx0XHRcdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlPy5hZGRMaXN0ZW5lcj8uKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRjbGVhbnVwID0gKCkgPT4gY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlPy5yZW1vdmVMaXN0ZW5lcj8uKGxpc3RlbmVyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjaHJvbWUtdGFic1wiOlxuXHRcdFx0XHRzZW5kZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMudGFiSWQgIT0gbnVsbCkgY2hyb21lLnRhYnM/LnNlbmRNZXNzYWdlPy4ob3B0aW9ucy50YWJJZCwgbXNnKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnN0IGxpc3RlbmVyID0gKG1zZywgc2VuZGVyTWV0YSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMudGFiSWQgIT0gbnVsbCAmJiBzZW5kZXJNZXRhPy50YWI/LmlkICE9PSBvcHRpb25zLnRhYklkKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR0aGlzLl9oYW5kbGVJbmNvbWluZyhtc2cpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2U/LmFkZExpc3RlbmVyPy4obGlzdGVuZXIpO1xuXHRcdFx0XHRcdGNsZWFudXAgPSAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2U/LnJlbW92ZUxpc3RlbmVyPy4obGlzdGVuZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNocm9tZS1wb3J0XCI6XG5cdFx0XHRcdGlmICh0YXJnZXQ/LnBvc3RNZXNzYWdlICYmIHRhcmdldD8ub25NZXNzYWdlPy5hZGRMaXN0ZW5lcikge1xuXHRcdFx0XHRcdHNlbmRlciA9IChtc2cpID0+IHRhcmdldC5wb3N0TWVzc2FnZShtc2cpO1xuXHRcdFx0XHRcdGNvbnN0IGxpc3RlbmVyID0gKG1zZykgPT4gdGhpcy5faGFuZGxlSW5jb21pbmcobXNnKTtcblx0XHRcdFx0XHR0YXJnZXQub25NZXNzYWdlLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRjbGVhbnVwID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0Lm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQuZGlzY29ubmVjdD8uKCk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBwb3J0TmFtZSA9IG9wdGlvbnMucG9ydE5hbWUgPz8gdGFyZ2V0Q2hhbm5lbDtcblx0XHRcdFx0XHRjb25zdCBwb3J0ID0gb3B0aW9ucy50YWJJZCAhPSBudWxsICYmIGNocm9tZS50YWJzPy5jb25uZWN0ID8gY2hyb21lLnRhYnMuY29ubmVjdChvcHRpb25zLnRhYklkLCB7IG5hbWU6IHBvcnROYW1lIH0pIDogY2hyb21lLnJ1bnRpbWUuY29ubmVjdCh7IG5hbWU6IHBvcnROYW1lIH0pO1xuXHRcdFx0XHRcdHNlbmRlciA9IChtc2cpID0+IHBvcnQucG9zdE1lc3NhZ2UobXNnKTtcblx0XHRcdFx0XHRjb25zdCBsaXN0ZW5lciA9IChtc2cpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKG1zZyk7XG5cdFx0XHRcdFx0cG9ydC5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdFx0XHRcdGNsZWFudXAgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRwb3J0Lm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRwb3J0LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2gge31cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNocm9tZS1leHRlcm5hbFwiOlxuXHRcdFx0XHRzZW5kZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMuZXh0ZXJuYWxJZCkgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2Uob3B0aW9ucy5leHRlcm5hbElkLCBtc2cpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl9oYW5kbGVJbmNvbWluZyhtc2cpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbD8uYWRkTGlzdGVuZXI/LihsaXN0ZW5lcik7XG5cdFx0XHRcdFx0Y2xlYW51cCA9ICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsPy5yZW1vdmVMaXN0ZW5lcj8uKGxpc3RlbmVyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZWxmXCI6XG5cdFx0XHRcdHNlbmRlciA9IChtc2csIHRyYW5zZmVyKSA9PiBnbG9iYWxUaGlzLnBvc3RNZXNzYWdlPy4obXNnLCB7IHRyYW5zZmVyOiB0cmFuc2ZlciA/PyBbXSB9KTtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnN0IGxpc3RlbmVyID0gKChlKSA9PiB0aGlzLl9oYW5kbGVJbmNvbWluZyhlLmRhdGEpKTtcblx0XHRcdFx0XHRnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgbGlzdGVuZXIpO1xuXHRcdFx0XHRcdGNsZWFudXAgPSAoKSA9PiBnbG9iYWxUaGlzLnJlbW92ZUV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgbGlzdGVuZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKG9wdGlvbnMub25NZXNzYWdlKSBjbGVhbnVwID0gb3B0aW9ucy5vbk1lc3NhZ2UoKG1zZykgPT4gdGhpcy5faGFuZGxlSW5jb21pbmcobXNnKSk7XG5cdFx0XHRcdHNlbmRlciA9IChtc2cpID0+IHRhcmdldD8ucG9zdE1lc3NhZ2U/Lihtc2cpO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0dGFyZ2V0LFxuXHRcdFx0dGFyZ2V0Q2hhbm5lbCxcblx0XHRcdHRyYW5zcG9ydFR5cGUsXG5cdFx0XHRzZW5kZXIsXG5cdFx0XHRjbGVhbnVwLFxuXHRcdFx0cG9zdE1lc3NhZ2U6IChtZXNzYWdlLCBvcHRpb25zKSA9PiBzZW5kZXI/LihtZXNzYWdlLCBvcHRpb25zKSxcblx0XHRcdHN0YXJ0OiAoKSA9PiB0YXJnZXQ/LnN0YXJ0Py4oKSxcblx0XHRcdGNsb3NlOiAoKSA9PiB0YXJnZXQ/LmNsb3NlPy4oKVxuXHRcdH07XG5cdH1cblx0X3NlbmQodGFyZ2V0Q2hhbm5lbCwgbWVzc2FnZSwgdHJhbnNmZXIpIHtcblx0XHRjb25zdCBiaW5kaW5nID0gdGhpcy5fdHJhbnNwb3J0cy5nZXQodGFyZ2V0Q2hhbm5lbCkgPz8gdGhpcy5fZGVmYXVsdFRyYW5zcG9ydDtcblx0XHQoYmluZGluZz8uc2VuZGVyID8/IGJpbmRpbmc/LnBvc3RNZXNzYWdlKT8uY2FsbChiaW5kaW5nLCBtZXNzYWdlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2dldERlZmF1bHRUYXJnZXQoKSB7XG5cdFx0aWYgKHRoaXMuX2RlZmF1bHRUcmFuc3BvcnQpIHJldHVybiB0aGlzLl9kZWZhdWx0VHJhbnNwb3J0LnRhcmdldENoYW5uZWw7XG5cdFx0cmV0dXJuIFwid29ya2VyXCI7XG5cdH1cblx0X2luZmVyVGFyZ2V0Q2hhbm5lbCh0YXJnZXQsIHRyYW5zcG9ydFR5cGUpIHtcblx0XHRpZiAodHJhbnNwb3J0VHlwZSA9PT0gXCJ3b3JrZXJcIikgcmV0dXJuIFwid29ya2VyXCI7XG5cdFx0aWYgKHRyYW5zcG9ydFR5cGUgPT09IFwiYnJvYWRjYXN0XCIgJiYgdGFyZ2V0Lm5hbWUpIHJldHVybiB0YXJnZXQubmFtZTtcblx0XHRpZiAodHJhbnNwb3J0VHlwZSA9PT0gXCJzZWxmXCIpIHJldHVybiBcInNlbGZcIjtcblx0XHRyZXR1cm4gYCR7dHJhbnNwb3J0VHlwZX0tJHtVVUlEdjQoKS5zbGljZSgwLCA4KX1gO1xuXHR9XG5cdF9jcmVhdGVQcm94eSh0YXJnZXRDaGFubmVsLCBiYXNlUGF0aCkge1xuXHRcdGNvbnN0IGludm9rZXIgPSAoYWN0aW9uLCBwYXRoLCBhcmdzKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnZva2UodGFyZ2V0Q2hhbm5lbCwgYWN0aW9uLCBwYXRoLCBhcmdzKTtcblx0XHR9O1xuXHRcdHJldHVybiBjcmVhdGVSZW1vdGVQcm94eShpbnZva2VyLCB7XG5cdFx0XHRjaGFubmVsOiB0YXJnZXRDaGFubmVsLFxuXHRcdFx0YmFzZVBhdGgsXG5cdFx0XHRjYWNoZTogdHJ1ZSxcblx0XHRcdHRpbWVvdXQ6IHRoaXMuX2NvbmZpZy50aW1lb3V0XG5cdFx0fSk7XG5cdH1cblx0X2lzV29ya2VyQ29udGV4dCgpIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0XCJ3b3JrZXJcIixcblx0XHRcdFwic2hhcmVkLXdvcmtlclwiLFxuXHRcdFx0XCJzZXJ2aWNlLXdvcmtlclwiXG5cdFx0XS5pbmNsdWRlcyh0aGlzLl9jb250ZXh0VHlwZSk7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVVbmlmaWVkQ2hhbm5lbChjb25maWcpIHtcblx0cmV0dXJuIG5ldyBVbmlmaWVkQ2hhbm5lbChjb25maWcpO1xufVxuZnVuY3Rpb24gc2V0dXBVbmlmaWVkQ2hhbm5lbChuYW1lLCB0YXJnZXQsIG9wdGlvbnMpIHtcblx0cmV0dXJuIGNyZWF0ZVVuaWZpZWRDaGFubmVsKHtcblx0XHRuYW1lLFxuXHRcdC4uLm9wdGlvbnNcblx0fSkuYXR0YWNoKHRhcmdldCwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBjcmVhdGVVbmlmaWVkQ2hhbm5lbFBhaXIobmFtZTEsIG5hbWUyLCBvcHRpb25zKSB7XG5cdGNvbnN0IG1jID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG5cdG1jLnBvcnQxLnN0YXJ0KCk7XG5cdG1jLnBvcnQyLnN0YXJ0KCk7XG5cdHJldHVybiB7XG5cdFx0Y2hhbm5lbDE6IGNyZWF0ZVVuaWZpZWRDaGFubmVsKHtcblx0XHRcdG5hbWU6IG5hbWUxLFxuXHRcdFx0YXV0b0xpc3RlbjogZmFsc2UsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fSkuYXR0YWNoKG1jLnBvcnQxLCB7IHRhcmdldENoYW5uZWw6IG5hbWUyIH0pLFxuXHRcdGNoYW5uZWwyOiBjcmVhdGVVbmlmaWVkQ2hhbm5lbCh7XG5cdFx0XHRuYW1lOiBuYW1lMixcblx0XHRcdGF1dG9MaXN0ZW46IGZhbHNlLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pLmF0dGFjaChtYy5wb3J0MiwgeyB0YXJnZXRDaGFubmVsOiBuYW1lMSB9KSxcblx0XHRtZXNzYWdlQ2hhbm5lbDogbWNcblx0fTtcbn1cbnZhciBDSEFOTkVMX1JFR0lTVFJZID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbmZ1bmN0aW9uIGdldFVuaWZpZWRDaGFubmVsKG5hbWUsIGNvbmZpZykge1xuXHRpZiAoIUNIQU5ORUxfUkVHSVNUUlkuaGFzKG5hbWUpKSBDSEFOTkVMX1JFR0lTVFJZLnNldChuYW1lLCBjcmVhdGVVbmlmaWVkQ2hhbm5lbCh7XG5cdFx0bmFtZSxcblx0XHQuLi5jb25maWdcblx0fSkpO1xuXHRyZXR1cm4gQ0hBTk5FTF9SRUdJU1RSWS5nZXQobmFtZSk7XG59XG5mdW5jdGlvbiBnZXRVbmlmaWVkQ2hhbm5lbE5hbWVzKCkge1xuXHRyZXR1cm4gWy4uLkNIQU5ORUxfUkVHSVNUUlkua2V5cygpXTtcbn1cbmZ1bmN0aW9uIGNsb3NlVW5pZmllZENoYW5uZWwobmFtZSkge1xuXHRjb25zdCBjaGFubmVsID0gQ0hBTk5FTF9SRUdJU1RSWS5nZXQobmFtZSk7XG5cdGlmIChjaGFubmVsKSB7XG5cdFx0Y2hhbm5lbC5jbG9zZSgpO1xuXHRcdHJldHVybiBDSEFOTkVMX1JFR0lTVFJZLmRlbGV0ZShuYW1lKTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG52YXIgV09SS0VSX0NIQU5ORUwgPSBudWxsO1xuZnVuY3Rpb24gZ2V0V29ya2VyQ2hhbm5lbCgpIHtcblx0aWYgKCFXT1JLRVJfQ0hBTk5FTCkge1xuXHRcdGNvbnN0IGNvbnRleHRUeXBlID0gZGV0ZWN0Q29udGV4dFR5cGUoKTtcblx0XHRpZiAoW1xuXHRcdFx0XCJ3b3JrZXJcIixcblx0XHRcdFwic2hhcmVkLXdvcmtlclwiLFxuXHRcdFx0XCJzZXJ2aWNlLXdvcmtlclwiXG5cdFx0XS5pbmNsdWRlcyhjb250ZXh0VHlwZSkpIFdPUktFUl9DSEFOTkVMID0gY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdFx0bmFtZTogXCJ3b3JrZXJcIixcblx0XHRcdGF1dG9MaXN0ZW46IHRydWVcblx0XHR9KTtcblx0XHRlbHNlIFdPUktFUl9DSEFOTkVMID0gY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdFx0bmFtZTogXCJob3N0XCIsXG5cdFx0XHRhdXRvTGlzdGVuOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBXT1JLRVJfQ0hBTk5FTDtcbn1cbmZ1bmN0aW9uIGV4cG9zZUZyb21VbmlmaWVkKG5hbWUsIG9iaikge1xuXHRnZXRXb3JrZXJDaGFubmVsKCkuZXhwb3NlKG5hbWUsIG9iaik7XG59XG5mdW5jdGlvbiByZW1vdGVGcm9tVW5pZmllZChtb2R1bGVOYW1lLCB0YXJnZXRDaGFubmVsKSB7XG5cdHJldHVybiBnZXRXb3JrZXJDaGFubmVsKCkucmVtb3RlKG1vZHVsZU5hbWUsIHRhcmdldENoYW5uZWwpO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9wcm94eS9SZXF1ZXN0UHJveHkudHNcbnZhciB3cmFwQ2hhbm5lbCA9IChjb25uZWN0Q2hhbm5lbCwgaG9zdCA9IG51bGwpID0+IHtcblx0cmV0dXJuIGdldFdvcmtlckNoYW5uZWwoKS5wcm94eShjb25uZWN0Q2hhbm5lbCk7XG59O1xudmFyIHdyYXBPYnNlcnZhYmxlQ2hhbm5lbCA9IChjaGFubmVsT2JzLCBjb25uZWN0Q2hhbm5lbCwgb3B0aW9ucyA9IHt9KSA9PiB3cmFwQ2hhbm5lbChjb25uZWN0Q2hhbm5lbCwgbnVsbCk7XG52YXIgbWFrZU9ic2VydmFibGVSZXF1ZXN0UHJveHkgPSAoZGVzY3JpcHRvciwgY2hhbm5lbE9icywgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdHJldHVybiBnZXRXb3JrZXJDaGFubmVsKCkud3JhcERlc2NyaXB0b3IoZGVzY3JpcHRvciwgZGVzY3JpcHRvcj8uY2hhbm5lbCA/PyBvcHRpb25zPy5jb25uZWN0Q2hhbm5lbCk7XG59O1xuZnVuY3Rpb24gY3JlYXRlT2JzZXJ2YWJsZUNoYW5uZWwodHJhbnNwb3J0LCBjaGFubmVsTmFtZSkge1xuXHRjb25zdCBjaGFubmVsID0gY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdG5hbWU6IGNoYW5uZWxOYW1lLFxuXHRcdGF1dG9MaXN0ZW46IGZhbHNlXG5cdH0pO1xuXHRjaGFubmVsLmNvbm5lY3QodHJhbnNwb3J0LCB7IHRhcmdldENoYW5uZWw6IGNoYW5uZWxOYW1lIH0pO1xuXHRyZXR1cm4ge1xuXHRcdG9ic2VydmFibGU6IGNoYW5uZWwsXG5cdFx0d3JhcDogKGNvbm5lY3RDaGFubmVsLCBvcHRzKSA9PiBjaGFubmVsLnByb3h5KGNvbm5lY3RDaGFubmVsKSxcblx0XHRzdWJzY3JpYmU6IChvYnMpID0+IGNoYW5uZWwuc3Vic2NyaWJlKG9icyksXG5cdFx0c2VuZDogKG1zZykgPT4gY2hhbm5lbC5uZXh0KG1zZyksXG5cdFx0cmVxdWVzdDogKG1zZykgPT4gY2hhbm5lbC5pbnZva2UoY2hhbm5lbE5hbWUsIFdSZWZsZWN0QWN0aW9uLkNBTEwsIFtdLCBbbXNnXSlcblx0fTtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL2NvcmUvQWxpYXMudHNcbnZhciBUUyA9IHtcblx0cmpiOiBcInJlamVjdEJ5XCIsXG5cdHJ2YjogXCJyZXNvbHZlQnlcIixcblx0cmo6IFwicmVqZWN0XCIsXG5cdHJ2OiBcInJlc29sdmVcIixcblx0Y3I6IFwiY3JlYXRlXCIsXG5cdGNzOiBcImNyZWF0ZVN5bmNcIixcblx0YTogXCJhcnJheVwiLFxuXHR0YTogXCJ0eXBlZGFycmF5XCIsXG5cdHVkZjogXCJ1bmRlZmluZWRcIlxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL2NvcmUvVXNlZnVsLnRzXG52YXIgVHJhbnNmZXJhYmxlID0gW1xuXHR0eXBlb2YgQXJyYXlCdWZmZXIgIT0gVFMudWRmID8gQXJyYXlCdWZmZXIgOiBudWxsLFxuXHR0eXBlb2YgTWVzc2FnZVBvcnQgIT0gVFMudWRmID8gTWVzc2FnZVBvcnQgOiBudWxsLFxuXHR0eXBlb2YgUmVhZGFibGVTdHJlYW0gIT0gVFMudWRmID8gUmVhZGFibGVTdHJlYW0gOiBudWxsLFxuXHR0eXBlb2YgV3JpdGFibGVTdHJlYW0gIT0gVFMudWRmID8gV3JpdGFibGVTdHJlYW0gOiBudWxsLFxuXHR0eXBlb2YgVHJhbnNmb3JtU3RyZWFtICE9IFRTLnVkZiA/IFRyYW5zZm9ybVN0cmVhbSA6IG51bGwsXG5cdHR5cGVvZiBXZWJUcmFuc3BvcnRSZWNlaXZlU3RyZWFtICE9IFRTLnVkZiA/IFdlYlRyYW5zcG9ydFJlY2VpdmVTdHJlYW0gOiBudWxsLFxuXHR0eXBlb2YgV2ViVHJhbnNwb3J0U2VuZFN0cmVhbSAhPSBUUy51ZGYgPyBXZWJUcmFuc3BvcnRTZW5kU3RyZWFtIDogbnVsbCxcblx0dHlwZW9mIEF1ZGlvRGF0YSAhPSBUUy51ZGYgPyBBdWRpb0RhdGEgOiBudWxsLFxuXHR0eXBlb2YgSW1hZ2VCaXRtYXAgIT0gVFMudWRmID8gSW1hZ2VCaXRtYXAgOiBudWxsLFxuXHR0eXBlb2YgVmlkZW9GcmFtZSAhPSBUUy51ZGYgPyBWaWRlb0ZyYW1lIDogbnVsbCxcblx0dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyAhPSBUUy51ZGYgPyBPZmZzY3JlZW5DYW52YXMgOiBudWxsLFxuXHR0eXBlb2YgUlRDRGF0YUNoYW5uZWwgIT0gVFMudWRmID8gUlRDRGF0YUNoYW5uZWwgOiBudWxsXG5dLmZpbHRlcigoRSkgPT4gRSAhPSBudWxsKTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdXRpbHMvRW52LnRzXG52YXIgaXNTZXJ2aWNlV29ya2VyQ29udGV4dCA9ICgpID0+IHtcblx0dHJ5IHtcblx0XHRjb25zdCBTV0dTID0gZ2xvYmFsVGhpcz8uU2VydmljZVdvcmtlckdsb2JhbFNjb3BlO1xuXHRcdHJldHVybiB0eXBlb2YgU1dHUyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWxUaGlzIGluc3RhbmNlb2YgU1dHUztcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIGlzQ2hyb21lRXh0ZW5zaW9uQ29udGV4dCA9ICgpID0+IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gdHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhIWNocm9tZT8ucnVudGltZT8uaWQ7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBkZXRlY3RFeGVjdXRpb25Db250ZXh0ID0gKCkgPT4ge1xuXHRpZiAoaXNDaHJvbWVFeHRlbnNpb25Db250ZXh0KCkpIHJldHVybiBcImNocm9tZS1leHRlbnNpb25cIjtcblx0aWYgKGlzU2VydmljZVdvcmtlckNvbnRleHQoKSkgcmV0dXJuIFwic2VydmljZS13b3JrZXJcIjtcblx0dHJ5IHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJtYWluXCI7XG5cdH0gY2F0Y2gge31cblx0cmV0dXJuIFwidW5rbm93blwiO1xufTtcbnZhciBzdXBwb3J0c0RlZGljYXRlZFdvcmtlcnMgPSAoKSA9PiB7XG5cdGlmIChpc1NlcnZpY2VXb3JrZXJDb250ZXh0KCkpIHJldHVybiBmYWxzZTtcblx0dHJ5IHtcblx0XHRyZXR1cm4gdHlwZW9mIFdvcmtlciAhPT0gXCJ1bmRlZmluZWRcIjtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuZnVuY3Rpb24gZ2V0V29ya2VyUmVzb2x2ZUJhc2VVcmwoKSB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgaHJlZiA9IGdsb2JhbFRoaXMubG9jYXRpb24/LmhyZWY7XG5cdFx0aWYgKHR5cGVvZiBocmVmID09PSBcInN0cmluZ1wiICYmIGhyZWYubGVuZ3RoID4gMCkgcmV0dXJuIGhyZWY7XG5cdH0gY2F0Y2gge31cblx0dHJ5IHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBkb2N1bWVudC5iYXNlVVJJID09PSBcInN0cmluZ1wiICYmIGRvY3VtZW50LmJhc2VVUkkubGVuZ3RoID4gMCkgcmV0dXJuIGRvY3VtZW50LmJhc2VVUkk7XG5cdH0gY2F0Y2gge31cblx0cmV0dXJuIFwiXCI7XG59XG5mdW5jdGlvbiByZXNvbHZlV29ya2VyU3BlY2lmaWVySHJlZihzcGVjKSB7XG5cdGNvbnN0IGJhc2UgPSBnZXRXb3JrZXJSZXNvbHZlQmFzZVVybCgpO1xuXHRpZiAoIWJhc2UubGVuZ3RoKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiW3VuaWZvcm1dIE5vIGJhc2UgVVJMIGZvciB3b3JrZXIgcmVzb2x1dGlvbiAobWlzc2luZyBsb2NhdGlvbiAvIGRvY3VtZW50LmJhc2VVUkkpXCIpO1xuXHRjb25zdCBub3JtYWxpemVkID0gc3BlYy5zdGFydHNXaXRoKFwiL1wiKSA/IHNwZWMucmVwbGFjZSgvXlxcLy8sIFwiLi9cIikgOiBzcGVjO1xuXHRyZXR1cm4gbmV3IFVSTChub3JtYWxpemVkLCBiYXNlKS5ocmVmO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9jaGFubmVsL0NoYW5uZWxzLnRzXG52YXIgUmVtb3RlQ2hhbm5lbHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIFNFTEZfQ0hBTk5FTCA9IHtcblx0bmFtZTogXCJ1bmtub3duXCIsXG5cdGluc3RhbmNlOiBudWxsXG59O1xudmFyIENIQU5ORUxfTUFQID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBpc1JlZmxlY3RBY3Rpb24kMSA9IChhY3Rpb24pID0+IFsuLi5PYmplY3QudmFsdWVzKFdSZWZsZWN0QWN0aW9uKV0uaW5jbHVkZXMoYWN0aW9uKTtcbnZhciBsb2FkV29ya2VyID0gKFdYKSA9PiB7XG5cdGlmIChXWCBpbnN0YW5jZW9mIFdvcmtlcikgcmV0dXJuIFdYO1xuXHRpZiAoV1ggaW5zdGFuY2VvZiBVUkwpIHJldHVybiBuZXcgV29ya2VyKFdYLmhyZWYsIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0aWYgKHR5cGVvZiBXWCA9PT0gXCJmdW5jdGlvblwiKSB0cnkge1xuXHRcdHJldHVybiBuZXcgV1goeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gV1goeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHR9XG5cdGlmICh0eXBlb2YgV1ggPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoV1guc3RhcnRzV2l0aChcIi9cIikpIHJldHVybiBuZXcgV29ya2VyKHJlc29sdmVXb3JrZXJTcGVjaWZpZXJIcmVmKFdYLnJlcGxhY2UoL15cXC8vLCBcIi4vXCIpKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRcdGlmIChVUkwuY2FuUGFyc2UoV1gpIHx8IFdYLnN0YXJ0c1dpdGgoXCIuL1wiKSkgcmV0dXJuIG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYoV1gpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdFx0cmV0dXJuIG5ldyBXb3JrZXIoVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbV1hdLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiIH0pKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHR9XG5cdGlmIChXWCBpbnN0YW5jZW9mIEJsb2IgfHwgV1ggaW5zdGFuY2VvZiBGaWxlKSByZXR1cm4gbmV3IFdvcmtlcihVUkwuY3JlYXRlT2JqZWN0VVJMKFdYKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRyZXR1cm4gV1ggPz8gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGwpO1xufTtcbnZhciBSZW1vdGVDaGFubmVsSGVscGVyID0gY2xhc3Mge1xuXHRjaGFubmVsTmFtZTtcblx0b3B0aW9ucztcblx0X2NoYW5uZWw7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBvcHRpb25zID0ge30pIHtcblx0XHR0aGlzLmNoYW5uZWxOYW1lID0gY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLl9jaGFubmVsID0gZ2V0V29ya2VyQ2hhbm5lbCgpO1xuXHR9XG5cdHJlcXVlc3QocGF0aCwgYWN0aW9uLCBhcmdzLCBvcHRpb25zID0ge30pIHtcblx0XHRpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIpIHBhdGggPSBbcGF0aF07XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYWN0aW9uKSAmJiBpc1JlZmxlY3RBY3Rpb24kMShwYXRoKSkge1xuXHRcdFx0b3B0aW9ucyA9IGFyZ3M7XG5cdFx0XHRhcmdzID0gYWN0aW9uO1xuXHRcdFx0YWN0aW9uID0gcGF0aDtcblx0XHRcdHBhdGggPSBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuaW52b2tlKHRoaXMuY2hhbm5lbE5hbWUsIGFjdGlvbiwgcGF0aCwgYXJncyk7XG5cdH1cblx0ZG9JbXBvcnRNb2R1bGUodXJsLCBvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuaW1wb3J0KHVybCwgdGhpcy5jaGFubmVsTmFtZSk7XG5cdH1cbn07XG52YXIgQ2hhbm5lbEhhbmRsZXIgPSBjbGFzcyB7XG5cdGNoYW5uZWw7XG5cdG9wdGlvbnM7XG5cdF91bmlmaWVkO1xuXHRicm9hZGNhc3RzID0ge307XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWwsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHRoaXMuY2hhbm5lbCA9IGNoYW5uZWw7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLl91bmlmaWVkID0gY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdFx0bmFtZTogY2hhbm5lbCxcblx0XHRcdGF1dG9MaXN0ZW46IGZhbHNlXG5cdFx0fSk7XG5cdFx0U0VMRl9DSEFOTkVMLm5hbWUgPSBjaGFubmVsO1xuXHRcdFNFTEZfQ0hBTk5FTC5pbnN0YW5jZSA9IHRoaXM7XG5cdH1cblx0Y3JlYXRlUmVtb3RlQ2hhbm5lbChjaGFubmVsLCBvcHRpb25zID0ge30sIGJyb2FkY2FzdCkge1xuXHRcdGlmIChicm9hZGNhc3QpIHtcblx0XHRcdHRoaXMuX3VuaWZpZWQuYXR0YWNoKGJyb2FkY2FzdCwgeyB0YXJnZXRDaGFubmVsOiBjaGFubmVsIH0pO1xuXHRcdFx0dGhpcy5icm9hZGNhc3RzW2NoYW5uZWxdID0gYnJvYWRjYXN0O1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBSZW1vdGVDaGFubmVsSGVscGVyKGNoYW5uZWwsIG9wdGlvbnMpKTtcblx0fVxuXHRnZXRDaGFubmVsKCkge1xuXHRcdHJldHVybiB0aGlzLmNoYW5uZWw7XG5cdH1cblx0cmVxdWVzdChwYXRoLCBhY3Rpb24sIGFyZ3MsIG9wdGlvbnMgPSB7fSwgdG9DaGFubmVsID0gXCJ3b3JrZXJcIikge1xuXHRcdGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIikgcGF0aCA9IFtwYXRoXTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShhY3Rpb24pICYmIGlzUmVmbGVjdEFjdGlvbiQxKHBhdGgpKSB7XG5cdFx0XHR0b0NoYW5uZWwgPSBvcHRpb25zO1xuXHRcdFx0b3B0aW9ucyA9IGFyZ3M7XG5cdFx0XHRhcmdzID0gYWN0aW9uO1xuXHRcdFx0YWN0aW9uID0gcGF0aDtcblx0XHRcdHBhdGggPSBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX3VuaWZpZWQuaW52b2tlKHRvQ2hhbm5lbCwgYWN0aW9uLCBwYXRoLCBhcmdzKTtcblx0fVxuXHRyZXNvbHZlUmVzcG9uc2UocmVxSWQsIHJlc3VsdCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcblx0fVxuXHRhc3luYyBoYW5kbGVBbmRSZXNwb25zZShyZXF1ZXN0LCByZXFJZCwgcmVzcG9uc2VGbikge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVJlcXVlc3QocmVxdWVzdCwgcmVxSWQsIHRoaXMuY2hhbm5lbCk7XG5cdFx0aWYgKCFyZXN1bHQpIHJldHVybjtcblx0XHRyZXNwb25zZUZuPy4ocmVzdWx0LnJlc3BvbnNlLCByZXN1bHQudHJhbnNmZXIpO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3VuaWZpZWQuY2xvc2UoKTtcblx0fVxufTtcbnZhciBpbml0Q2hhbm5lbEhhbmRsZXIgPSAoY2hhbm5lbCA9IFwiJGhvc3QkXCIpID0+IHtcblx0aWYgKFNFTEZfQ0hBTk5FTD8uaW5zdGFuY2UgJiYgY2hhbm5lbCA9PT0gXCIkaG9zdCRcIikgcmV0dXJuIFNFTEZfQ0hBTk5FTC5pbnN0YW5jZTtcblx0aWYgKENIQU5ORUxfTUFQLmhhcyhjaGFubmVsKSkgcmV0dXJuIENIQU5ORUxfTUFQLmdldChjaGFubmVsKSA/PyBudWxsO1xuXHRjb25zdCAkY2hhbm5lbCA9IG5ldyBDaGFubmVsSGFuZGxlcihjaGFubmVsKTtcblx0aWYgKGNoYW5uZWwgPT09IFwiJGhvc3QkXCIpIHtcblx0XHRTRUxGX0NIQU5ORUwubmFtZSA9IGNoYW5uZWw7XG5cdFx0U0VMRl9DSEFOTkVMLmluc3RhbmNlID0gJGNoYW5uZWw7XG5cdH1cblx0Q0hBTk5FTF9NQVAuc2V0KGNoYW5uZWwsICRjaGFubmVsKTtcblx0cmV0dXJuICRjaGFubmVsO1xufTtcbnZhciBjcmVhdGVIb3N0Q2hhbm5lbCA9IChjaGFubmVsID0gXCIkaG9zdCRcIikgPT4gaW5pdENoYW5uZWxIYW5kbGVyKGNoYW5uZWwpO1xudmFyIGNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsID0gKGNoYW5uZWwsIG9wdGlvbnMgPSB7fSwgYnJvYWRjYXN0ID0gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogbnVsbCkgPT4ge1xuXHRjb25zdCAkaG9zdCA9IGNyZWF0ZUhvc3RDaGFubmVsKGNoYW5uZWwgPz8gXCIkaG9zdCRcIik7XG5cdHJldHVybiAkaG9zdD8uY3JlYXRlUmVtb3RlQ2hhbm5lbD8uKGNoYW5uZWwsIG9wdGlvbnMsIGJyb2FkY2FzdCkgPz8gJGhvc3Q7XG59O1xudmFyICRjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbCA9IChjaGFubmVsLCBvcHRpb25zID0ge30sIGJyb2FkY2FzdCkgPT4ge1xuXHRpZiAoY2hhbm5lbCA9PSBudWxsIHx8IGJyb2FkY2FzdCkgcmV0dXJuO1xuXHRpZiAoUmVtb3RlQ2hhbm5lbHMuaGFzKGNoYW5uZWwpKSByZXR1cm4gUmVtb3RlQ2hhbm5lbHMuZ2V0KGNoYW5uZWwpO1xuXHRjb25zdCByZXN1bHQgPSB7XG5cdFx0Y2hhbm5lbCxcblx0XHRpbnN0YW5jZTogU0VMRl9DSEFOTkVMLmluc3RhbmNlLFxuXHRcdHJlbW90ZTogUHJvbWlzZS5yZXNvbHZlKG5ldyBSZW1vdGVDaGFubmVsSGVscGVyKGNoYW5uZWwsIG9wdGlvbnMpKVxuXHR9O1xuXHRSZW1vdGVDaGFubmVscy5zZXQoY2hhbm5lbCwgcmVzdWx0KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3N0b3JhZ2UvRGF0YUJhc2UudHNcbnZhciBoYW5kTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgd3JhcE1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIGRlc2NNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBSRUFEID0gKHRhcmdldCwga2V5KSA9PiB7XG5cdHJldHVybiBoYW5kTWFwLmdldCh0YXJnZXQpPy5ba2V5XTtcbn07XG52YXIgb2JqZWN0VG9SZWYgPSAob2JqLCBjaGFubmVsID0gU0VMRl9DSEFOTkVMPy5uYW1lLCB0b1RyYW5zZmVyKSA9PiB7XG5cdGlmICh0eXBlb2Ygb2JqID09IFwib2JqZWN0XCIgJiYgb2JqICE9IG51bGwgfHwgdHlwZW9mIG9iaiA9PSBcImZ1bmN0aW9uXCIgJiYgb2JqICE9IG51bGwpIHtcblx0XHRpZiAod3JhcE1hcC5oYXMob2JqKSkgcmV0dXJuIHdyYXBNYXAuZ2V0KG9iaik7XG5cdFx0aWYgKGhhbmRNYXAuaGFzKG9iaikpIHJldHVybiBoYW5kTWFwLmdldChvYmopO1xuXHRcdGlmIChpc05vdENvbXBsZXhBcnJheShvYmopKSByZXR1cm4gb2JqO1xuXHRcdGlmICh0b1RyYW5zZmVyPy5pbmNsdWRlcz8uKG9iaikpIHJldHVybiBvYmo7XG5cdFx0aWYgKGNoYW5uZWwgPT0gU0VMRl9DSEFOTkVMPy5uYW1lKSByZXR1cm4gb2JqO1xuXHRcdHJldHVybiB7XG5cdFx0XHQkaXNEZXNjcmlwdG9yOiB0cnVlLFxuXHRcdFx0cGF0aDogcmVnaXN0ZXJlZEluUGF0aC5nZXQob2JqKSA/PyAoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXRoID0gW1VVSUR2NCgpXTtcblx0XHRcdFx0d3JpdGVCeVBhdGgocGF0aCwgb2JqKTtcblx0XHRcdFx0cmV0dXJuIHBhdGg7XG5cdFx0XHR9KSgpLFxuXHRcdFx0b3duZXI6IFNFTEZfQ0hBTk5FTD8ubmFtZSxcblx0XHRcdGNoYW5uZWwsXG5cdFx0XHRwcmltaXRpdmU6IGlzUHJpbWl0aXZlKG9iaiksXG5cdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRhcmd1bWVudENvdW50OiBvYmogaW5zdGFuY2VvZiBGdW5jdGlvbiA/IG9iai5sZW5ndGggOiAtMVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGlzQ2FuSnVzdFJldHVybihvYmopID8gb2JqIDogbnVsbDtcbn07XG52YXIgJHJlcXVlc3RIYW5kbGVyID0gU3ltYm9sLmZvcihcIkByZXF1ZXN0SGFuZGxlclwiKTtcbnZhciAkZGVzY3JpcHRvciA9IFN5bWJvbC5mb3IoXCJAZGVzY3JpcHRvclwiKTtcbnZhciBub3JtYWxpemVSZWYgPSAodikgPT4ge1xuXHRpZiAoaXNDYW5KdXN0UmV0dXJuKHYpKSByZXR1cm4gdjtcblx0aWYgKHY/LlskZGVzY3JpcHRvcl0pIHJldHVybiB2O1xuXHRpZiAodj8uJGlzRGVzY3JpcHRvcikgcmV0dXJuIG1ha2VSZXF1ZXN0UHJveHkodiwgYXN5bmMgKCkgPT4gdm9pZCAwKTtcblx0aWYgKGlzTm90Q29tcGxleEFycmF5KHYpKSByZXR1cm4gdjtcblx0cmV0dXJuIG51bGw7XG59O1xudmFyIHVud3JhcERlc2NyaXB0b3JGcm9tUHJveHkgPSAodGFyZ2V0KSA9PiB7XG5cdGlmICh0eXBlb2YgdGFyZ2V0ICE9IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgdGFyZ2V0ICE9IFwib2JqZWN0XCIgfHwgdGFyZ2V0ID09IG51bGwpIHJldHVybiB0YXJnZXQ7XG5cdHJldHVybiB3cmFwTWFwLmdldCh0YXJnZXQpID8/IGhhbmRNYXAuZ2V0KHRhcmdldCkgPz8gdGFyZ2V0O1xufTtcbnZhciB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5UmVjdXJzaXZlID0gKHRhcmdldCkgPT4ge1xuXHRpZiAodHlwZW9mIHRhcmdldCAhPSBcIm9iamVjdFwiICYmIHR5cGVvZiB0YXJnZXQgIT0gXCJmdW5jdGlvblwiIHx8IHRhcmdldCA9PSBudWxsKSByZXR1cm4gdGFyZ2V0O1xuXHR0YXJnZXQgPSB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5KHRhcmdldCk7XG5cdGlmICh0eXBlb2YgdGFyZ2V0ICE9IFwib2JqZWN0XCIgJiYgdHlwZW9mIHRhcmdldCAhPSBcImZ1bmN0aW9uXCIgfHwgdGFyZ2V0ID09IG51bGwpIHJldHVybiB0YXJnZXQ7XG5cdGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHJldHVybiB0YXJnZXQubWFwKHVud3JhcERlc2NyaXB0b3JGcm9tUHJveHlSZWN1cnNpdmUpO1xuXHRpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWFwKSByZXR1cm4gbmV3IE1hcChBcnJheS5mcm9tKHRhcmdldC5lbnRyaWVzKCkpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBba2V5LCB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5UmVjdXJzaXZlKHZhbHVlKV0pKTtcblx0aWYgKHRhcmdldCBpbnN0YW5jZW9mIFNldCkgcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbSh0YXJnZXQudmFsdWVzKCkpLm1hcCh1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5UmVjdXJzaXZlKSk7XG5cdGlmICh0eXBlb2YgdGFyZ2V0ID09IFwib2JqZWN0XCIpIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRhcmdldCkpIHRhcmdldFtrZXldID0gdW53cmFwRGVzY3JpcHRvckZyb21Qcm94eVJlY3Vyc2l2ZSh0YXJnZXRba2V5XSk7XG5cdHJldHVybiB0YXJnZXQ7XG59O1xudmFyIHN0b3JlZERhdGEgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIHJlZ2lzdGVyZWRJblBhdGggPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciB0cmF2ZXJzZUJ5UGF0aCA9IChvYmosIHBhdGgpID0+IHtcblx0aWYgKHBhdGggIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShwYXRoKSkgcGF0aCA9IFtwYXRoXTtcblx0aWYgKHBhdGggPT0gbnVsbCB8fCBwYXRoPy5sZW5ndGggPCAxKSByZXR1cm4gb2JqO1xuXHRjb25zdCAkZGVzYyA9IG9iaj8uWyRkZXNjcmlwdG9yXSA/PyAob2JqPy4kaXNEZXNjcmlwdG9yID8gb2JqIDogbnVsbCk7XG5cdGlmICgkZGVzYyAmJiAkZGVzYz8ub3duZXIgPT0gU0VMRl9DSEFOTkVMPy5uYW1lKSBvYmogPSByZWFkQnlQYXRoKCRkZXNjPy5wYXRoKSA/PyBvYmo7XG5cdGlmIChpc1ByaW1pdGl2ZShvYmopKSByZXR1cm4gb2JqO1xuXHRmb3IgKGNvbnN0IGtleSBvZiBwYXRoKSB7XG5cdFx0b2JqID0gb2JqPy5ba2V5XTtcblx0XHRpZiAob2JqID09IG51bGwpIHJldHVybiBvYmo7XG5cdH1cblx0cmV0dXJuIG9iajtcbn07XG52YXIgcmVhZEJ5UGF0aCA9IChwYXRoKSA9PiB7XG5cdGlmIChwYXRoICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkocGF0aCkpIHBhdGggPSBbcGF0aF07XG5cdGlmIChwYXRoID09IG51bGwgfHwgcGF0aD8ubGVuZ3RoIDwgMSkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHJvb3QgPSBzdG9yZWREYXRhPy5nZXQ/LihwYXRoPy5bMF0pID8/IG51bGw7XG5cdHJldHVybiByb290ICE9IG51bGwgPyB0cmF2ZXJzZUJ5UGF0aChyb290LCBwYXRoPy5zbGljZT8uKDEpKSA6IG51bGw7XG59O1xudmFyIHdyaXRlQnlQYXRoID0gKHBhdGgsIGRhdGEpID0+IHtcblx0Y29uc3QgJGRlc2MgPSBkYXRhPy5bJGRlc2NyaXB0b3JdID8/IChkYXRhPy4kaXNEZXNjcmlwdG9yID8gZGF0YSA6IG51bGwpO1xuXHRpZiAoJGRlc2MgJiYgJGRlc2M/Lm93bmVyID09IFNFTEZfQ0hBTk5FTD8ubmFtZSkgZGF0YSA9IHJlYWRCeVBhdGgoJGRlc2M/LnBhdGgpID8/IGRhdGE7XG5cdGlmIChwYXRoICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkocGF0aCkpIHBhdGggPSBbcGF0aF07XG5cdGlmIChwYXRoID09IG51bGwgfHwgcGF0aD8ubGVuZ3RoIDwgMSkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHJvb3QgPSBzdG9yZWREYXRhPy5nZXQ/LihwYXRoPy5bMF0pID8/IG51bGw7XG5cdGlmIChwYXRoPy5sZW5ndGggPiAxKSB0cmF2ZXJzZUJ5UGF0aChyb290LCBwYXRoPy5zbGljZT8uKDEsIC0xKSlbcGF0aD8uW3BhdGg/Lmxlbmd0aCAtIDFdXSA9IGRhdGE7XG5cdGVsc2Ugc3RvcmVkRGF0YT8uc2V0Py4ocGF0aD8uWzBdLCBkYXRhKTtcblx0aWYgKHR5cGVvZiBkYXRhID09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGRhdGEgPT0gXCJmdW5jdGlvblwiKSByZWdpc3RlcmVkSW5QYXRoPy5zZXQ/LihkYXRhLCBwYXRoKTtcblx0cmV0dXJuIGRhdGE7XG59O1xudmFyIHJlbW92ZUJ5UGF0aCA9IChwYXRoKSA9PiB7XG5cdGlmIChwYXRoICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkocGF0aCkpIHBhdGggPSBbcGF0aF07XG5cdGlmIChwYXRoID09IG51bGwgfHwgcGF0aD8ubGVuZ3RoIDwgMSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShzdG9yZWREYXRhPy5nZXQ/LihwYXRoPy5bMF0pID8/IG51bGwpICYmIHBhdGg/Lmxlbmd0aCA8PSAxKSB7XG5cdFx0c3RvcmVkRGF0YT8uZGVsZXRlPy4ocGF0aD8uWzBdKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHJldHVybiBmYWxzZTtcbn07XG52YXIgcmVtb3ZlQnlEYXRhID0gKGRhdGEpID0+IHtcblx0Y29uc3QgJGRlc2MgPSBkYXRhPy5bJGRlc2NyaXB0b3JdID8/IChkYXRhPy4kaXNEZXNjcmlwdG9yID8gZGF0YSA6IG51bGwpO1xuXHRpZiAoJGRlc2MgJiYgJGRlc2M/Lm93bmVyID09IFNFTEZfQ0hBTk5FTD8ubmFtZSkgZGF0YSA9IHJlYWRCeVBhdGgoJGRlc2M/LnBhdGgpID8/IGRhdGE7XG5cdGNvbnN0IHBhdGggPSByZWdpc3RlcmVkSW5QYXRoPy5nZXQ/LihkYXRhKSA/PyAkZGVzYz8ucGF0aDtcblx0aWYgKHBhdGggPT0gbnVsbCB8fCBwYXRoPy5sZW5ndGggPCAxKSByZXR1cm4gZmFsc2U7XG5cdHJlbW92ZUJ5UGF0aChwYXRoKTtcblx0aWYgKHR5cGVvZiBkYXRhID09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGRhdGEgPT0gXCJmdW5jdGlvblwiKSByZWdpc3RlcmVkSW5QYXRoPy5kZWxldGU/LihkYXRhKTtcblx0cmV0dXJuIHRydWU7XG59O1xudmFyIGhhc05vUGF0aCA9IChkYXRhKSA9PiB7XG5cdGNvbnN0ICRkZXNjID0gZGF0YT8uWyRkZXNjcmlwdG9yXSA/PyAoZGF0YT8uJGlzRGVzY3JpcHRvciA/IGRhdGEgOiBudWxsKTtcblx0cmV0dXJuIChyZWdpc3RlcmVkSW5QYXRoPy5nZXQ/LihkYXRhKSA/PyAkZGVzYz8ucGF0aCkgPT0gbnVsbDtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9jb3JlL1JlcXVlc3RIYW5kbGVyLnRzXG52YXIgaXNPYmplY3QgPSAob2JqKSA9PiAodHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpICYmIG9iaiAhPSBudWxsO1xudmFyIGRlZmF1bHRSZWZsZWN0ID0ge1xuXHRnZXQ6ICh0LCBwKSA9PiB0Py5bcF0sXG5cdHNldDogKHQsIHAsIHYpID0+IHtcblx0XHR0W3BdID0gdjtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblx0aGFzOiAodCwgcCkgPT4gcCBpbiB0LFxuXHRhcHBseTogKHQsIGN0eCwgYXJncykgPT4gdC5hcHBseShjdHgsIGFyZ3MpLFxuXHRjb25zdHJ1Y3Q6ICh0LCBhcmdzKSA9PiBuZXcgdCguLi5hcmdzKSxcblx0ZGVsZXRlUHJvcGVydHk6ICh0LCBwKSA9PiBkZWxldGUgdFtwXSxcblx0b3duS2V5czogKHQpID0+IE9iamVjdC5rZXlzKHQpLFxuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICh0LCBwKSA9PiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHApLFxuXHRnZXRQcm90b3R5cGVPZjogKHQpID0+IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSxcblx0c2V0UHJvdG90eXBlT2Y6ICh0LCBwKSA9PiBPYmplY3Quc2V0UHJvdG90eXBlT2YodCwgcCksXG5cdGlzRXh0ZW5zaWJsZTogKHQpID0+IE9iamVjdC5pc0V4dGVuc2libGUodCksXG5cdHByZXZlbnRFeHRlbnNpb25zOiAodCkgPT4gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHQpXG59O1xuZnVuY3Rpb24gZXhlY3V0ZUFjdGlvbihhY3Rpb24sIHBhdGgsIGFyZ3MsIG9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCB7IGNoYW5uZWwgPSBcIlwiLCBzZW5kZXIgPSBcIlwiLCByZWZsZWN0ID0gZGVmYXVsdFJlZmxlY3QgfSA9IG9wdGlvbnM7XG5cdGNvbnN0IG9iaiA9IG9wdGlvbnMudGFyZ2V0ID8/IHJlYWRCeVBhdGgocGF0aCk7XG5cdGNvbnN0IHRvVHJhbnNmZXIgPSBbXTtcblx0bGV0IHJlc3VsdCA9IG51bGw7XG5cdGxldCBuZXdQYXRoID0gcGF0aDtcblx0c3dpdGNoIChTdHJpbmcoYWN0aW9uKS50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0Y2FzZSBcImltcG9ydFwiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uSU1QT1JUOlxuXHRcdFx0cmVzdWx0ID0gaW1wb3J0KFxuXHRcdFx0XHQvKiBAdml0ZS1pZ25vcmUgKi9cblx0XHRcdFx0YXJncz8uWzBdXG4pO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInRyYW5zZmVyXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5UUkFOU0ZFUjpcblx0XHRcdGlmIChpc0NhblRyYW5zZmVyKG9iaikgJiYgY2hhbm5lbCAhPT0gc2VuZGVyKSB0b1RyYW5zZmVyLnB1c2gob2JqKTtcblx0XHRcdHJlc3VsdCA9IG9iajtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJnZXRcIjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkdFVDoge1xuXHRcdFx0Y29uc3QgcHJvcCA9IGFyZ3M/LlswXTtcblx0XHRcdGNvbnN0IGdvdCA9IHJlZmxlY3QuZ2V0Py4ob2JqLCBwcm9wKSA/PyBvYmo/Lltwcm9wXTtcblx0XHRcdHJlc3VsdCA9IHR5cGVvZiBnb3QgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmogIT0gbnVsbCA/IGdvdC5iaW5kKG9iaikgOiBnb3Q7XG5cdFx0XHRuZXdQYXRoID0gWy4uLnBhdGgsIFN0cmluZyhwcm9wKV07XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Y2FzZSBcInNldFwiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uU0VUOiB7XG5cdFx0XHRjb25zdCBbcHJvcCwgdmFsdWVdID0gYXJncztcblx0XHRcdGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IGRlZXBPcGVyYXRlQW5kQ2xvbmUodmFsdWUsIG5vcm1hbGl6ZVJlZik7XG5cdFx0XHRpZiAob3B0aW9ucy50YXJnZXQpIHJlc3VsdCA9IHJlZmxlY3Quc2V0Py4ob2JqLCBwcm9wLCBub3JtYWxpemVkVmFsdWUpID8/IChvYmpbcHJvcF0gPSBub3JtYWxpemVkVmFsdWUsIHRydWUpO1xuXHRcdFx0ZWxzZSByZXN1bHQgPSByZWZsZWN0LnNldD8uKG9iaiwgcHJvcCwgbm9ybWFsaXplZFZhbHVlKSA/PyB3cml0ZUJ5UGF0aChbLi4ucGF0aCwgU3RyaW5nKHByb3ApXSwgbm9ybWFsaXplZFZhbHVlKTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRjYXNlIFwiYXBwbHlcIjpcblx0XHRjYXNlIFwiY2FsbFwiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uQVBQTFk6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5DQUxMOlxuXHRcdFx0aWYgKHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRjb25zdCBjdHggPSBvcHRpb25zLmNvbnRleHQgPz8gKG9wdGlvbnMudGFyZ2V0ID8gdm9pZCAwIDogcmVhZEJ5UGF0aChwYXRoLnNsaWNlKDAsIC0xKSkpO1xuXHRcdFx0XHRjb25zdCBub3JtYWxpemVkQXJncyA9IGRlZXBPcGVyYXRlQW5kQ2xvbmUoYXJncz8uWzBdID8/IGFyZ3MgPz8gW10sIG5vcm1hbGl6ZVJlZik7XG5cdFx0XHRcdHJlc3VsdCA9IHJlZmxlY3QuYXBwbHk/LihvYmosIGN0eCwgbm9ybWFsaXplZEFyZ3MpID8/IG9iai5hcHBseShjdHgsIG5vcm1hbGl6ZWRBcmdzKTtcblx0XHRcdFx0aWYgKGlzQ2FuVHJhbnNmZXIocmVzdWx0KSAmJiBwYXRoPy5hdCgtMSkgPT09IFwidHJhbnNmZXJcIiAmJiBjaGFubmVsICE9PSBzZW5kZXIpIHRvVHJhbnNmZXIucHVzaChyZXN1bHQpO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImNvbnN0cnVjdFwiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uQ09OU1RSVUNUOlxuXHRcdFx0aWYgKHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRjb25zdCBub3JtYWxpemVkQXJncyA9IGRlZXBPcGVyYXRlQW5kQ2xvbmUoYXJncz8uWzBdID8/IGFyZ3MgPz8gW10sIG5vcm1hbGl6ZVJlZik7XG5cdFx0XHRcdHJlc3VsdCA9IHJlZmxlY3QuY29uc3RydWN0Py4ob2JqLCBub3JtYWxpemVkQXJncykgPz8gbmV3IG9iaiguLi5ub3JtYWxpemVkQXJncyk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZGVsZXRlXCI6XG5cdFx0Y2FzZSBcImRlbGV0ZXByb3BlcnR5XCI6XG5cdFx0Y2FzZSBcImRpc3Bvc2VcIjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkRFTEVURTpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkRFTEVURV9QUk9QRVJUWTpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkRJU1BPU0U6XG5cdFx0XHRpZiAob3B0aW9ucy50YXJnZXQpIHtcblx0XHRcdFx0Y29uc3QgcHJvcCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcblx0XHRcdFx0cmVzdWx0ID0gcmVmbGVjdC5kZWxldGVQcm9wZXJ0eT8uKG9iaiwgcHJvcCkgPz8gZGVsZXRlIG9ialtwcm9wXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9IHBhdGg/Lmxlbmd0aCA+IDAgPyByZW1vdmVCeVBhdGgocGF0aCkgOiByZW1vdmVCeURhdGEob2JqKTtcblx0XHRcdFx0aWYgKHJlc3VsdCkgbmV3UGF0aCA9IHJlZ2lzdGVyZWRJblBhdGguZ2V0KG9iaikgPz8gW107XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiaGFzXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5IQVM6XG5cdFx0XHRyZXN1bHQgPSByZWZsZWN0Lmhhcz8uKG9iaiwgYXJncz8uWzBdKSA/PyAoaXNPYmplY3Qob2JqKSA/IGFyZ3M/LlswXSBpbiBvYmogOiBmYWxzZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwib3dua2V5c1wiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uT1dOX0tFWVM6XG5cdFx0XHRyZXN1bHQgPSByZWZsZWN0Lm93bktleXM/LihvYmopID8/IChpc09iamVjdChvYmopID8gT2JqZWN0LmtleXMob2JqKSA6IFtdKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJnZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcIjpcblx0XHRjYXNlIFwiZ2V0cHJvcGVydHlkZXNjcmlwdG9yXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5HRVRfT1dOX1BST1BFUlRZX0RFU0NSSVBUT1I6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5HRVRfUFJPUEVSVFlfREVTQ1JJUFRPUjpcblx0XHRcdHJlc3VsdCA9IHJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPy4ob2JqLCBhcmdzPy5bMF0gPz8gcGF0aD8uYXQoLTEpID8/IFwiXCIpID8/IChpc09iamVjdChvYmopID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGFyZ3M/LlswXSA/PyBwYXRoPy5hdCgtMSkgPz8gXCJcIikgOiB2b2lkIDApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImdldHByb3RvdHlwZW9mXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5HRVRfUFJPVE9UWVBFX09GOlxuXHRcdFx0cmVzdWx0ID0gcmVmbGVjdC5nZXRQcm90b3R5cGVPZj8uKG9iaikgPz8gKGlzT2JqZWN0KG9iaikgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA6IG51bGwpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInNldHByb3RvdHlwZW9mXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5TRVRfUFJPVE9UWVBFX09GOlxuXHRcdFx0cmVzdWx0ID0gcmVmbGVjdC5zZXRQcm90b3R5cGVPZj8uKG9iaiwgYXJncz8uWzBdKSA/PyAoaXNPYmplY3Qob2JqKSA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihvYmosIGFyZ3M/LlswXSkgOiBmYWxzZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiaXNleHRlbnNpYmxlXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5JU19FWFRFTlNJQkxFOlxuXHRcdFx0cmVzdWx0ID0gcmVmbGVjdC5pc0V4dGVuc2libGU/LihvYmopID8/IChpc09iamVjdChvYmopID8gT2JqZWN0LmlzRXh0ZW5zaWJsZShvYmopIDogdHJ1ZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwicHJldmVudGV4dGVuc2lvbnNcIjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLlBSRVZFTlRfRVhURU5TSU9OUzogcmVzdWx0ID0gcmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucz8uKG9iaikgPz8gKGlzT2JqZWN0KG9iaikgPyBPYmplY3QucHJldmVudEV4dGVuc2lvbnMob2JqKSA6IGZhbHNlKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHJlc3VsdCxcblx0XHR0b1RyYW5zZmVyLFxuXHRcdHBhdGg6IG5ld1BhdGhcblx0fTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmVzcG9uc2UocmVxSWQsIGFjdGlvbiwgY2hhbm5lbCwgc2VuZGVyLCBwYXRoLCByYXdSZXN1bHQsIHRvVHJhbnNmZXIpIHtcblx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgcmF3UmVzdWx0O1xuXHRjb25zdCBjYW5CZVJldHVybiA9IGlzQ2FuVHJhbnNmZXIocmVzdWx0KSAmJiB0b1RyYW5zZmVyLmluY2x1ZGVzKHJlc3VsdCkgfHwgaXNDYW5KdXN0UmV0dXJuKHJlc3VsdCk7XG5cdGxldCBmaW5hbFBhdGggPSBwYXRoO1xuXHRpZiAoIWNhbkJlUmV0dXJuICYmIGFjdGlvbiAhPT0gXCJnZXRcIiAmJiBhY3Rpb24gIT09IFdSZWZsZWN0QWN0aW9uLkdFVCAmJiAodHlwZW9mIHJlc3VsdCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgcmVzdWx0ID09PSBcImZ1bmN0aW9uXCIpKSB7XG5cdFx0aWYgKGhhc05vUGF0aChyZXN1bHQpKSB7XG5cdFx0XHRmaW5hbFBhdGggPSBbVVVJRHY0KCldO1xuXHRcdFx0d3JpdGVCeVBhdGgoZmluYWxQYXRoLCByZXN1bHQpO1xuXHRcdH0gZWxzZSBmaW5hbFBhdGggPSByZWdpc3RlcmVkSW5QYXRoLmdldChyZXN1bHQpID8/IFtdO1xuXHR9XG5cdGNvbnN0IGN0eCA9IHJlYWRCeVBhdGgoZmluYWxQYXRoKTtcblx0Y29uc3QgY3R4S2V5ID0gYWN0aW9uID09PSBcImdldFwiIHx8IGFjdGlvbiA9PT0gV1JlZmxlY3RBY3Rpb24uR0VUID8gZmluYWxQYXRoPy5hdCgtMSkgOiB2b2lkIDA7XG5cdGNvbnN0IG9iaiA9IHJlYWRCeVBhdGgocGF0aCk7XG5cdGNvbnN0IHBheWxvYWQgPSBkZWVwT3BlcmF0ZUFuZENsb25lKHJlc3VsdCwgKGVsKSA9PiBvYmplY3RUb1JlZihlbCwgY2hhbm5lbCwgdG9UcmFuc2ZlcikpID8/IHJlc3VsdDtcblx0cmV0dXJuIHtcblx0XHRyZXNwb25zZToge1xuXHRcdFx0Y2hhbm5lbDogc2VuZGVyLFxuXHRcdFx0c2VuZGVyOiBjaGFubmVsLFxuXHRcdFx0cmVxSWQsXG5cdFx0XHRhY3Rpb24sXG5cdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdHJlc3VsdDogY2FuQmVSZXR1cm4gPyBwYXlsb2FkIDogbnVsbCxcblx0XHRcdFx0dHlwZTogdHlwZW9mIHJlc3VsdCxcblx0XHRcdFx0Y2hhbm5lbDogc2VuZGVyLFxuXHRcdFx0XHRzZW5kZXI6IGNoYW5uZWwsXG5cdFx0XHRcdGRlc2NyaXB0b3I6IHtcblx0XHRcdFx0XHQkaXNEZXNjcmlwdG9yOiB0cnVlLFxuXHRcdFx0XHRcdHBhdGg6IGZpbmFsUGF0aCxcblx0XHRcdFx0XHRvd25lcjogY2hhbm5lbCxcblx0XHRcdFx0XHRjaGFubmVsLFxuXHRcdFx0XHRcdHByaW1pdGl2ZTogaXNQcmltaXRpdmUocmVzdWx0KSxcblx0XHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRhcmd1bWVudENvdW50OiBvYmogaW5zdGFuY2VvZiBGdW5jdGlvbiA/IG9iai5sZW5ndGggOiAtMSxcblx0XHRcdFx0XHQuLi5pc09iamVjdChjdHgpICYmIGN0eEtleSAhPSBudWxsID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdHgsIGN0eEtleSkgOiB7fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR0cmFuc2ZlcjogdG9UcmFuc2ZlclxuXHR9O1xufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdChyZXF1ZXN0LCByZXFJZCwgY2hhbm5lbE5hbWUsIG9wdGlvbnMpIHtcblx0Y29uc3QgeyBjaGFubmVsLCBzZW5kZXIsIHBhdGgsIGFjdGlvbiwgYXJncyB9ID0gcmVxdWVzdDtcblx0aWYgKGNoYW5uZWwgIT09IGNoYW5uZWxOYW1lKSByZXR1cm4gbnVsbDtcblx0Y29uc3QgeyByZXN1bHQsIHRvVHJhbnNmZXIsIHBhdGg6IG5ld1BhdGggfSA9IGV4ZWN1dGVBY3Rpb24oYWN0aW9uLCBwYXRoLCBhcmdzLCB7XG5cdFx0Y2hhbm5lbCxcblx0XHRzZW5kZXIsXG5cdFx0Li4ub3B0aW9uc1xuXHR9KTtcblx0cmV0dXJuIGJ1aWxkUmVzcG9uc2UocmVxSWQsIGFjdGlvbiwgY2hhbm5lbE5hbWUsIHNlbmRlciwgbmV3UGF0aCwgcmVzdWx0LCB0b1RyYW5zZmVyKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZU9iamVjdEhhbmRsZXIodGFyZ2V0LCByZWZsZWN0ID0gZGVmYXVsdFJlZmxlY3QpIHtcblx0cmV0dXJuIGFzeW5jIChhY3Rpb24sIHBhdGgsIGFyZ3MpID0+IHtcblx0XHRsZXQgcGFyZW50ID0gdGFyZ2V0O1xuXHRcdGxldCBjdXJyZW50ID0gdGFyZ2V0O1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuXHRcdFx0cGFyZW50ID0gY3VycmVudDtcblx0XHRcdGN1cnJlbnQgPSBjdXJyZW50Py5bcGF0aFtpXV07XG5cdFx0XHRpZiAoY3VycmVudCA9PT0gdm9pZCAwICYmIGkgPCBwYXRoLmxlbmd0aCAtIDEpIHRocm93IG5ldyBFcnJvcihgUGF0aCBzZWdtZW50ICcke3BhdGhbaV19JyBub3QgZm91bmRgKTtcblx0XHR9XG5cdFx0Y29uc3QgcHJvcCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcblx0XHRzd2l0Y2ggKFN0cmluZyhhY3Rpb24pLnRvTG93ZXJDYXNlKCkpIHtcblx0XHRcdGNhc2UgXCJnZXRcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uR0VUOiByZXR1cm4gY3VycmVudDtcblx0XHRcdGNhc2UgXCJzZXRcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uU0VUOlxuXHRcdFx0XHRwYXJlbnRbcHJvcF0gPSBhcmdzWzBdO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGNhc2UgXCJjYWxsXCI6XG5cdFx0XHRjYXNlIFwiYXBwbHlcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uQVBQTFk6XG5cdFx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkNBTEw6XG5cdFx0XHRcdGlmICh0eXBlb2YgY3VycmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2FsbEFyZ3MgPSBBcnJheS5pc0FycmF5KGFyZ3NbMF0pID8gYXJnc1swXSA6IGFyZ3M7XG5cdFx0XHRcdFx0cmV0dXJuIGF3YWl0IGN1cnJlbnQuYXBwbHkocGFyZW50LCBjYWxsQXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGAnJHtwcm9wfScgaXMgbm90IGEgZnVuY3Rpb25gKTtcblx0XHRcdGNhc2UgXCJjb25zdHJ1Y3RcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uQ09OU1RSVUNUOlxuXHRcdFx0XHRpZiAodHlwZW9mIGN1cnJlbnQgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdGNvbnN0IGN0b3JBcmdzID0gQXJyYXkuaXNBcnJheShhcmdzWzBdKSA/IGFyZ3NbMF0gOiBhcmdzO1xuXHRcdFx0XHRcdHJldHVybiBuZXcgY3VycmVudCguLi5jdG9yQXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGAnJHtwcm9wfScgaXMgbm90IGEgY29uc3RydWN0b3JgKTtcblx0XHRcdGNhc2UgXCJoYXNcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uSEFTOiByZXR1cm4gcHJvcCBpbiBwYXJlbnQ7XG5cdFx0XHRjYXNlIFwiZGVsZXRlXCI6XG5cdFx0XHRjYXNlIFwiZGVsZXRlcHJvcGVydHlcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uREVMRVRFX1BST1BFUlRZOiByZXR1cm4gZGVsZXRlIHBhcmVudFtwcm9wXTtcblx0XHRcdGNhc2UgXCJvd25rZXlzXCI6XG5cdFx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLk9XTl9LRVlTOiByZXR1cm4gT2JqZWN0LmtleXMoY3VycmVudCA/PyBwYXJlbnQpO1xuXHRcdFx0ZGVmYXVsdDogcmV0dXJuIGN1cnJlbnQ7XG5cdFx0fVxuXHR9O1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9jaGFubmVsL0Nvbm5lY3Rpb24udHNcbnZhciBDaGFubmVsQ29ubmVjdGlvbiA9IGNsYXNzIHtcblx0X25hbWU7XG5cdF90cmFuc3BvcnRUeXBlO1xuXHRfaWQgPSBVVUlEdjQoKTtcblx0X3N0YXRlID0gXCJkaXNjb25uZWN0ZWRcIjtcblx0X2luYm91bmQgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxZTMgfSk7XG5cdF9vdXRib3VuZCA9IG5ldyBDaGFubmVsU3ViamVjdCh7IGJ1ZmZlclNpemU6IDFlMyB9KTtcblx0X3N0YXRlQ2hhbmdlcyA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRfY29ubmVjdGVkUGVlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3VicyA9IFtdO1xuXHRfc3RhdHMgPSB7XG5cdFx0bWVzc2FnZXNTZW50OiAwLFxuXHRcdG1lc3NhZ2VzUmVjZWl2ZWQ6IDAsXG5cdFx0Ynl0ZXNUcmFuc2ZlcnJlZDogMCxcblx0XHRsYXRlbmN5TXM6IDAsXG5cdFx0dXB0aW1lOiAwLFxuXHRcdHJlY29ubmVjdENvdW50OiAwXG5cdH07XG5cdF9zdGFydFRpbWUgPSAwO1xuXHRfcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9idWZmZXIgPSBbXTtcblx0X29wdHM7XG5cdGNvbnN0cnVjdG9yKF9uYW1lLCBfdHJhbnNwb3J0VHlwZSA9IFwiaW50ZXJuYWxcIiwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0dGhpcy5fbmFtZSA9IF9uYW1lO1xuXHRcdHRoaXMuX3RyYW5zcG9ydFR5cGUgPSBfdHJhbnNwb3J0VHlwZTtcblx0XHR0aGlzLl9vcHRzID0ge1xuXHRcdFx0dGltZW91dDogM2U0LFxuXHRcdFx0YXV0b1JlY29ubmVjdDogdHJ1ZSxcblx0XHRcdHJlY29ubmVjdEludGVydmFsOiAxZTMsXG5cdFx0XHRtYXhSZWNvbm5lY3RBdHRlbXB0czogNSxcblx0XHRcdGJ1ZmZlck1lc3NhZ2VzOiB0cnVlLFxuXHRcdFx0YnVmZmVyU2l6ZTogMWUzLFxuXHRcdFx0bWV0YWRhdGE6IHt9LFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH07XG5cdFx0dGhpcy5fc2V0dXBTdWJzY3JpcHRpb25zKCk7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyLCBmcm9tQ2hhbm5lbCkge1xuXHRcdHJldHVybiAoZnJvbUNoYW5uZWwgPyBmaWx0ZXIoKG0pID0+IG0uc2VuZGVyID09PSBmcm9tQ2hhbm5lbCkodGhpcy5faW5ib3VuZCkgOiB0aGlzLl9pbmJvdW5kKS5zdWJzY3JpYmUodHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcik7XG5cdH1cblx0bmV4dChtZXNzYWdlKSB7XG5cdFx0aWYgKHRoaXMuX3N0YXRlICE9PSBcImNvbm5lY3RlZFwiKSB7XG5cdFx0XHRpZiAodGhpcy5fb3B0cy5idWZmZXJNZXNzYWdlcyAmJiB0aGlzLl9idWZmZXIubGVuZ3RoIDwgdGhpcy5fb3B0cy5idWZmZXJTaXplKSB0aGlzLl9idWZmZXIucHVzaChtZXNzYWdlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5fb3V0Ym91bmQubmV4dChtZXNzYWdlKTtcblx0XHR0aGlzLl9zdGF0cy5tZXNzYWdlc1NlbnQrKztcblx0fVxuXHRhc3luYyByZXF1ZXN0KHRvQ2hhbm5lbCwgcGF5bG9hZCwgb3B0cyA9IHt9KSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBVVUlEdjQoKTtcblx0XHRjb25zdCByZXNvbHZlcnMgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTtcblx0XHR0aGlzLl9wZW5kaW5nLnNldChyZXFJZCwgcmVzb2x2ZXJzKTtcblx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fcGVuZGluZy5oYXMocmVxSWQpKSB7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKHJlcUlkKTtcblx0XHRcdFx0cmVzb2x2ZXJzLnJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBSZXF1ZXN0IHRpbWVvdXRgKSk7XG5cdFx0XHR9XG5cdFx0fSwgb3B0cy50aW1lb3V0ID8/IHRoaXMuX29wdHMudGltZW91dCk7XG5cdFx0dGhpcy5uZXh0KHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IHRvQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdHR5cGU6IFwicmVxdWVzdFwiLFxuXHRcdFx0cmVxSWQsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdC4uLnBheWxvYWQsXG5cdFx0XHRcdGFjdGlvbjogb3B0cy5hY3Rpb24sXG5cdFx0XHRcdHBhdGg6IG9wdHMucGF0aFxuXHRcdFx0fSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHRcdHJldHVybiByZXNvbHZlcnMucHJvbWlzZS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KSk7XG5cdH1cblx0cmVzcG9uZChvcmlnaW5hbCwgcGF5bG9hZCkge1xuXHRcdHRoaXMubmV4dCh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBvcmlnaW5hbC5zZW5kZXIsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX25hbWUsXG5cdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRyZXFJZDogb3JpZ2luYWwucmVxSWQsXG5cdFx0XHRwYXlsb2FkLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdH1cblx0ZW1pdCh0b0NoYW5uZWwsIGV2ZW50VHlwZSwgZGF0YSkge1xuXHRcdHRoaXMubmV4dCh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiB0b0NoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX25hbWUsXG5cdFx0XHR0eXBlOiBcImV2ZW50XCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdHR5cGU6IGV2ZW50VHlwZSxcblx0XHRcdFx0ZGF0YVxuXHRcdFx0fSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHR9XG5cdHN1YnNjcmliZU91dGJvdW5kKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX291dGJvdW5kLnN1YnNjcmliZSh0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyKTtcblx0fVxuXHRwdXNoSW5ib3VuZChtZXNzYWdlKSB7XG5cdFx0dGhpcy5fc3RhdHMubWVzc2FnZXNSZWNlaXZlZCsrO1xuXHRcdGlmIChtZXNzYWdlLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBtZXNzYWdlLnJlcUlkKSB7XG5cdFx0XHRjb25zdCByID0gdGhpcy5fcGVuZGluZy5nZXQobWVzc2FnZS5yZXFJZCk7XG5cdFx0XHRpZiAocikge1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShtZXNzYWdlLnJlcUlkKTtcblx0XHRcdFx0ci5yZXNvbHZlKG1lc3NhZ2UucGF5bG9hZCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5faW5ib3VuZC5uZXh0KG1lc3NhZ2UpO1xuXHR9XG5cdGFzeW5jIGNvbm5lY3QoKSB7XG5cdFx0aWYgKHRoaXMuX3N0YXRlID09PSBcImNvbm5lY3RlZFwiKSByZXR1cm47XG5cdFx0dGhpcy5fc2V0U3RhdGUoXCJjb25uZWN0aW5nXCIpO1xuXHRcdHRoaXMuX3N0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cdFx0dGhpcy5fc2V0U3RhdGUoXCJjb25uZWN0ZWRcIik7XG5cdFx0dGhpcy5fZmx1c2hCdWZmZXIoKTtcblx0fVxuXHRkaXNjb25uZWN0KCkge1xuXHRcdGlmICh0aGlzLl9zdGF0ZSA9PT0gXCJkaXNjb25uZWN0ZWRcIiB8fCB0aGlzLl9zdGF0ZSA9PT0gXCJjbG9zZWRcIikgcmV0dXJuO1xuXHRcdHRoaXMuX3NldFN0YXRlKFwiZGlzY29ubmVjdGVkXCIpO1xuXHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcblx0XHR0aGlzLl9zdWJzID0gW107XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5kaXNjb25uZWN0KCk7XG5cdFx0dGhpcy5fc2V0U3RhdGUoXCJjbG9zZWRcIik7XG5cdFx0dGhpcy5faW5ib3VuZC5jb21wbGV0ZSgpO1xuXHRcdHRoaXMuX291dGJvdW5kLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG5cdH1cblx0bWFya0Nvbm5lY3RlZCgpIHtcblx0XHR0aGlzLl9zZXRTdGF0ZShcImNvbm5lY3RlZFwiKTtcblx0XHR0aGlzLl9mbHVzaEJ1ZmZlcigpO1xuXHR9XG5cdG1hcmtEaXNjb25uZWN0ZWQoKSB7XG5cdFx0dGhpcy5fc2V0U3RhdGUoXCJkaXNjb25uZWN0ZWRcIik7XG5cdH1cblx0X3NldFN0YXRlKHN0YXRlKSB7XG5cdFx0aWYgKHRoaXMuX3N0YXRlICE9PSBzdGF0ZSkge1xuXHRcdFx0dGhpcy5fc3RhdGUgPSBzdGF0ZTtcblx0XHRcdHRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KHN0YXRlKTtcblx0XHR9XG5cdH1cblx0X2ZsdXNoQnVmZmVyKCkge1xuXHRcdGZvciAoY29uc3QgbXNnIG9mIHRoaXMuX2J1ZmZlcikgdGhpcy5fb3V0Ym91bmQubmV4dChtc2cpO1xuXHRcdHRoaXMuX2J1ZmZlciA9IFtdO1xuXHR9XG5cdF9zZXR1cFN1YnNjcmlwdGlvbnMoKSB7XG5cdFx0dGhpcy5fc3Vicy5wdXNoKHRoaXMuX2luYm91bmQuc3Vic2NyaWJlKHsgbmV4dDogKG1zZykgPT4ge1xuXHRcdFx0aWYgKG1zZy50eXBlID09PSBcInNpZ25hbFwiICYmIG1zZy5wYXlsb2FkPy50eXBlID09PSBcImNvbm5lY3RcIikgdGhpcy5fY29ubmVjdGVkUGVlcnMuc2V0KG1zZy5zZW5kZXIsIHtcblx0XHRcdFx0bmFtZTogbXNnLnNlbmRlcixcblx0XHRcdFx0c3RhdGU6IFwiY29ubmVjdGVkXCIsXG5cdFx0XHRcdGlzSG9zdDogZmFsc2Vcblx0XHRcdH0pO1xuXHRcdH0gfSkpO1xuXHR9XG5cdGdldCBpZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5faWQ7XG5cdH1cblx0Z2V0IG5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX25hbWU7XG5cdH1cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZTtcblx0fVxuXHRnZXQgdHJhbnNwb3J0VHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdHJhbnNwb3J0VHlwZTtcblx0fVxuXHRnZXQgc3RhdHMoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLnRoaXMuX3N0YXRzLFxuXHRcdFx0dXB0aW1lOiB0aGlzLl9zdGFydFRpbWUgPyBEYXRlLm5vdygpIC0gdGhpcy5fc3RhcnRUaW1lIDogMFxuXHRcdH07XG5cdH1cblx0Z2V0IHN0YXRlQ2hhbmdlcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGVDaGFuZ2VzO1xuXHR9XG5cdGdldCBjb25uZWN0ZWRQZWVycygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2Nvbm5lY3RlZFBlZXJzLmtleXMoKV07XG5cdH1cblx0Z2V0IG1ldGEoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiB0aGlzLl9pZCxcblx0XHRcdG5hbWU6IHRoaXMuX25hbWUsXG5cdFx0XHRzdGF0ZTogdGhpcy5fc3RhdGUsXG5cdFx0XHRpc0hvc3Q6IGZhbHNlLFxuXHRcdFx0Y29ubmVjdGVkQ2hhbm5lbHM6IG5ldyBTZXQodGhpcy5fY29ubmVjdGVkUGVlcnMua2V5cygpKVxuXHRcdH07XG5cdH1cbn07XG52YXIgQ29ubmVjdGlvblBvb2wgPSBjbGFzcyBDb25uZWN0aW9uUG9vbCB7XG5cdF9jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHN0YXRpYyBfaW5zdGFuY2UgPSBudWxsO1xuXHRzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7XG5cdFx0aWYgKCFDb25uZWN0aW9uUG9vbC5faW5zdGFuY2UpIENvbm5lY3Rpb25Qb29sLl9pbnN0YW5jZSA9IG5ldyBDb25uZWN0aW9uUG9vbCgpO1xuXHRcdHJldHVybiBDb25uZWN0aW9uUG9vbC5faW5zdGFuY2U7XG5cdH1cblx0Z2V0T3JDcmVhdGUobmFtZSwgdHJhbnNwb3J0VHlwZSA9IFwiaW50ZXJuYWxcIiwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0aWYgKCF0aGlzLl9jb25uZWN0aW9ucy5oYXMobmFtZSkpIHRoaXMuX2Nvbm5lY3Rpb25zLnNldChuYW1lLCBuZXcgQ2hhbm5lbENvbm5lY3Rpb24obmFtZSwgdHJhbnNwb3J0VHlwZSwgb3B0aW9ucykpO1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9ucy5nZXQobmFtZSk7XG5cdH1cblx0Z2V0KG5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbnMuZ2V0KG5hbWUpO1xuXHR9XG5cdGhhcyhuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25zLmhhcyhuYW1lKTtcblx0fVxuXHRkZWxldGUobmFtZSkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25zLmdldChuYW1lKT8uY2xvc2UoKTtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbnMuZGVsZXRlKG5hbWUpO1xuXHR9XG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25zLmZvckVhY2goKGMpID0+IGMuY2xvc2UoKSk7XG5cdFx0dGhpcy5fY29ubmVjdGlvbnMuY2xlYXIoKTtcblx0fVxuXHRnZXQgc2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbnMuc2l6ZTtcblx0fVxuXHRnZXQgbmFtZXMoKSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLl9jb25uZWN0aW9ucy5rZXlzKCldO1xuXHR9XG59O1xudmFyIGdldENvbm5lY3Rpb25Qb29sID0gKCkgPT4gQ29ubmVjdGlvblBvb2wuZ2V0SW5zdGFuY2UoKTtcbnZhciBnZXRDb25uZWN0aW9uID0gKG5hbWUsIHRyYW5zcG9ydFR5cGUsIG9wdGlvbnMpID0+IGdldENvbm5lY3Rpb25Qb29sKCkuZ2V0T3JDcmVhdGUobmFtZSwgdHJhbnNwb3J0VHlwZSwgb3B0aW9ucyk7XG52YXIgZ2V0SG9zdENvbm5lY3Rpb24gPSAobmFtZSA9IFwiJGhvc3QkXCIsIG9wdGlvbnMpID0+IGdldENvbm5lY3Rpb24obmFtZSwgXCJpbnRlcm5hbFwiLCB7XG5cdC4uLm9wdGlvbnMsXG5cdG1ldGFkYXRhOiB7XG5cdFx0Li4ub3B0aW9ucz8ubWV0YWRhdGEsXG5cdFx0aXNIb3N0OiB0cnVlXG5cdH1cbn0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvVHJhbnNwb3J0LnRzXG52YXIgVHJhbnNwb3J0QWRhcHRlciA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfdHJhbnNwb3J0VHlwZTtcblx0X29wdGlvbnM7XG5cdF9zdWJzY3JpcHRpb25zID0gW107XG5cdF9pc0F0dGFjaGVkID0gZmFsc2U7XG5cdF9pbmJvdW5kID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogMTAwIH0pO1xuXHRfb3V0Ym91bmQgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdF9pbmNvbWluZ0Nvbm5lY3Rpb25zID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogNTAgfSk7XG5cdF9hY2NlcHRDYWxsYmFjayA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKF9jaGFubmVsTmFtZSwgX3RyYW5zcG9ydFR5cGUsIF9vcHRpb25zID0ge30pIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl90cmFuc3BvcnRUeXBlID0gX3RyYW5zcG9ydFR5cGU7XG5cdFx0dGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucyA9IFtdO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSBmYWxzZTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5ib3VuZC5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuXHR9XG5cdHNlbmQobXNnLCB0cmFuc2Zlcikge1xuXHRcdHRoaXMuX291dGJvdW5kLm5leHQoe1xuXHRcdFx0Li4ubXNnLFxuXHRcdFx0dHJhbnNmZXJhYmxlOiB0cmFuc2ZlclxuXHRcdH0pO1xuXHR9XG5cdGdldCBvbkluY29taW5nQ29ubmVjdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5jb21pbmdDb25uZWN0aW9ucztcblx0fVxuXHRzdWJzY3JpYmVJbmNvbWluZyhoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luY29taW5nQ29ubmVjdGlvbnMuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdHNldEFjY2VwdENhbGxiYWNrKGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5fYWNjZXB0Q2FsbGJhY2sgPSBjYWxsYmFjaztcblx0fVxuXHRfZW1pdEluY29taW5nQ29ubmVjdGlvbihjb25uZWN0aW9uKSB7XG5cdFx0dGhpcy5faW5jb21pbmdDb25uZWN0aW9ucy5uZXh0KGNvbm5lY3Rpb24pO1xuXHR9XG5cdGFzeW5jIF9zaG91bGRBY2NlcHRDb25uZWN0aW9uKGNvbm5lY3Rpb24pIHtcblx0XHRpZiAoIXRoaXMuX2FjY2VwdENhbGxiYWNrKSByZXR1cm4gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcy5fYWNjZXB0Q2FsbGJhY2soY29ubmVjdGlvbik7XG5cdH1cblx0Z2V0IGNoYW5uZWxOYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsTmFtZTtcblx0fVxuXHRnZXQgaXNBdHRhY2hlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5faXNBdHRhY2hlZDtcblx0fVxuXHRnZXQgaW5ib3VuZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5ib3VuZDtcblx0fVxuXHRnZXQgb3V0Ym91bmQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX291dGJvdW5kO1xuXHR9XG59O1xudmFyIFdvcmtlclRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF93b3JrZXJTb3VyY2U7XG5cdF93b3JrZXIgPSBudWxsO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9vd25Xb3JrZXIgPSBmYWxzZTtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIF93b3JrZXJTb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKGNoYW5uZWxOYW1lLCBcIndvcmtlclwiLCBvcHRpb25zKTtcblx0XHR0aGlzLl93b3JrZXJTb3VyY2UgPSBfd29ya2VyU291cmNlO1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdHRoaXMuX3dvcmtlciA9IHRoaXMuX3Jlc29sdmVXb3JrZXIoKTtcblx0XHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRoaXMuX3dvcmtlcik7XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRoaXMuX3dvcmtlciwgKGRhdGEpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKGRhdGEpLCAoZXJyKSA9PiB0aGlzLl9pbmJvdW5kLmVycm9yKGVycikpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2csIG1zZy50cmFuc2ZlcmFibGUpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0ZGV0YWNoKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdGlmICh0aGlzLl9vd25Xb3JrZXIgJiYgdGhpcy5fd29ya2VyKSB0aGlzLl93b3JrZXIudGVybWluYXRlKCk7XG5cdFx0dGhpcy5fd29ya2VyID0gbnVsbDtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxuXHRyZXF1ZXN0Q2hhbm5lbChjaGFubmVsLCBzZW5kZXIsIG9wdGlvbnMsIHBvcnQpIHtcblx0XHRjb25zdCB0cmFuc2ZlciA9IHBvcnQgPyBbcG9ydF0gOiBbXTtcblx0XHR0aGlzLl93b3JrZXI/LnBvc3RNZXNzYWdlKHtcblx0XHRcdHR5cGU6IFwiY3JlYXRlQ2hhbm5lbFwiLFxuXHRcdFx0Y2hhbm5lbCxcblx0XHRcdHNlbmRlcixcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHRtZXNzYWdlUG9ydDogcG9ydCxcblx0XHRcdHJlcUlkOiBVVUlEdjQoKVxuXHRcdH0sIHsgdHJhbnNmZXIgfSk7XG5cdH1cblx0Y29ubmVjdENoYW5uZWwoY2hhbm5lbCwgc2VuZGVyLCBwb3J0LCBvcHRpb25zKSB7XG5cdFx0Y29uc3QgdHJhbnNmZXIgPSBwb3J0ID8gW3BvcnRdIDogW107XG5cdFx0dGhpcy5fd29ya2VyPy5wb3N0TWVzc2FnZSh7XG5cdFx0XHR0eXBlOiBcImNvbm5lY3RDaGFubmVsXCIsXG5cdFx0XHRjaGFubmVsLFxuXHRcdFx0c2VuZGVyLFxuXHRcdFx0cG9ydCxcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHRyZXFJZDogVVVJRHY0KClcblx0XHR9LCB7IHRyYW5zZmVyIH0pO1xuXHR9XG5cdGxpc3RDaGFubmVscygpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdGNvbnN0IHJlcUlkID0gVVVJRHY0KCk7XG5cdFx0XHRjb25zdCBoYW5kbGVyID0gKG1zZykgPT4ge1xuXHRcdFx0XHRjb25zdCBkYXRhID0gbXNnO1xuXHRcdFx0XHRpZiAoZGF0YS50eXBlID09PSBcImNoYW5uZWxMaXN0XCIgJiYgZGF0YS5yZXFJZCA9PT0gcmVxSWQpIHtcblx0XHRcdFx0XHRzdWIudW5zdWJzY3JpYmUoKTtcblx0XHRcdFx0XHRyZXNvbHZlKGRhdGEuY2hhbm5lbHMgPz8gW10pO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc3ViID0gdGhpcy5faW5ib3VuZC5zdWJzY3JpYmUoaGFuZGxlcik7XG5cdFx0XHR0aGlzLl93b3JrZXI/LnBvc3RNZXNzYWdlKHtcblx0XHRcdFx0dHlwZTogXCJsaXN0Q2hhbm5lbHNcIixcblx0XHRcdFx0cmVxSWRcblx0XHRcdH0pO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHN1Yi51bnN1YnNjcmliZSgpO1xuXHRcdFx0XHRyZXNvbHZlKFtdKTtcblx0XHRcdH0sIDVlMyk7XG5cdFx0fSk7XG5cdH1cblx0X2hhbmRsZUluY29taW5nKGRhdGEpIHtcblx0XHRpZiAoZGF0YT8udHlwZSA9PT0gXCJjaGFubmVsQ3JlYXRlZFwiIHx8IGRhdGE/LnR5cGUgPT09IFwiY2hhbm5lbENvbm5lY3RlZFwiKSB0aGlzLl9lbWl0SW5jb21pbmdDb25uZWN0aW9uKHtcblx0XHRcdGlkOiBkYXRhLnJlcUlkID8/IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogZGF0YS5jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBkYXRhLnNlbmRlciA/PyBcIndvcmtlclwiLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogXCJ3b3JrZXJcIixcblx0XHRcdGRhdGEsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KTtcblx0XHR0aGlzLl9pbmJvdW5kLm5leHQoZGF0YSk7XG5cdH1cblx0X3Jlc29sdmVXb3JrZXIoKSB7XG5cdFx0aWYgKHRoaXMuX3dvcmtlclNvdXJjZSBpbnN0YW5jZW9mIFdvcmtlcikgcmV0dXJuIHRoaXMuX3dvcmtlclNvdXJjZTtcblx0XHR0aGlzLl9vd25Xb3JrZXIgPSB0cnVlO1xuXHRcdGlmICh0eXBlb2YgdGhpcy5fd29ya2VyU291cmNlID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0aGlzLl93b3JrZXJTb3VyY2UoKTtcblx0XHRpZiAodGhpcy5fd29ya2VyU291cmNlIGluc3RhbmNlb2YgVVJMKSByZXR1cm4gbmV3IFdvcmtlcih0aGlzLl93b3JrZXJTb3VyY2UuaHJlZiwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRcdGlmICh0eXBlb2YgdGhpcy5fd29ya2VyU291cmNlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRpZiAodGhpcy5fd29ya2VyU291cmNlLnN0YXJ0c1dpdGgoXCIvXCIpKSByZXR1cm4gbmV3IFdvcmtlcihyZXNvbHZlV29ya2VyU3BlY2lmaWVySHJlZih0aGlzLl93b3JrZXJTb3VyY2UucmVwbGFjZSgvXlxcLy8sIFwiLi9cIikpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdFx0XHRpZiAoVVJMLmNhblBhcnNlKHRoaXMuX3dvcmtlclNvdXJjZSkgfHwgdGhpcy5fd29ya2VyU291cmNlLnN0YXJ0c1dpdGgoXCIuL1wiKSkgcmV0dXJuIG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYodGhpcy5fd29ya2VyU291cmNlKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRcdFx0cmV0dXJuIG5ldyBXb3JrZXIoVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbdGhpcy5fd29ya2VyU291cmNlXSwgeyB0eXBlOiBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiB9KSksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB3b3JrZXIgc291cmNlXCIpO1xuXHR9XG5cdGdldCB3b3JrZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3dvcmtlcjtcblx0fVxufTtcbnZhciBNZXNzYWdlUG9ydFRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF9wb3J0O1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBfcG9ydCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoY2hhbm5lbE5hbWUsIFwibWVzc2FnZS1wb3J0XCIsIG9wdGlvbnMpO1xuXHRcdHRoaXMuX3BvcnQgPSBfcG9ydDtcblx0fVxuXHRhdHRhY2goKSB7XG5cdFx0aWYgKHRoaXMuX2lzQXR0YWNoZWQpIHJldHVybjtcblx0XHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRoaXMuX3BvcnQpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0aGlzLl9wb3J0LCAoZGF0YSkgPT4gdGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpKTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnLCBtc2cudHJhbnNmZXJhYmxlKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHR0aGlzLl9wb3J0LmNsb3NlKCk7XG5cdFx0c3VwZXIuZGV0YWNoKCk7XG5cdH1cblx0Z2V0IHBvcnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnQ7XG5cdH1cbn07XG52YXIgQnJvYWRjYXN0Q2hhbm5lbFRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF9iY05hbWU7XG5cdF9jaGFubmVsID0gbnVsbDtcblx0X2NsZWFudXAgPSBudWxsO1xuXHRfY29ubmVjdGVkUGVlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsTmFtZSwgX2JjTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoY2hhbm5lbE5hbWUsIFwiYnJvYWRjYXN0XCIsIG9wdGlvbnMpO1xuXHRcdHRoaXMuX2JjTmFtZSA9IF9iY05hbWU7XG5cdH1cblx0YXR0YWNoKCkge1xuXHRcdGlmICh0aGlzLl9pc0F0dGFjaGVkKSByZXR1cm47XG5cdFx0dGhpcy5fY2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKHRoaXMuX2JjTmFtZSA/PyB0aGlzLl9jaGFubmVsTmFtZSk7XG5cdFx0Y29uc3Qgc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0aGlzLl9jaGFubmVsKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fY2hhbm5lbCwgKGRhdGEpID0+IHtcblx0XHRcdGlmIChkYXRhPy5zZW5kZXIgIT09IHRoaXMuX2NoYW5uZWxOYW1lKSB0aGlzLl9oYW5kbGVJbmNvbWluZyhkYXRhKTtcblx0XHR9KTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHRcdHRoaXMuX2Fubm91bmNlUHJlc2VuY2UoKTtcblx0fVxuXHRfaGFuZGxlSW5jb21pbmcoZGF0YSkge1xuXHRcdGlmIChkYXRhPy50eXBlID09PSBcImFubm91bmNlXCIgfHwgZGF0YT8udHlwZSA9PT0gXCJjb25uZWN0XCIpIHtcblx0XHRcdGNvbnN0IHNlbmRlciA9IGRhdGEuc2VuZGVyID8/IFwidW5rbm93blwiO1xuXHRcdFx0Y29uc3QgaXNOZXcgPSAhdGhpcy5fY29ubmVjdGVkUGVlcnMuaGFzKHNlbmRlcik7XG5cdFx0XHR0aGlzLl9jb25uZWN0ZWRQZWVycy5hZGQoc2VuZGVyKTtcblx0XHRcdGlmIChpc05ldykge1xuXHRcdFx0XHR0aGlzLl9lbWl0SW5jb21pbmdDb25uZWN0aW9uKHtcblx0XHRcdFx0XHRpZDogZGF0YS5yZXFJZCA/PyBVVUlEdjQoKSxcblx0XHRcdFx0XHRjaGFubmVsOiBkYXRhLmNoYW5uZWwgPz8gdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdFx0c2VuZGVyLFxuXHRcdFx0XHRcdHRyYW5zcG9ydFR5cGU6IFwiYnJvYWRjYXN0XCIsXG5cdFx0XHRcdFx0ZGF0YSxcblx0XHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwiYW5ub3VuY2VcIikgdGhpcy5fY2hhbm5lbD8ucG9zdE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdHR5cGU6IFwiYW5ub3VuY2UtYWNrXCIsXG5cdFx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpO1xuXHR9XG5cdF9hbm5vdW5jZVByZXNlbmNlKCkge1xuXHRcdHRoaXMuX2NoYW5uZWw/LnBvc3RNZXNzYWdlKHtcblx0XHRcdHR5cGU6IFwiYW5ub3VuY2VcIixcblx0XHRcdGNoYW5uZWw6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHR9XG5cdGdldCBjb25uZWN0ZWRQZWVycygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2Nvbm5lY3RlZFBlZXJzXTtcblx0fVxuXHRkZXRhY2goKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fY2hhbm5lbD8uY2xvc2UoKTtcblx0XHR0aGlzLl9jaGFubmVsID0gbnVsbDtcblx0XHR0aGlzLl9jb25uZWN0ZWRQZWVycy5jbGVhcigpO1xuXHRcdHN1cGVyLmRldGFjaCgpO1xuXHR9XG59O1xudmFyIFdlYlNvY2tldFRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF91cmw7XG5cdF9wcm90b2NvbHM7XG5cdF93cyA9IG51bGw7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0X3BlbmRpbmcgPSBbXTtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9jb25uZWN0ZWRDaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBfdXJsLCBfcHJvdG9jb2xzLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJ3ZWJzb2NrZXRcIiwgb3B0aW9ucyk7XG5cdFx0dGhpcy5fdXJsID0gX3VybDtcblx0XHR0aGlzLl9wcm90b2NvbHMgPSBfcHJvdG9jb2xzO1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdGNvbnN0IHVybCA9IHR5cGVvZiB0aGlzLl91cmwgPT09IFwic3RyaW5nXCIgPyB0aGlzLl91cmwgOiB0aGlzLl91cmwuaHJlZjtcblx0XHR0aGlzLl93cyA9IG5ldyBXZWJTb2NrZXQodXJsLCB0aGlzLl9wcm90b2NvbHMpO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjb25uZWN0aW5nXCIpO1xuXHRcdGNvbnN0IHNlbmQgPSAobXNnKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fd3M/LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOKSB7XG5cdFx0XHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlOiBfLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0XHRcdHRoaXMuX3dzLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuXHRcdFx0fSBlbHNlIHRoaXMuX3BlbmRpbmcucHVzaChtc2cpO1xuXHRcdH07XG5cdFx0dGhpcy5fd3MuYWRkRXZlbnRMaXN0ZW5lcihcIm9wZW5cIiwgKCkgPT4ge1xuXHRcdFx0dGhpcy5fc3RhdGUubmV4dChcIm9wZW5cIik7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLmZvckVhY2goKG0pID0+IHNlbmQobSkpO1xuXHRcdFx0dGhpcy5fcGVuZGluZyA9IFtdO1xuXHRcdFx0dGhpcy5fZW1pdEluY29taW5nQ29ubmVjdGlvbih7XG5cdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdHNlbmRlcjogXCJzZXJ2ZXJcIixcblx0XHRcdFx0dHJhbnNwb3J0VHlwZTogXCJ3ZWJzb2NrZXRcIixcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fd3MsIChkYXRhKSA9PiB0aGlzLl9oYW5kbGVJbmNvbWluZyhkYXRhKSwgKGVycikgPT4gdGhpcy5faW5ib3VuZC5lcnJvcihlcnIpLCAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiY2xvc2VkXCIpO1xuXHRcdFx0dGhpcy5faW5ib3VuZC5jb21wbGV0ZSgpO1xuXHRcdH0pO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2cpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0X2hhbmRsZUluY29taW5nKGRhdGEpIHtcblx0XHRpZiAoZGF0YT8udHlwZSA9PT0gXCJjaGFubmVsLWNvbm5lY3RcIiB8fCBkYXRhPy50eXBlID09PSBcInBlZXItY29ubmVjdFwiIHx8IGRhdGE/LnR5cGUgPT09IFwiam9pblwiKSB7XG5cdFx0XHRjb25zdCBjaGFubmVsID0gZGF0YS5jaGFubmVsID8/IGRhdGEucm9vbSA/PyB0aGlzLl9jaGFubmVsTmFtZTtcblx0XHRcdGlmICghdGhpcy5fY29ubmVjdGVkQ2hhbm5lbHMuaGFzKGNoYW5uZWwpKSB7XG5cdFx0XHRcdHRoaXMuX2Nvbm5lY3RlZENoYW5uZWxzLmFkZChjaGFubmVsKTtcblx0XHRcdFx0dGhpcy5fZW1pdEluY29taW5nQ29ubmVjdGlvbih7XG5cdFx0XHRcdFx0aWQ6IGRhdGEuaWQgPz8gVVVJRHY0KCksXG5cdFx0XHRcdFx0Y2hhbm5lbCxcblx0XHRcdFx0XHRzZW5kZXI6IGRhdGEuc2VuZGVyID8/IGRhdGEucGVlcklkID8/IFwicmVtb3RlXCIsXG5cdFx0XHRcdFx0dHJhbnNwb3J0VHlwZTogXCJ3ZWJzb2NrZXRcIixcblx0XHRcdFx0XHRkYXRhLFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpO1xuXHR9XG5cdGpvaW5DaGFubmVsKGNoYW5uZWwpIHtcblx0XHR0aGlzLnNlbmQoe1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0dHlwZTogXCJqb2luXCIsXG5cdFx0XHRjaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHR9XG5cdGxlYXZlQ2hhbm5lbChjaGFubmVsKSB7XG5cdFx0dGhpcy5fY29ubmVjdGVkQ2hhbm5lbHMuZGVsZXRlKGNoYW5uZWwpO1xuXHRcdHRoaXMuc2VuZCh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHR0eXBlOiBcImxlYXZlXCIsXG5cdFx0XHRjaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHR9XG5cdGdldCBjb25uZWN0ZWRDaGFubmVscygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2Nvbm5lY3RlZENoYW5uZWxzXTtcblx0fVxuXHRkZXRhY2goKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fd3M/LmNsb3NlKCk7XG5cdFx0dGhpcy5fd3MgPSBudWxsO1xuXHRcdHRoaXMuX2Nvbm5lY3RlZENoYW5uZWxzLmNsZWFyKCk7XG5cdFx0c3VwZXIuZGV0YWNoKCk7XG5cdH1cblx0Z2V0IHdzKCkge1xuXHRcdHJldHVybiB0aGlzLl93cztcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG59O1xudmFyIENocm9tZVJ1bnRpbWVUcmFuc3BvcnQgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydEFkYXB0ZXIge1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJjaHJvbWUtcnVudGltZVwiLCBvcHRpb25zKTtcblx0fVxuXHRhdHRhY2goKSB7XG5cdFx0aWYgKHRoaXMuX2lzQXR0YWNoZWQpIHJldHVybjtcblx0XHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybjtcblx0XHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKFwiY2hyb21lLXJ1bnRpbWVcIik7XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKFwiY2hyb21lLXJ1bnRpbWVcIiwgKGRhdGEpID0+IHRoaXMuX2luYm91bmQubmV4dChkYXRhKSwgdm9pZCAwKTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxufTtcbnZhciBDaHJvbWVUYWJzVHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyIHtcblx0X3RhYklkO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBfdGFiSWQsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKGNoYW5uZWxOYW1lLCBcImNocm9tZS10YWJzXCIsIG9wdGlvbnMpO1xuXHRcdHRoaXMuX3RhYklkID0gX3RhYklkO1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdGlmICh0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUudGFicykgcmV0dXJuO1xuXHRcdGNvbnN0IHNlbmQgPSAobXNnKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fdGFiSWQgIT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZTogXywgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdFx0XHRjaHJvbWUudGFicy5zZW5kTWVzc2FnZSh0aGlzLl90YWJJZCwgZGF0YSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJjaHJvbWUtcnVudGltZVwiLCAoZGF0YSkgPT4gdGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpKTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxuXHRzZXRUYWJJZCh0YWJJZCkge1xuXHRcdHRoaXMuX3RhYklkID0gdGFiSWQ7XG5cdH1cbn07XG52YXIgQ2hyb21lUG9ydFRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF9wb3J0TmFtZTtcblx0X3RhYklkO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9wb3J0ID0gbnVsbDtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIF9wb3J0TmFtZSwgX3RhYklkLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJjaHJvbWUtcG9ydFwiLCBvcHRpb25zKTtcblx0XHR0aGlzLl9wb3J0TmFtZSA9IF9wb3J0TmFtZTtcblx0XHR0aGlzLl90YWJJZCA9IF90YWJJZDtcblx0fVxuXHRhdHRhY2goKSB7XG5cdFx0aWYgKHRoaXMuX2lzQXR0YWNoZWQpIHJldHVybjtcblx0XHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybjtcblx0XHR0aGlzLl9wb3J0ID0gdGhpcy5fdGFiSWQgIT0gbnVsbCAmJiBjaHJvbWUudGFicz8uY29ubmVjdCA/IGNocm9tZS50YWJzLmNvbm5lY3QodGhpcy5fdGFiSWQsIHsgbmFtZTogdGhpcy5fcG9ydE5hbWUgfSkgOiBjaHJvbWUucnVudGltZS5jb25uZWN0KHsgbmFtZTogdGhpcy5fcG9ydE5hbWUgfSk7XG5cdFx0Y29uc3Qgc2VuZCA9IChtc2cpID0+IHRoaXMuX3BvcnQ/LnBvc3RNZXNzYWdlKG1zZyk7XG5cdFx0Y29uc3Qgb25NZXNzYWdlID0gKG1zZykgPT4gdGhpcy5faW5ib3VuZC5uZXh0KG1zZyk7XG5cdFx0dGhpcy5fcG9ydC5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIob25NZXNzYWdlKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gKCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5fcG9ydD8ub25NZXNzYWdlLnJlbW92ZUxpc3RlbmVyKG9uTWVzc2FnZSk7XG5cdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLl9wb3J0Py5kaXNjb25uZWN0KCk7XG5cdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHR0aGlzLl9wb3J0ID0gbnVsbDtcblx0XHR9O1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2cpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0ZGV0YWNoKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHN1cGVyLmRldGFjaCgpO1xuXHR9XG59O1xudmFyIENocm9tZUV4dGVybmFsVHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyIHtcblx0X2V4dGVybmFsSWQ7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIF9leHRlcm5hbElkLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJjaHJvbWUtZXh0ZXJuYWxcIiwgb3B0aW9ucyk7XG5cdFx0dGhpcy5fZXh0ZXJuYWxJZCA9IF9leHRlcm5hbElkO1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdGlmICh0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUucnVudGltZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHNlbmQgPSAobXNnKSA9PiBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh0aGlzLl9leHRlcm5hbElkLCBtc2cpO1xuXHRcdGNvbnN0IGxpc3RlbmVyID0gKG1zZykgPT4ge1xuXHRcdFx0dGhpcy5faW5ib3VuZC5uZXh0KG1zZyk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbD8uYWRkTGlzdGVuZXI/LihsaXN0ZW5lcik7XG5cdFx0dGhpcy5fY2xlYW51cCA9ICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsPy5yZW1vdmVMaXN0ZW5lcj8uKGxpc3RlbmVyKTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxufTtcbnZhciBTZXJ2aWNlV29ya2VyVHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyIHtcblx0X2lzSG9zdDtcblx0X2NsZWFudXAgPSBudWxsO1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsTmFtZSwgX2lzSG9zdCA9IGZhbHNlLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJzZXJ2aWNlLXdvcmtlclwiLCBvcHRpb25zKTtcblx0XHR0aGlzLl9pc0hvc3QgPSBfaXNIb3N0O1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdGNvbnN0IHRhcmdldCA9IHRoaXMuX2lzSG9zdCA/IFwic2VydmljZS13b3JrZXItaG9zdFwiIDogXCJzZXJ2aWNlLXdvcmtlci1jbGllbnRcIjtcblx0XHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRhcmdldCk7XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRhcmdldCwgKGRhdGEpID0+IHRoaXMuX2luYm91bmQubmV4dChkYXRhKSk7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX291dGJvdW5kLnN1YnNjcmliZSgobXNnKSA9PiBzZW5kKG1zZywgbXNnLnRyYW5zZmVyYWJsZSkpKTtcblx0XHR0aGlzLl9pc0F0dGFjaGVkID0gdHJ1ZTtcblx0fVxuXHRkZXRhY2goKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0c3VwZXIuZGV0YWNoKCk7XG5cdH1cbn07XG52YXIgU2VsZlRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKGNoYW5uZWxOYW1lLCBcInNlbGZcIiwgb3B0aW9ucyk7XG5cdH1cblx0YXR0YWNoKCkge1xuXHRcdGlmICh0aGlzLl9pc0F0dGFjaGVkKSByZXR1cm47XG5cdFx0Y29uc3Qgc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcihcInNlbGZcIik7XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKFwic2VsZlwiLCAoZGF0YSkgPT4gdGhpcy5faGFuZGxlSW5jb21pbmcoZGF0YSkpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2csIG1zZy50cmFuc2ZlcmFibGUpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0X2hhbmRsZUluY29taW5nKGRhdGEpIHtcblx0XHRpZiAoZGF0YT8udHlwZSA9PT0gXCJjcmVhdGVDaGFubmVsXCIgfHwgZGF0YT8udHlwZSA9PT0gXCJjb25uZWN0Q2hhbm5lbFwiKSB0aGlzLl9lbWl0SW5jb21pbmdDb25uZWN0aW9uKHtcblx0XHRcdGlkOiBkYXRhLnJlcUlkID8/IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogZGF0YS5jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBkYXRhLnNlbmRlciA/PyBcInVua25vd25cIixcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwic2VsZlwiLFxuXHRcdFx0cG9ydDogZGF0YS5tZXNzYWdlUG9ydCA/PyBkYXRhLnBvcnQsXG5cdFx0XHRkYXRhLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0dGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpO1xuXHR9XG5cdG5vdGlmeUNoYW5uZWxDcmVhdGVkKGNoYW5uZWwsIHNlbmRlciwgcmVxSWQpIHtcblx0XHRwb3N0TWVzc2FnZSh7XG5cdFx0XHR0eXBlOiBcImNoYW5uZWxDcmVhdGVkXCIsXG5cdFx0XHRjaGFubmVsLFxuXHRcdFx0c2VuZGVyLFxuXHRcdFx0cmVxSWQsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KTtcblx0fVxuXHRkZXRhY2goKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0c3VwZXIuZGV0YWNoKCk7XG5cdH1cbn07XG52YXIgVHJhbnNwb3J0RmFjdG9yeSA9IHtcblx0d29ya2VyOiAobmFtZSwgc291cmNlLCBvcHRzKSA9PiBuZXcgV29ya2VyVHJhbnNwb3J0KG5hbWUsIHNvdXJjZSwgb3B0cyksXG5cdG1lc3NhZ2VQb3J0OiAobmFtZSwgcG9ydCwgb3B0cykgPT4gbmV3IE1lc3NhZ2VQb3J0VHJhbnNwb3J0KG5hbWUsIHBvcnQsIG9wdHMpLFxuXHRicm9hZGNhc3Q6IChuYW1lLCBiY05hbWUsIG9wdHMpID0+IG5ldyBCcm9hZGNhc3RDaGFubmVsVHJhbnNwb3J0KG5hbWUsIGJjTmFtZSwgb3B0cyksXG5cdHdlYnNvY2tldDogKG5hbWUsIHVybCwgcHJvdG9jb2xzLCBvcHRzKSA9PiBuZXcgV2ViU29ja2V0VHJhbnNwb3J0KG5hbWUsIHVybCwgcHJvdG9jb2xzLCBvcHRzKSxcblx0Y2hyb21lUnVudGltZTogKG5hbWUsIG9wdHMpID0+IG5ldyBDaHJvbWVSdW50aW1lVHJhbnNwb3J0KG5hbWUsIG9wdHMpLFxuXHRjaHJvbWVUYWJzOiAobmFtZSwgdGFiSWQsIG9wdHMpID0+IG5ldyBDaHJvbWVUYWJzVHJhbnNwb3J0KG5hbWUsIHRhYklkLCBvcHRzKSxcblx0Y2hyb21lUG9ydDogKG5hbWUsIHBvcnROYW1lLCB0YWJJZCwgb3B0cykgPT4gbmV3IENocm9tZVBvcnRUcmFuc3BvcnQobmFtZSwgcG9ydE5hbWUsIHRhYklkLCBvcHRzKSxcblx0Y2hyb21lRXh0ZXJuYWw6IChuYW1lLCBleHRlcm5hbElkLCBvcHRzKSA9PiBuZXcgQ2hyb21lRXh0ZXJuYWxUcmFuc3BvcnQobmFtZSwgZXh0ZXJuYWxJZCwgb3B0cyksXG5cdHNlcnZpY2VXb3JrZXI6IChuYW1lLCBpc0hvc3QsIG9wdHMpID0+IG5ldyBTZXJ2aWNlV29ya2VyVHJhbnNwb3J0KG5hbWUsIGlzSG9zdCwgb3B0cyksXG5cdHNlbGY6IChuYW1lLCBvcHRzKSA9PiBuZXcgU2VsZlRyYW5zcG9ydChuYW1lLCBvcHRzKVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb25PYnNlcnZlcih0cmFuc3BvcnRzKSB7XG5cdGNvbnN0IGNvbm5lY3Rpb25zID0gW107XG5cdGNvbnN0IHN1YmplY3QgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdGZvciAoY29uc3QgdHJhbnNwb3J0IG9mIHRyYW5zcG9ydHMpIHRyYW5zcG9ydC5zdWJzY3JpYmVJbmNvbWluZygoY29ubikgPT4ge1xuXHRcdGNvbm5lY3Rpb25zLnB1c2goY29ubik7XG5cdFx0c3ViamVjdC5uZXh0KGNvbm4pO1xuXHR9KTtcblx0cmV0dXJuIHtcblx0XHRzdWJzY3JpYmU6IChoYW5kbGVyKSA9PiBzdWJqZWN0LnN1YnNjcmliZShoYW5kbGVyKSxcblx0XHRnZXRDb25uZWN0aW9uczogKCkgPT4gWy4uLmNvbm5lY3Rpb25zXVxuXHR9O1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9zdG9yYWdlL1N0b3JhZ2UudHNcbnZhciBEQl9OQU1FID0gXCJ1bmlmb3JtX2NoYW5uZWxzXCI7XG52YXIgREJfVkVSU0lPTiA9IDE7XG52YXIgU1RPUkVTID0ge1xuXHRNRVNTQUdFUzogXCJtZXNzYWdlc1wiLFxuXHRNQUlMQk9YOiBcIm1haWxib3hcIixcblx0UEVORElORzogXCJwZW5kaW5nXCIsXG5cdEVYQ0hBTkdFOiBcImV4Y2hhbmdlXCIsXG5cdFRSQU5TQUNUSU9OUzogXCJ0cmFuc2FjdGlvbnNcIlxufTtcbnZhciBDaGFubmVsU3RvcmFnZSA9IGNsYXNzIHtcblx0X2RiID0gbnVsbDtcblx0X2lzT3BlbiA9IGZhbHNlO1xuXHRfb3BlblByb21pc2UgPSBudWxsO1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9tZXNzYWdlVXBkYXRlcyA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRfZXhjaGFuZ2VVcGRhdGVzID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lKSB7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBjaGFubmVsTmFtZTtcblx0fVxuXHRhc3luYyBvcGVuKCkge1xuXHRcdGlmICh0aGlzLl9kYiAmJiB0aGlzLl9pc09wZW4pIHJldHVybiB0aGlzLl9kYjtcblx0XHRpZiAodGhpcy5fb3BlblByb21pc2UpIHJldHVybiB0aGlzLl9vcGVuUHJvbWlzZTtcblx0XHR0aGlzLl9vcGVuUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3BlbihEQl9OQU1FLCBEQl9WRVJTSU9OKTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fb3BlblByb21pc2UgPSBudWxsO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBvcGVuIEluZGV4ZWREQlwiKSk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2RiID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdHRoaXMuX2lzT3BlbiA9IHRydWU7XG5cdFx0XHRcdHRoaXMuX29wZW5Qcm9taXNlID0gbnVsbDtcblx0XHRcdFx0cmVzb2x2ZSh0aGlzLl9kYik7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZGIgPSBldmVudC50YXJnZXQucmVzdWx0O1xuXHRcdFx0XHR0aGlzLl9jcmVhdGVTdG9yZXMoZGIpO1xuXHRcdFx0fTtcblx0XHR9KTtcblx0XHRyZXR1cm4gdGhpcy5fb3BlblByb21pc2U7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0aWYgKHRoaXMuX2RiKSB7XG5cdFx0XHR0aGlzLl9kYi5jbG9zZSgpO1xuXHRcdFx0dGhpcy5fZGIgPSBudWxsO1xuXHRcdFx0dGhpcy5faXNPcGVuID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdF9jcmVhdGVTdG9yZXMoZGIpIHtcblx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoU1RPUkVTLk1FU1NBR0VTKSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZXNTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKFNUT1JFUy5NRVNTQUdFUywgeyBrZXlQYXRoOiBcImlkXCIgfSk7XG5cdFx0XHRtZXNzYWdlc1N0b3JlLmNyZWF0ZUluZGV4KFwiY2hhbm5lbFwiLCBcImNoYW5uZWxcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdFx0bWVzc2FnZXNTdG9yZS5jcmVhdGVJbmRleChcInN0YXR1c1wiLCBcInN0YXR1c1wiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRtZXNzYWdlc1N0b3JlLmNyZWF0ZUluZGV4KFwicmVjaXBpZW50XCIsIFwicmVjaXBpZW50XCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0XHRcdG1lc3NhZ2VzU3RvcmUuY3JlYXRlSW5kZXgoXCJjcmVhdGVkQXRcIiwgXCJjcmVhdGVkQXRcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdFx0bWVzc2FnZXNTdG9yZS5jcmVhdGVJbmRleChcImNoYW5uZWxfc3RhdHVzXCIsIFtcImNoYW5uZWxcIiwgXCJzdGF0dXNcIl0sIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0XHR9XG5cdFx0aWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKFNUT1JFUy5NQUlMQk9YKSkge1xuXHRcdFx0Y29uc3QgbWFpbGJveFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoU1RPUkVTLk1BSUxCT1gsIHsga2V5UGF0aDogXCJpZFwiIH0pO1xuXHRcdFx0bWFpbGJveFN0b3JlLmNyZWF0ZUluZGV4KFwiY2hhbm5lbFwiLCBcImNoYW5uZWxcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdFx0bWFpbGJveFN0b3JlLmNyZWF0ZUluZGV4KFwicHJpb3JpdHlcIiwgXCJwcmlvcml0eVwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRtYWlsYm94U3RvcmUuY3JlYXRlSW5kZXgoXCJleHBpcmVzQXRcIiwgXCJleHBpcmVzQXRcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdH1cblx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoU1RPUkVTLlBFTkRJTkcpKSB7XG5cdFx0XHRjb25zdCBwZW5kaW5nU3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZShTVE9SRVMuUEVORElORywgeyBrZXlQYXRoOiBcImlkXCIgfSk7XG5cdFx0XHRwZW5kaW5nU3RvcmUuY3JlYXRlSW5kZXgoXCJjaGFubmVsXCIsIFwiY2hhbm5lbFwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRwZW5kaW5nU3RvcmUuY3JlYXRlSW5kZXgoXCJjcmVhdGVkQXRcIiwgXCJjcmVhdGVkQXRcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdH1cblx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoU1RPUkVTLkVYQ0hBTkdFKSkge1xuXHRcdFx0Y29uc3QgZXhjaGFuZ2VTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSwgeyBrZXlQYXRoOiBcImlkXCIgfSk7XG5cdFx0XHRleGNoYW5nZVN0b3JlLmNyZWF0ZUluZGV4KFwia2V5XCIsIFwia2V5XCIsIHsgdW5pcXVlOiB0cnVlIH0pO1xuXHRcdFx0ZXhjaGFuZ2VTdG9yZS5jcmVhdGVJbmRleChcIm93bmVyXCIsIFwib3duZXJcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdH1cblx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoU1RPUkVTLlRSQU5TQUNUSU9OUykpIGRiLmNyZWF0ZU9iamVjdFN0b3JlKFNUT1JFUy5UUkFOU0FDVElPTlMsIHsga2V5UGF0aDogXCJpZFwiIH0pLmNyZWF0ZUluZGV4KFwiY3JlYXRlZEF0XCIsIFwiY3JlYXRlZEF0XCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0fVxuXHRhc3luYyBkZWZlcihtZXNzYWdlLCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IHN0b3JlZE1lc3NhZ2UgPSB7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBtZXNzYWdlLmNoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IG1lc3NhZ2Uuc2VuZGVyID8/IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0cmVjaXBpZW50OiBtZXNzYWdlLmNoYW5uZWwsXG5cdFx0XHR0eXBlOiBtZXNzYWdlLnR5cGUsXG5cdFx0XHRwYXlsb2FkOiBtZXNzYWdlLnBheWxvYWQsXG5cdFx0XHRzdGF0dXM6IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJpb3JpdHk6IG9wdGlvbnMucHJpb3JpdHkgPz8gMCxcblx0XHRcdGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdHVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdGV4cGlyZXNBdDogb3B0aW9ucy5leHBpcmVzSW4gPyBEYXRlLm5vdygpICsgb3B0aW9ucy5leHBpcmVzSW4gOiBudWxsLFxuXHRcdFx0cmV0cnlDb3VudDogMCxcblx0XHRcdG1heFJldHJpZXM6IG9wdGlvbnMubWF4UmV0cmllcyA/PyAzLFxuXHRcdFx0bWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGFcblx0XHR9O1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFtTVE9SRVMuTUVTU0FHRVMsIFNUT1JFUy5NQUlMQk9YXSwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBtZXNzYWdlc1N0b3JlID0gdHgub2JqZWN0U3RvcmUoU1RPUkVTLk1FU1NBR0VTKTtcblx0XHRcdGNvbnN0IG1haWxib3hTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5NQUlMQk9YKTtcblx0XHRcdG1lc3NhZ2VzU3RvcmUuYWRkKHN0b3JlZE1lc3NhZ2UpO1xuXHRcdFx0bWFpbGJveFN0b3JlLmFkZChzdG9yZWRNZXNzYWdlKTtcblx0XHRcdHR4Lm9uY29tcGxldGUgPSAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX21lc3NhZ2VVcGRhdGVzLm5leHQoc3RvcmVkTWVzc2FnZSk7XG5cdFx0XHRcdHJlc29sdmUoc3RvcmVkTWVzc2FnZS5pZCk7XG5cdFx0XHR9O1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGRlZmVyIG1lc3NhZ2VcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGdldERlZmVycmVkTWVzc2FnZXMoY2hhbm5lbCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUVTU0FHRVMsIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUoU1RPUkVTLk1FU1NBR0VTKTtcblx0XHRcdGNvbnN0IGluZGV4ID0gb3B0aW9ucy5zdGF0dXMgPyBzdG9yZS5pbmRleChcImNoYW5uZWxfc3RhdHVzXCIpIDogc3RvcmUuaW5kZXgoXCJjaGFubmVsXCIpO1xuXHRcdFx0Y29uc3QgcXVlcnkgPSBvcHRpb25zLnN0YXR1cyA/IElEQktleVJhbmdlLm9ubHkoW2NoYW5uZWwsIG9wdGlvbnMuc3RhdHVzXSkgOiBJREJLZXlSYW5nZS5vbmx5KGNoYW5uZWwpO1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGluZGV4LmdldEFsbChxdWVyeSwgb3B0aW9ucy5saW1pdCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0bGV0IHJlc3VsdHMgPSByZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0aWYgKG9wdGlvbnMub2Zmc2V0KSByZXN1bHRzID0gcmVzdWx0cy5zbGljZShvcHRpb25zLm9mZnNldCk7XG5cdFx0XHRcdHJlc29sdmUocmVzdWx0cyk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IGRlZmVycmVkIG1lc3NhZ2VzXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBwcm9jZXNzTmV4dFBlbmRpbmcoY2hhbm5lbCkge1xuXHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUVTU0FHRVMsIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKFNUT1JFUy5NRVNTQUdFUykuaW5kZXgoXCJjaGFubmVsX3N0YXR1c1wiKS5vcGVuQ3Vyc29yKElEQktleVJhbmdlLm9ubHkoW2NoYW5uZWwsIFwicGVuZGluZ1wiXSkpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGN1cnNvciA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAoY3Vyc29yKSB7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGN1cnNvci52YWx1ZTtcblx0XHRcdFx0XHRtZXNzYWdlLnN0YXR1cyA9IFwicHJvY2Vzc2luZ1wiO1xuXHRcdFx0XHRcdG1lc3NhZ2UudXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0XHRjdXJzb3IudXBkYXRlKG1lc3NhZ2UpO1xuXHRcdFx0XHRcdHRoaXMuX21lc3NhZ2VVcGRhdGVzLm5leHQobWVzc2FnZSk7XG5cdFx0XHRcdFx0cmVzb2x2ZShtZXNzYWdlKTtcblx0XHRcdFx0fSBlbHNlIHJlc29sdmUobnVsbCk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcHJvY2VzcyBwZW5kaW5nIG1lc3NhZ2VcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIG1hcmtEZWxpdmVyZWQobWVzc2FnZUlkKSB7XG5cdFx0YXdhaXQgdGhpcy5fdXBkYXRlTWVzc2FnZVN0YXR1cyhtZXNzYWdlSWQsIFwiZGVsaXZlcmVkXCIpO1xuXHR9XG5cdGFzeW5jIG1hcmtGYWlsZWQobWVzc2FnZUlkKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUVTU0FHRVMsIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKFNUT1JFUy5NRVNTQUdFUyk7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gc3RvcmUuZ2V0KG1lc3NhZ2VJZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAoIW1lc3NhZ2UpIHtcblx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0bWVzc2FnZS5yZXRyeUNvdW50Kys7XG5cdFx0XHRcdG1lc3NhZ2UudXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0aWYgKG1lc3NhZ2UucmV0cnlDb3VudCA8IG1lc3NhZ2UubWF4UmV0cmllcykgbWVzc2FnZS5zdGF0dXMgPSBcInBlbmRpbmdcIjtcblx0XHRcdFx0ZWxzZSBtZXNzYWdlLnN0YXR1cyA9IFwiZmFpbGVkXCI7XG5cdFx0XHRcdHN0b3JlLnB1dChtZXNzYWdlKTtcblx0XHRcdFx0dGhpcy5fbWVzc2FnZVVwZGF0ZXMubmV4dChtZXNzYWdlKTtcblx0XHRcdFx0cmVzb2x2ZShtZXNzYWdlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCIpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIG1hcmsgbWVzc2FnZSBhcyBmYWlsZWRcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIF91cGRhdGVNZXNzYWdlU3RhdHVzKG1lc3NhZ2VJZCwgc3RhdHVzKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUVTU0FHRVMsIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKFNUT1JFUy5NRVNTQUdFUyk7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gc3RvcmUuZ2V0KG1lc3NhZ2VJZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHRcdG1lc3NhZ2Uuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0XHRcdG1lc3NhZ2UudXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0XHRzdG9yZS5wdXQobWVzc2FnZSk7XG5cdFx0XHRcdFx0dGhpcy5fbWVzc2FnZVVwZGF0ZXMubmV4dChtZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gdXBkYXRlIG1lc3NhZ2Ugc3RhdHVzXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBnZXRNYWlsYm94KGNoYW5uZWwsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUFJTEJPWCwgXCJyZWFkb25seVwiKS5vYmplY3RTdG9yZShTVE9SRVMuTUFJTEJPWCkuaW5kZXgoXCJjaGFubmVsXCIpLmdldEFsbChJREJLZXlSYW5nZS5vbmx5KGNoYW5uZWwpLCBvcHRpb25zLmxpbWl0KTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRsZXQgcmVzdWx0cyA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAob3B0aW9ucy5zb3J0QnkgPT09IFwicHJpb3JpdHlcIikgcmVzdWx0cy5zb3J0KChhLCBiKSA9PiBiLnByaW9yaXR5IC0gYS5wcmlvcml0eSk7XG5cdFx0XHRcdGVsc2UgcmVzdWx0cy5zb3J0KChhLCBiKSA9PiBiLmNyZWF0ZWRBdCAtIGEuY3JlYXRlZEF0KTtcblx0XHRcdFx0cmVzb2x2ZShyZXN1bHRzKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgbWFpbGJveFwiKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgZ2V0TWFpbGJveFN0YXRzKGNoYW5uZWwpIHtcblx0XHRjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMuZ2V0RGVmZXJyZWRNZXNzYWdlcyhjaGFubmVsKTtcblx0XHRjb25zdCBzdGF0cyA9IHtcblx0XHRcdHRvdGFsOiBtZXNzYWdlcy5sZW5ndGgsXG5cdFx0XHRwZW5kaW5nOiAwLFxuXHRcdFx0cHJvY2Vzc2luZzogMCxcblx0XHRcdGRlbGl2ZXJlZDogMCxcblx0XHRcdGZhaWxlZDogMCxcblx0XHRcdGV4cGlyZWQ6IDBcblx0XHR9O1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0Zm9yIChjb25zdCBtc2cgb2YgbWVzc2FnZXMpIGlmIChtc2cuZXhwaXJlc0F0ICYmIG1zZy5leHBpcmVzQXQgPCBub3cpIHN0YXRzLmV4cGlyZWQrKztcblx0XHRlbHNlIHN0YXRzW21zZy5zdGF0dXNdKys7XG5cdFx0cmV0dXJuIHN0YXRzO1xuXHR9XG5cdGFzeW5jIGNsZWFyTWFpbGJveChjaGFubmVsKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdHggPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUFJTEJPWCwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBpbmRleCA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5NQUlMQk9YKS5pbmRleChcImNoYW5uZWxcIik7XG5cdFx0XHRsZXQgZGVsZXRlZENvdW50ID0gMDtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBpbmRleC5vcGVuQ3Vyc29yKElEQktleVJhbmdlLm9ubHkoY2hhbm5lbCkpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGN1cnNvciA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAoY3Vyc29yKSB7XG5cdFx0XHRcdFx0Y3Vyc29yLmRlbGV0ZSgpO1xuXHRcdFx0XHRcdGRlbGV0ZWRDb3VudCsrO1xuXHRcdFx0XHRcdGN1cnNvci5jb250aW51ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dHgub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUoZGVsZXRlZENvdW50KTtcblx0XHRcdHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBjbGVhciBtYWlsYm94XCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyByZWdpc3RlclBlbmRpbmcob3BlcmF0aW9uKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRjb25zdCBwZW5kaW5nID0ge1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHR0eXBlOiBvcGVyYXRpb24udHlwZSxcblx0XHRcdGRhdGE6IG9wZXJhdGlvbi5kYXRhLFxuXHRcdFx0bWV0YWRhdGE6IG9wZXJhdGlvbi5tZXRhZGF0YSxcblx0XHRcdGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdHN0YXR1czogXCJwZW5kaW5nXCJcblx0XHR9O1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5QRU5ESU5HLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5QRU5ESU5HKS5hZGQocGVuZGluZyk7XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4gcmVzb2x2ZShwZW5kaW5nLmlkKTtcblx0XHRcdHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byByZWdpc3RlciBwZW5kaW5nIG9wZXJhdGlvblwiKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgZ2V0UGVuZGluZ09wZXJhdGlvbnMoKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5QRU5ESU5HLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKFNUT1JFUy5QRU5ESU5HKS5pbmRleChcImNoYW5uZWxcIikuZ2V0QWxsKElEQktleVJhbmdlLm9ubHkodGhpcy5fY2hhbm5lbE5hbWUpKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdCk7XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgcGVuZGluZyBvcGVyYXRpb25zXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBjb21wbGV0ZVBlbmRpbmcob3BlcmF0aW9uSWQpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5QRU5ESU5HLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5QRU5ESU5HKS5kZWxldGUob3BlcmF0aW9uSWQpO1xuXHRcdFx0dHgub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUoKTtcblx0XHRcdHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBjb21wbGV0ZSBwZW5kaW5nIG9wZXJhdGlvblwiKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgYXdhaXRQZW5kaW5nKG9wZXJhdGlvbklkLCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IDNlNDtcblx0XHRjb25zdCBwb2xsSW50ZXJ2YWwgPSBvcHRpb25zLnBvbGxJbnRlcnZhbCA/PyAxMDA7XG5cdFx0Y29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblx0XHR3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IHRpbWVvdXQpIHtcblx0XHRcdGNvbnN0IHBlbmRpbmcgPSBhd2FpdCB0aGlzLl9nZXRQZW5kaW5nQnlJZChvcGVyYXRpb25JZCk7XG5cdFx0XHRpZiAoIXBlbmRpbmcpIHJldHVybiBudWxsO1xuXHRcdFx0aWYgKHBlbmRpbmcuc3RhdHVzID09PSBcImNvbXBsZXRlZFwiKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuY29tcGxldGVQZW5kaW5nKG9wZXJhdGlvbklkKTtcblx0XHRcdFx0cmV0dXJuIHBlbmRpbmcucmVzdWx0O1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgcG9sbEludGVydmFsKSk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBFcnJvcihgUGVuZGluZyBvcGVyYXRpb24gJHtvcGVyYXRpb25JZH0gdGltZWQgb3V0YCk7XG5cdH1cblx0YXN5bmMgX2dldFBlbmRpbmdCeUlkKGlkKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5QRU5ESU5HLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKFNUT1JFUy5QRU5ESU5HKS5nZXQoaWQpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKHJlcXVlc3QucmVzdWx0ID8/IG51bGwpO1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IHBlbmRpbmcgb3BlcmF0aW9uXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBleGNoYW5nZVB1dChrZXksIHZhbHVlLCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IHJlY29yZCA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGtleSxcblx0XHRcdHZhbHVlLFxuXHRcdFx0b3duZXI6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0c2hhcmVkV2l0aDogb3B0aW9ucy5zaGFyZWRXaXRoID8/IFtcIipcIl0sXG5cdFx0XHR2ZXJzaW9uOiAxLFxuXHRcdFx0Y3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuXHRcdFx0dXBkYXRlZEF0OiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdHggPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuRVhDSEFOR0UsIFwicmVhZHdyaXRlXCIpO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSB0eC5vYmplY3RTdG9yZShTVE9SRVMuRVhDSEFOR0UpO1xuXHRcdFx0Y29uc3QgZ2V0UmVxdWVzdCA9IHN0b3JlLmluZGV4KFwia2V5XCIpLmdldChrZXkpO1xuXHRcdFx0Z2V0UmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV4aXN0aW5nID0gZ2V0UmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChleGlzdGluZykge1xuXHRcdFx0XHRcdHJlY29yZC5pZCA9IGV4aXN0aW5nLmlkO1xuXHRcdFx0XHRcdHJlY29yZC52ZXJzaW9uID0gZXhpc3RpbmcudmVyc2lvbiArIDE7XG5cdFx0XHRcdFx0cmVjb3JkLmNyZWF0ZWRBdCA9IGV4aXN0aW5nLmNyZWF0ZWRBdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9yZS5wdXQocmVjb3JkKTtcblx0XHRcdH07XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9leGNoYW5nZVVwZGF0ZXMubmV4dChyZWNvcmQpO1xuXHRcdFx0XHRyZXNvbHZlKHJlY29yZC5pZCk7XG5cdFx0XHR9O1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIHB1dCBleGNoYW5nZSBkYXRhXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBleGNoYW5nZUdldChrZXkpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gZGIudHJhbnNhY3Rpb24oU1RPUkVTLkVYQ0hBTkdFLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSkuaW5kZXgoXCJrZXlcIikuZ2V0KGtleSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmICghcmVjb3JkKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShudWxsKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCF0aGlzLl9jYW5BY2Nlc3NFeGNoYW5nZShyZWNvcmQpKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShudWxsKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVzb2x2ZShyZWNvcmQudmFsdWUpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBleGNoYW5nZSBkYXRhXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBleGNoYW5nZURlbGV0ZShrZXkpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5FWENIQU5HRSwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSk7XG5cdFx0XHRjb25zdCBnZXRSZXF1ZXN0ID0gc3RvcmUuaW5kZXgoXCJrZXlcIikuZ2V0KGtleSk7XG5cdFx0XHRnZXRSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0gZ2V0UmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmICghcmVjb3JkKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZWNvcmQub3duZXIgIT09IHRoaXMuX2NoYW5uZWxOYW1lKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3JlLmRlbGV0ZShyZWNvcmQuaWQpO1xuXHRcdFx0fTtcblx0XHRcdHR4Lm9uY29tcGxldGUgPSAoKSA9PiByZXNvbHZlKHRydWUpO1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGRlbGV0ZSBleGNoYW5nZSBkYXRhXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBleGNoYW5nZUxvY2soa2V5LCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IHRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgPz8gM2U0O1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5FWENIQU5HRSwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSk7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gc3RvcmUuaW5kZXgoXCJrZXlcIikuZ2V0KGtleSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmICghcmVjb3JkKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZWNvcmQubG9jayAmJiByZWNvcmQubG9jay5ob2xkZXIgIT09IHRoaXMuX2NoYW5uZWxOYW1lKSB7XG5cdFx0XHRcdFx0aWYgKHJlY29yZC5sb2NrLmV4cGlyZXNBdCA+IERhdGUubm93KCkpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZWNvcmQubG9jayA9IHtcblx0XHRcdFx0XHRob2xkZXI6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0XHRcdGFjcXVpcmVkQXQ6IERhdGUubm93KCksXG5cdFx0XHRcdFx0ZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgdGltZW91dFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZWNvcmQudXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0c3RvcmUucHV0KHJlY29yZCk7XG5cdFx0XHR9O1xuXHRcdFx0dHgub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUodHJ1ZSk7XG5cdFx0XHR0eC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gYWNxdWlyZSBsb2NrXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBleGNoYW5nZVVubG9jayhrZXkpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5FWENIQU5HRSwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSk7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gc3RvcmUuaW5kZXgoXCJrZXlcIikuZ2V0KGtleSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChyZWNvcmQgJiYgcmVjb3JkLmxvY2s/LmhvbGRlciA9PT0gdGhpcy5fY2hhbm5lbE5hbWUpIHtcblx0XHRcdFx0XHRkZWxldGUgcmVjb3JkLmxvY2s7XG5cdFx0XHRcdFx0cmVjb3JkLnVwZGF0ZWRBdCA9IERhdGUubm93KCk7XG5cdFx0XHRcdFx0c3RvcmUucHV0KHJlY29yZCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4gcmVzb2x2ZSgpO1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlbGVhc2UgbG9ja1wiKSk7XG5cdFx0fSk7XG5cdH1cblx0X2NhbkFjY2Vzc0V4Y2hhbmdlKHJlY29yZCkge1xuXHRcdGlmIChyZWNvcmQub3duZXIgPT09IHRoaXMuX2NoYW5uZWxOYW1lKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAocmVjb3JkLnNoYXJlZFdpdGguaW5jbHVkZXMoXCIqXCIpKSByZXR1cm4gdHJ1ZTtcblx0XHRyZXR1cm4gcmVjb3JkLnNoYXJlZFdpdGguaW5jbHVkZXModGhpcy5fY2hhbm5lbE5hbWUpO1xuXHR9XG5cdGFzeW5jIGJlZ2luVHJhbnNhY3Rpb24oKSB7XG5cdFx0cmV0dXJuIG5ldyBDaGFubmVsVHJhbnNhY3Rpb24odGhpcyk7XG5cdH1cblx0YXN5bmMgZXhlY3V0ZVRyYW5zYWN0aW9uKG9wZXJhdGlvbnMpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IHN0b3JlTmFtZXMgPSBuZXcgU2V0KG9wZXJhdGlvbnMubWFwKChvcCkgPT4gb3Auc3RvcmUpKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdHggPSBkYi50cmFuc2FjdGlvbihBcnJheS5mcm9tKHN0b3JlTmFtZXMpLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdGZvciAoY29uc3Qgb3Agb2Ygb3BlcmF0aW9ucykge1xuXHRcdFx0XHRjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKG9wLnN0b3JlKTtcblx0XHRcdFx0c3dpdGNoIChvcC50eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcInB1dFwiOlxuXHRcdFx0XHRcdFx0aWYgKG9wLnZhbHVlICE9PSB2b2lkIDApIHN0b3JlLnB1dChvcC52YWx1ZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiZGVsZXRlXCI6XG5cdFx0XHRcdFx0XHRpZiAob3Aua2V5ICE9PSB2b2lkIDApIHN0b3JlLmRlbGV0ZShvcC5rZXkpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcInVwZGF0ZVwiOiBpZiAob3Aua2V5ICE9PSB2b2lkIDApIHtcblx0XHRcdFx0XHRcdGNvbnN0IGdldFJlcSA9IHN0b3JlLmdldChvcC5rZXkpO1xuXHRcdFx0XHRcdFx0Z2V0UmVxLm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGdldFJlcS5yZXN1bHQgJiYgb3AudmFsdWUpIHN0b3JlLnB1dCh7XG5cdFx0XHRcdFx0XHRcdFx0Li4uZ2V0UmVxLnJlc3VsdCxcblx0XHRcdFx0XHRcdFx0XHQuLi5vcC52YWx1ZVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4gcmVzb2x2ZSgpO1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiVHJhbnNhY3Rpb24gZmFpbGVkXCIpKTtcblx0XHR9KTtcblx0fVxuXHRvbk1lc3NhZ2VVcGRhdGUoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9tZXNzYWdlVXBkYXRlcy5zdWJzY3JpYmUoeyBuZXh0OiBoYW5kbGVyIH0pO1xuXHR9XG5cdG9uRXhjaGFuZ2VVcGRhdGUoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9leGNoYW5nZVVwZGF0ZXMuc3Vic2NyaWJlKHsgbmV4dDogaGFuZGxlciB9KTtcblx0fVxuXHRhc3luYyBjbGVhbnVwRXhwaXJlZCgpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oW1NUT1JFUy5NRVNTQUdFUywgU1RPUkVTLk1BSUxCT1hdLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzU3RvcmUgPSB0eC5vYmplY3RTdG9yZShTVE9SRVMuTUVTU0FHRVMpO1xuXHRcdFx0Y29uc3QgbWFpbGJveFN0b3JlID0gdHgub2JqZWN0U3RvcmUoU1RPUkVTLk1BSUxCT1gpO1xuXHRcdFx0bGV0IGRlbGV0ZWRDb3VudCA9IDA7XG5cdFx0XHRjb25zdCBtc2dSZXF1ZXN0ID0gbWVzc2FnZXNTdG9yZS5vcGVuQ3Vyc29yKCk7XG5cdFx0XHRtc2dSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgY3Vyc29yID0gbXNnUmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChjdXJzb3IpIHtcblx0XHRcdFx0XHRjb25zdCBtc2cgPSBjdXJzb3IudmFsdWU7XG5cdFx0XHRcdFx0aWYgKG1zZy5leHBpcmVzQXQgJiYgbXNnLmV4cGlyZXNBdCA8IG5vdykge1xuXHRcdFx0XHRcdFx0Y3Vyc29yLmRlbGV0ZSgpO1xuXHRcdFx0XHRcdFx0ZGVsZXRlZENvdW50Kys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGN1cnNvci5jb250aW51ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgbWFpbFJlcXVlc3QgPSBtYWlsYm94U3RvcmUub3BlbkN1cnNvcigpO1xuXHRcdFx0bWFpbFJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjdXJzb3IgPSBtYWlsUmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChjdXJzb3IpIHtcblx0XHRcdFx0XHRjb25zdCBtc2cgPSBjdXJzb3IudmFsdWU7XG5cdFx0XHRcdFx0aWYgKG1zZy5leHBpcmVzQXQgJiYgbXNnLmV4cGlyZXNBdCA8IG5vdykge1xuXHRcdFx0XHRcdFx0Y3Vyc29yLmRlbGV0ZSgpO1xuXHRcdFx0XHRcdFx0ZGVsZXRlZENvdW50Kys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGN1cnNvci5jb250aW51ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dHgub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUoZGVsZXRlZENvdW50KTtcblx0XHRcdHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBjbGVhbnVwIGV4cGlyZWRcIikpO1xuXHRcdH0pO1xuXHR9XG59O1xudmFyIENoYW5uZWxUcmFuc2FjdGlvbiA9IGNsYXNzIHtcblx0X3N0b3JhZ2U7XG5cdF9vcGVyYXRpb25zID0gW107XG5cdF9pc0NvbW1pdHRlZCA9IGZhbHNlO1xuXHRfaXNSb2xsZWRCYWNrID0gZmFsc2U7XG5cdGNvbnN0cnVjdG9yKF9zdG9yYWdlKSB7XG5cdFx0dGhpcy5fc3RvcmFnZSA9IF9zdG9yYWdlO1xuXHR9XG5cdHB1dChzdG9yZSwgdmFsdWUpIHtcblx0XHR0aGlzLl9jaGVja1N0YXRlKCk7XG5cdFx0dGhpcy5fb3BlcmF0aW9ucy5wdXNoKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwicHV0XCIsXG5cdFx0XHRzdG9yZSxcblx0XHRcdHZhbHVlLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0ZGVsZXRlKHN0b3JlLCBrZXkpIHtcblx0XHR0aGlzLl9jaGVja1N0YXRlKCk7XG5cdFx0dGhpcy5fb3BlcmF0aW9ucy5wdXNoKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwiZGVsZXRlXCIsXG5cdFx0XHRzdG9yZSxcblx0XHRcdGtleSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdHVwZGF0ZShzdG9yZSwga2V5LCB1cGRhdGVzKSB7XG5cdFx0dGhpcy5fY2hlY2tTdGF0ZSgpO1xuXHRcdHRoaXMuX29wZXJhdGlvbnMucHVzaCh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHR0eXBlOiBcInVwZGF0ZVwiLFxuXHRcdFx0c3RvcmUsXG5cdFx0XHRrZXksXG5cdFx0XHR2YWx1ZTogdXBkYXRlcyxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGFzeW5jIGNvbW1pdCgpIHtcblx0XHR0aGlzLl9jaGVja1N0YXRlKCk7XG5cdFx0aWYgKHRoaXMuX29wZXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLl9pc0NvbW1pdHRlZCA9IHRydWU7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuX3N0b3JhZ2UuZXhlY3V0ZVRyYW5zYWN0aW9uKHRoaXMuX29wZXJhdGlvbnMpO1xuXHRcdHRoaXMuX2lzQ29tbWl0dGVkID0gdHJ1ZTtcblx0fVxuXHRyb2xsYmFjaygpIHtcblx0XHR0aGlzLl9vcGVyYXRpb25zID0gW107XG5cdFx0dGhpcy5faXNSb2xsZWRCYWNrID0gdHJ1ZTtcblx0fVxuXHRnZXQgb3BlcmF0aW9uQ291bnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX29wZXJhdGlvbnMubGVuZ3RoO1xuXHR9XG5cdF9jaGVja1N0YXRlKCkge1xuXHRcdGlmICh0aGlzLl9pc0NvbW1pdHRlZCkgdGhyb3cgbmV3IEVycm9yKFwiVHJhbnNhY3Rpb24gYWxyZWFkeSBjb21taXR0ZWRcIik7XG5cdFx0aWYgKHRoaXMuX2lzUm9sbGVkQmFjaykgdGhyb3cgbmV3IEVycm9yKFwiVHJhbnNhY3Rpb24gYWxyZWFkeSByb2xsZWQgYmFja1wiKTtcblx0fVxufTtcbnZhciBfc3RvcmFnZUluc3RhbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5mdW5jdGlvbiBnZXRDaGFubmVsU3RvcmFnZShjaGFubmVsTmFtZSkge1xuXHRpZiAoIV9zdG9yYWdlSW5zdGFuY2VzLmhhcyhjaGFubmVsTmFtZSkpIF9zdG9yYWdlSW5zdGFuY2VzLnNldChjaGFubmVsTmFtZSwgbmV3IENoYW5uZWxTdG9yYWdlKGNoYW5uZWxOYW1lKSk7XG5cdHJldHVybiBfc3RvcmFnZUluc3RhbmNlcy5nZXQoY2hhbm5lbE5hbWUpO1xufVxuZnVuY3Rpb24gY2xvc2VBbGxTdG9yYWdlKCkge1xuXHRmb3IgKGNvbnN0IHN0b3JhZ2Ugb2YgX3N0b3JhZ2VJbnN0YW5jZXMudmFsdWVzKCkpIHN0b3JhZ2UuY2xvc2UoKTtcblx0X3N0b3JhZ2VJbnN0YW5jZXMuY2xlYXIoKTtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvY2hhbm5lbC9DaGFubmVsQ29udGV4dC50c1xudmFyIHdvcmtlckJhc2UgPSBnZXRXb3JrZXJSZXNvbHZlQmFzZVVybCgpO1xudmFyIHdvcmtlckNvZGUgPSB3b3JrZXJCYXNlLmxlbmd0aCA+IDAgPyBuZXcgVVJMKFwiLi4vdHJhbnNwb3J0L1dvcmtlci50c1wiLCB3b3JrZXJCYXNlKSA6IFwiXCI7XG52YXIgUmVtb3RlQ2hhbm5lbEhlbHBlciQxID0gY2xhc3Mge1xuXHRfY2hhbm5lbDtcblx0X2NvbnRleHQ7XG5cdF9vcHRpb25zO1xuXHRfY29ubmVjdGlvbjtcblx0X3N0b3JhZ2U7XG5cdGNvbnN0cnVjdG9yKF9jaGFubmVsLCBfY29udGV4dCwgX29wdGlvbnMgPSB7fSkge1xuXHRcdHRoaXMuX2NoYW5uZWwgPSBfY2hhbm5lbDtcblx0XHR0aGlzLl9jb250ZXh0ID0gX2NvbnRleHQ7XG5cdFx0dGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb24gPSBnZXRDb25uZWN0aW9uKF9jaGFubmVsKTtcblx0XHR0aGlzLl9zdG9yYWdlID0gZ2V0Q2hhbm5lbFN0b3JhZ2UoX2NoYW5uZWwpO1xuXHR9XG5cdGFzeW5jIHJlcXVlc3QocGF0aCwgYWN0aW9uLCBhcmdzLCBvcHRpb25zID0ge30pIHtcblx0XHRsZXQgbm9ybWFsaXplZFBhdGggPSB0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIiA/IFtwYXRoXSA6IHBhdGg7XG5cdFx0bGV0IG5vcm1hbGl6ZWRBY3Rpb24gPSBhY3Rpb247XG5cdFx0bGV0IG5vcm1hbGl6ZWRBcmdzID0gYXJncztcblx0XHRpZiAoQXJyYXkuaXNBcnJheShhY3Rpb24pICYmIGlzUmVmbGVjdEFjdGlvbihwYXRoKSkge1xuXHRcdFx0b3B0aW9ucyA9IGFyZ3M7XG5cdFx0XHRub3JtYWxpemVkQXJncyA9IGFjdGlvbjtcblx0XHRcdG5vcm1hbGl6ZWRBY3Rpb24gPSBwYXRoO1xuXHRcdFx0bm9ybWFsaXplZFBhdGggPSBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHQuZ2V0SG9zdCgpPy5yZXF1ZXN0KG5vcm1hbGl6ZWRQYXRoLCBub3JtYWxpemVkQWN0aW9uLCBub3JtYWxpemVkQXJncywgb3B0aW9ucywgdGhpcy5fY2hhbm5lbCk7XG5cdH1cblx0YXN5bmMgZG9JbXBvcnRNb2R1bGUodXJsLCBvcHRpb25zID0ge30pIHtcblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KFtdLCBXUmVmbGVjdEFjdGlvbi5JTVBPUlQsIFt1cmxdLCBvcHRpb25zKTtcblx0fVxuXHRhc3luYyBkZWZlck1lc3NhZ2UocGF5bG9hZCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0b3JhZ2UuZGVmZXIoe1xuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbCxcblx0XHRcdHNlbmRlcjogdGhpcy5fY29udGV4dC5ob3N0TmFtZSxcblx0XHRcdHR5cGU6IFwicmVxdWVzdFwiLFxuXHRcdFx0cGF5bG9hZFxuXHRcdH0sIG9wdGlvbnMpO1xuXHR9XG5cdGFzeW5jIGdldFBlbmRpbmdNZXNzYWdlcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RvcmFnZS5nZXREZWZlcnJlZE1lc3NhZ2VzKHRoaXMuX2NoYW5uZWwsIHsgc3RhdHVzOiBcInBlbmRpbmdcIiB9KTtcblx0fVxuXHRnZXQgY29ubmVjdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbjtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWw7XG5cdH1cblx0Z2V0IGNvbnRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHQ7XG5cdH1cbn07XG52YXIgQ2hhbm5lbEhhbmRsZXIkMSA9IGNsYXNzIHtcblx0X2NoYW5uZWw7XG5cdF9jb250ZXh0O1xuXHRfb3B0aW9ucztcblx0X2Nvbm5lY3Rpb247XG5cdF91bmlmaWVkO1xuXHRnZXQgX2ZvclJlc29sdmVzKCkge1xuXHRcdHJldHVybiB0aGlzLl91bmlmaWVkLl9fZ2V0UHJpdmF0ZShcIl9wZW5kaW5nXCIpO1xuXHR9XG5cdGdldCBfc3Vic2NyaXB0aW9ucygpIHtcblx0XHRyZXR1cm4gdGhpcy5fdW5pZmllZC5fX2dldFByaXZhdGUoXCJfc3Vic2NyaXB0aW9uc1wiKTtcblx0fVxuXHRnZXQgX2Jyb2FkY2FzdHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3VuaWZpZWQuX19nZXRQcml2YXRlKFwiX3RyYW5zcG9ydHNcIik7XG5cdH1cblx0Y29uc3RydWN0b3IoX2NoYW5uZWwsIF9jb250ZXh0LCBfb3B0aW9ucyA9IHt9KSB7XG5cdFx0dGhpcy5fY2hhbm5lbCA9IF9jaGFubmVsO1xuXHRcdHRoaXMuX2NvbnRleHQgPSBfY29udGV4dDtcblx0XHR0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG5cdFx0dGhpcy5fY29ubmVjdGlvbiA9IGdldENvbm5lY3Rpb25Qb29sKCkuZ2V0T3JDcmVhdGUoX2NoYW5uZWwsIFwiaW50ZXJuYWxcIiwgX29wdGlvbnMpO1xuXHRcdHRoaXMuX3VuaWZpZWQgPSBuZXcgVW5pZmllZENoYW5uZWwoe1xuXHRcdFx0bmFtZTogX2NoYW5uZWwsXG5cdFx0XHRhdXRvTGlzdGVuOiBmYWxzZSxcblx0XHRcdHRpbWVvdXQ6IF9vcHRpb25zPy50aW1lb3V0XG5cdFx0fSk7XG5cdH1cblx0Y3JlYXRlUmVtb3RlQ2hhbm5lbChjaGFubmVsLCBvcHRpb25zID0ge30sIGJyb2FkY2FzdCkge1xuXHRcdGNvbnN0IHRyYW5zcG9ydCA9IG5vcm1hbGl6ZVRyYW5zcG9ydEJpbmRpbmcoYnJvYWRjYXN0ID8/IHRoaXMuX2NvbnRleHQuJGNyZWF0ZU9yVXNlRXhpc3RpbmdSZW1vdGUoY2hhbm5lbCwgb3B0aW9ucywgYnJvYWRjYXN0ID8/IG51bGwpPy5tZXNzYWdlQ2hhbm5lbD8ucG9ydDEpO1xuXHRcdGNvbnN0IHRyYW5zcG9ydFR5cGUgPSBnZXREeW5hbWljVHJhbnNwb3J0VHlwZSh0cmFuc3BvcnQ/LnRhcmdldCA/PyB0cmFuc3BvcnQpO1xuXHRcdHRoaXMuX3VuaWZpZWQubGlzdGVuKHRyYW5zcG9ydD8udGFyZ2V0LCB7IHRhcmdldENoYW5uZWw6IGNoYW5uZWwgfSk7XG5cdFx0aWYgKHRyYW5zcG9ydCkge1xuXHRcdFx0dGhpcy5fYnJvYWRjYXN0cz8uc2V0Py4oY2hhbm5lbCwgdHJhbnNwb3J0KTtcblx0XHRcdGlmICghKHRyYW5zcG9ydFR5cGUgPT09IFwic2VsZlwiICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PT0gXCJ1bmRlZmluZWRcIikpIHRoaXMuX3VuaWZpZWQuY29ubmVjdCh0cmFuc3BvcnQsIHsgdGFyZ2V0Q2hhbm5lbDogY2hhbm5lbCB9KTtcblx0XHRcdHRoaXMuX2NvbnRleHQuJHJlZ2lzdGVyQ29ubmVjdGlvbih7XG5cdFx0XHRcdGxvY2FsQ2hhbm5lbDogdGhpcy5fY2hhbm5lbCxcblx0XHRcdFx0cmVtb3RlQ2hhbm5lbDogY2hhbm5lbCxcblx0XHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsLFxuXHRcdFx0XHRkaXJlY3Rpb246IFwib3V0Z29pbmdcIixcblx0XHRcdFx0dHJhbnNwb3J0VHlwZVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLm5vdGlmeUNoYW5uZWwoY2hhbm5lbCwge1xuXHRcdFx0XHRjb250ZXh0SWQ6IHRoaXMuX2NvbnRleHQuaWQsXG5cdFx0XHRcdGNvbnRleHROYW1lOiB0aGlzLl9jb250ZXh0Lmhvc3ROYW1lXG5cdFx0XHR9LCBcImNvbm5lY3RcIik7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgUmVtb3RlQ2hhbm5lbEhlbHBlciQxKGNoYW5uZWwsIHRoaXMuX2NvbnRleHQsIG9wdGlvbnMpO1xuXHR9XG5cdGdldENoYW5uZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWw7XG5cdH1cblx0Z2V0IGNvbm5lY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb247XG5cdH1cblx0cmVxdWVzdChwYXRoLCBhY3Rpb24sIGFyZ3MsIG9wdGlvbnMgPSB7fSwgdG9DaGFubmVsID0gXCJ3b3JrZXJcIikge1xuXHRcdGxldCBub3JtYWxpemVkUGF0aCA9IHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiID8gW3BhdGhdIDogcGF0aDtcblx0XHRsZXQgbm9ybWFsaXplZEFyZ3MgPSBhcmdzO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGFjdGlvbikgJiYgaXNSZWZsZWN0QWN0aW9uKHBhdGgpKSB7XG5cdFx0XHR0b0NoYW5uZWwgPSBvcHRpb25zO1xuXHRcdFx0b3B0aW9ucyA9IGFyZ3M7XG5cdFx0XHRub3JtYWxpemVkQXJncyA9IGFjdGlvbjtcblx0XHRcdGFjdGlvbiA9IHBhdGg7XG5cdFx0XHRub3JtYWxpemVkUGF0aCA9IFtdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fdW5pZmllZC5pbnZva2UodG9DaGFubmVsLCBhY3Rpb24sIG5vcm1hbGl6ZWRQYXRoID8/IFtdLCBBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRBcmdzKSA/IG5vcm1hbGl6ZWRBcmdzIDogW25vcm1hbGl6ZWRBcmdzXSk7XG5cdH1cblx0cmVzb2x2ZVJlc3BvbnNlKHJlcUlkLCByZXN1bHQpIHtcblx0XHR0aGlzLl9mb3JSZXNvbHZlcy5nZXQocmVxSWQpPy5yZXNvbHZlPy4ocmVzdWx0KTtcblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5fZm9yUmVzb2x2ZXMuZ2V0KHJlcUlkKT8ucHJvbWlzZTtcblx0XHR0aGlzLl9mb3JSZXNvbHZlcy5kZWxldGUocmVxSWQpO1xuXHRcdHJldHVybiBwcm9taXNlO1xuXHR9XG5cdGFzeW5jIGhhbmRsZUFuZFJlc3BvbnNlKHJlcXVlc3QsIHJlcUlkLCByZXNwb25zZUZuKSB7fVxuXHRub3RpZnlDaGFubmVsKHRhcmdldENoYW5uZWwsIHBheWxvYWQgPSB7fSwgdHlwZSA9IFwibm90aWZ5XCIpIHtcblx0XHRyZXR1cm4gdGhpcy5fdW5pZmllZC5ub3RpZnkodGFyZ2V0Q2hhbm5lbCwge1xuXHRcdFx0Li4ucGF5bG9hZCxcblx0XHRcdGZyb206IHRoaXMuX2NoYW5uZWwsXG5cdFx0XHR0bzogdGFyZ2V0Q2hhbm5lbFxuXHRcdH0sIHR5cGUpO1xuXHR9XG5cdGdldENvbm5lY3RlZENoYW5uZWxzKCkge1xuXHRcdHJldHVybiB0aGlzLl91bmlmaWVkLmNvbm5lY3RlZENoYW5uZWxzO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcblx0XHR0aGlzLl9mb3JSZXNvbHZlcy5jbGVhcigpO1xuXHRcdHRoaXMuX2Jyb2FkY2FzdHM/LnZhbHVlcz8uKCk/LmZvckVhY2goKHRyYW5zcG9ydCkgPT4gdHJhbnNwb3J0LmNsb3NlPy4oKSk7XG5cdFx0dGhpcy5fYnJvYWRjYXN0cz8uY2xlYXI/LigpO1xuXHRcdHRoaXMuX3VuaWZpZWQuY2xvc2UoKTtcblx0fVxuXHRnZXQgdW5pZmllZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdW5pZmllZDtcblx0fVxufTtcbnZhciBDaGFubmVsQ29udGV4dCA9IGNsYXNzIHtcblx0X29wdGlvbnM7XG5cdF9pZCA9IFVVSUR2NCgpO1xuXHRfaG9zdE5hbWU7XG5cdF9ob3N0ID0gbnVsbDtcblx0X2VuZHBvaW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF91bmlmaWVkQnlDaGFubmVsID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3VuaWZpZWRDb25uZWN0aW9uU3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9yZW1vdGVDaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9kZWZlcnJlZENoYW5uZWxzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2Nvbm5lY3Rpb25FdmVudHMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAyMDAgfSk7XG5cdF9jb25uZWN0aW9uUmVnaXN0cnkgPSBuZXcgQ29ubmVjdGlvblJlZ2lzdHJ5KCgpID0+IFVVSUR2NCgpLCAoZXZlbnQpID0+IHRoaXMuX2VtaXRDb25uZWN0aW9uRXZlbnQoZXZlbnQpKTtcblx0X2Nsb3NlZCA9IGZhbHNlO1xuXHRfZ2xvYmFsU2VsZiA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKF9vcHRpb25zID0ge30pIHtcblx0XHR0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG5cdFx0dGhpcy5faG9zdE5hbWUgPSBfb3B0aW9ucy5uYW1lID8/IGBjdHgtJHt0aGlzLl9pZC5zbGljZSgwLCA4KX1gO1xuXHRcdGlmIChfb3B0aW9ucy51c2VHbG9iYWxTZWxmICE9PSBmYWxzZSkgdGhpcy5fZ2xvYmFsU2VsZiA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGw7XG5cdH1cblx0aW5pdEhvc3QobmFtZSkge1xuXHRcdGlmICh0aGlzLl9ob3N0ICYmICFuYW1lKSByZXR1cm4gdGhpcy5faG9zdDtcblx0XHRjb25zdCBob3N0TmFtZSA9IG5hbWUgPz8gdGhpcy5faG9zdE5hbWU7XG5cdFx0dGhpcy5faG9zdE5hbWUgPSBob3N0TmFtZTtcblx0XHRpZiAodGhpcy5fZW5kcG9pbnRzLmhhcyhob3N0TmFtZSkpIHtcblx0XHRcdHRoaXMuX2hvc3QgPSB0aGlzLl9lbmRwb2ludHMuZ2V0KGhvc3ROYW1lKS5oYW5kbGVyO1xuXHRcdFx0cmV0dXJuIHRoaXMuX2hvc3Q7XG5cdFx0fVxuXHRcdHRoaXMuX2hvc3QgPSBuZXcgQ2hhbm5lbEhhbmRsZXIkMShob3N0TmFtZSwgdGhpcywgdGhpcy5fb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyk7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSB7XG5cdFx0XHRuYW1lOiBob3N0TmFtZSxcblx0XHRcdGhhbmRsZXI6IHRoaXMuX2hvc3QsXG5cdFx0XHRjb25uZWN0aW9uOiB0aGlzLl9ob3N0LmNvbm5lY3Rpb24sXG5cdFx0XHRzdWJzY3JpcHRpb25zOiBbXSxcblx0XHRcdHJlYWR5OiBQcm9taXNlLnJlc29sdmUobnVsbCksXG5cdFx0XHR1bmlmaWVkOiB0aGlzLl9ob3N0LnVuaWZpZWRcblx0XHR9O1xuXHRcdHRoaXMuX2VuZHBvaW50cy5zZXQoaG9zdE5hbWUsIGVuZHBvaW50KTtcblx0XHR0aGlzLl9yZWdpc3RlclVuaWZpZWRDaGFubmVsKGhvc3ROYW1lLCB0aGlzLl9ob3N0LnVuaWZpZWQpO1xuXHRcdHJldHVybiB0aGlzLl9ob3N0O1xuXHR9XG5cdGdldEhvc3QoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2hvc3QgPz8gdGhpcy5pbml0SG9zdCgpO1xuXHR9XG5cdGdldCBob3N0TmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5faG9zdE5hbWU7XG5cdH1cblx0Z2V0IGlkKCkge1xuXHRcdHJldHVybiB0aGlzLl9pZDtcblx0fVxuXHRnZXQgb25Db25uZWN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uRXZlbnRzO1xuXHR9XG5cdHN1YnNjcmliZUNvbm5lY3Rpb25zKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbkV2ZW50cy5zdWJzY3JpYmUoaGFuZGxlcik7XG5cdH1cblx0bm90aWZ5Q29ubmVjdGlvbnMocGF5bG9hZCA9IHt9LCBxdWVyeSA9IHt9KSB7XG5cdFx0bGV0IHNlbnQgPSAwO1xuXHRcdGZvciAoY29uc3QgZW5kcG9pbnQgb2YgdGhpcy5fZW5kcG9pbnRzLnZhbHVlcygpKSB7XG5cdFx0XHRjb25zdCBjb25uZWN0ZWRUYXJnZXRzID0gZW5kcG9pbnQuaGFuZGxlci5nZXRDb25uZWN0ZWRDaGFubmVscygpO1xuXHRcdFx0Zm9yIChjb25zdCByZW1vdGVDaGFubmVsIG9mIGNvbm5lY3RlZFRhcmdldHMpIHtcblx0XHRcdFx0aWYgKHF1ZXJ5LmxvY2FsQ2hhbm5lbCAmJiBxdWVyeS5sb2NhbENoYW5uZWwgIT09IGVuZHBvaW50Lm5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRpZiAocXVlcnkucmVtb3RlQ2hhbm5lbCAmJiBxdWVyeS5yZW1vdGVDaGFubmVsICE9PSByZW1vdGVDaGFubmVsKSBjb250aW51ZTtcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmcgPSB0aGlzLnF1ZXJ5Q29ubmVjdGlvbnMoe1xuXHRcdFx0XHRcdGxvY2FsQ2hhbm5lbDogZW5kcG9pbnQubmFtZSxcblx0XHRcdFx0XHRyZW1vdGVDaGFubmVsLFxuXHRcdFx0XHRcdHN0YXR1czogXCJhY3RpdmVcIlxuXHRcdFx0XHR9KVswXTtcblx0XHRcdFx0aWYgKHF1ZXJ5LnNlbmRlciAmJiBleGlzdGluZz8uc2VuZGVyICE9PSBxdWVyeS5zZW5kZXIpIGNvbnRpbnVlO1xuXHRcdFx0XHRpZiAocXVlcnkudHJhbnNwb3J0VHlwZSAmJiBleGlzdGluZz8udHJhbnNwb3J0VHlwZSAhPT0gcXVlcnkudHJhbnNwb3J0VHlwZSkgY29udGludWU7XG5cdFx0XHRcdGlmIChxdWVyeS5jaGFubmVsICYmIHF1ZXJ5LmNoYW5uZWwgIT09IGVuZHBvaW50Lm5hbWUgJiYgcXVlcnkuY2hhbm5lbCAhPT0gcmVtb3RlQ2hhbm5lbCkgY29udGludWU7XG5cdFx0XHRcdGlmIChlbmRwb2ludC5oYW5kbGVyLm5vdGlmeUNoYW5uZWwocmVtb3RlQ2hhbm5lbCwgcGF5bG9hZCwgXCJub3RpZnlcIikpIHNlbnQrKztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNlbnQ7XG5cdH1cblx0cXVlcnlDb25uZWN0aW9ucyhxdWVyeSA9IHt9KSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25SZWdpc3RyeS5xdWVyeShxdWVyeSkubWFwKChjb25uZWN0aW9uKSA9PiAoe1xuXHRcdFx0Li4uY29ubmVjdGlvbixcblx0XHRcdGNvbnRleHRJZDogdGhpcy5faWRcblx0XHR9KSk7XG5cdH1cblx0Y3JlYXRlQ2hhbm5lbChuYW1lLCBvcHRpb25zID0ge30pIHtcblx0XHRpZiAodGhpcy5fZW5kcG9pbnRzLmhhcyhuYW1lKSkgcmV0dXJuIHRoaXMuX2VuZHBvaW50cy5nZXQobmFtZSk7XG5cdFx0Y29uc3QgaGFuZGxlciA9IG5ldyBDaGFubmVsSGFuZGxlciQxKG5hbWUsIHRoaXMsIHtcblx0XHRcdC4uLnRoaXMuX29wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fSk7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSB7XG5cdFx0XHRuYW1lLFxuXHRcdFx0aGFuZGxlcixcblx0XHRcdGNvbm5lY3Rpb246IGhhbmRsZXIuY29ubmVjdGlvbixcblx0XHRcdHN1YnNjcmlwdGlvbnM6IFtdLFxuXHRcdFx0cmVhZHk6IFByb21pc2UucmVzb2x2ZShudWxsKSxcblx0XHRcdHVuaWZpZWQ6IGhhbmRsZXIudW5pZmllZFxuXHRcdH07XG5cdFx0dGhpcy5fZW5kcG9pbnRzLnNldChuYW1lLCBlbmRwb2ludCk7XG5cdFx0dGhpcy5fcmVnaXN0ZXJVbmlmaWVkQ2hhbm5lbChuYW1lLCBoYW5kbGVyLnVuaWZpZWQpO1xuXHRcdHJldHVybiBlbmRwb2ludDtcblx0fVxuXHRjcmVhdGVDaGFubmVscyhuYW1lcywgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0XHRmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHJlc3VsdC5zZXQobmFtZSwgdGhpcy5jcmVhdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMpKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdGdldENoYW5uZWwobmFtZSkge1xuXHRcdHJldHVybiB0aGlzLl9lbmRwb2ludHMuZ2V0KG5hbWUpO1xuXHR9XG5cdGdldE9yQ3JlYXRlQ2hhbm5lbChuYW1lLCBvcHRpb25zID0ge30pIHtcblx0XHRyZXR1cm4gdGhpcy5fZW5kcG9pbnRzLmdldChuYW1lKSA/PyB0aGlzLmNyZWF0ZUNoYW5uZWwobmFtZSwgb3B0aW9ucyk7XG5cdH1cblx0aGFzQ2hhbm5lbChuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2VuZHBvaW50cy5oYXMobmFtZSk7XG5cdH1cblx0Z2V0Q2hhbm5lbE5hbWVzKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5fZW5kcG9pbnRzLmtleXMoKV07XG5cdH1cblx0Z2V0IHNpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2VuZHBvaW50cy5zaXplO1xuXHR9XG5cdGRlZmVyKG5hbWUsIGluaXRGbikge1xuXHRcdHRoaXMuX2RlZmVycmVkQ2hhbm5lbHMuc2V0KG5hbWUsIGluaXRGbik7XG5cdH1cblx0YXN5bmMgaW5pdERlZmVycmVkKG5hbWUpIHtcblx0XHRjb25zdCBpbml0Rm4gPSB0aGlzLl9kZWZlcnJlZENoYW5uZWxzLmdldChuYW1lKTtcblx0XHRpZiAoIWluaXRGbikgcmV0dXJuIG51bGw7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSBhd2FpdCBpbml0Rm4oKTtcblx0XHR0aGlzLl9lbmRwb2ludHMuc2V0KG5hbWUsIGVuZHBvaW50KTtcblx0XHR0aGlzLl9kZWZlcnJlZENoYW5uZWxzLmRlbGV0ZShuYW1lKTtcblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblx0aXNEZWZlcnJlZChuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2RlZmVycmVkQ2hhbm5lbHMuaGFzKG5hbWUpO1xuXHR9XG5cdGFzeW5jIGdldENoYW5uZWxBc3luYyhuYW1lKSB7XG5cdFx0aWYgKHRoaXMuX2VuZHBvaW50cy5oYXMobmFtZSkpIHJldHVybiB0aGlzLl9lbmRwb2ludHMuZ2V0KG5hbWUpO1xuXHRcdGlmICh0aGlzLl9kZWZlcnJlZENoYW5uZWxzLmhhcyhuYW1lKSkgcmV0dXJuIHRoaXMuaW5pdERlZmVycmVkKG5hbWUpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGFzeW5jIGFkZFdvcmtlcihuYW1lLCB3b3JrZXIsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IHdvcmtlckluc3RhbmNlID0gbG9hZFdvcmtlciQxKHdvcmtlcik7XG5cdFx0aWYgKCF3b3JrZXJJbnN0YW5jZSkgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIHdvcmtlciBmb3IgY2hhbm5lbDogJHtuYW1lfWApO1xuXHRcdGNvbnN0IGhhbmRsZXIgPSBuZXcgQ2hhbm5lbEhhbmRsZXIkMShuYW1lLCB0aGlzLCB7XG5cdFx0XHQuLi50aGlzLl9vcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pO1xuXHRcdGNvbnN0IHJlYWR5ID0gaGFuZGxlci5jcmVhdGVSZW1vdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMsIHdvcmtlckluc3RhbmNlKTtcblx0XHRjb25zdCBlbmRwb2ludCA9IHtcblx0XHRcdG5hbWUsXG5cdFx0XHRoYW5kbGVyLFxuXHRcdFx0Y29ubmVjdGlvbjogaGFuZGxlci5jb25uZWN0aW9uLFxuXHRcdFx0c3Vic2NyaXB0aW9uczogW10sXG5cdFx0XHR0cmFuc3BvcnRUeXBlOiBcIndvcmtlclwiLFxuXHRcdFx0cmVhZHk6IFByb21pc2UucmVzb2x2ZShyZWFkeSksXG5cdFx0XHR1bmlmaWVkOiBoYW5kbGVyLnVuaWZpZWRcblx0XHR9O1xuXHRcdHRoaXMuX2VuZHBvaW50cy5zZXQobmFtZSwgZW5kcG9pbnQpO1xuXHRcdHRoaXMuX3JlZ2lzdGVyVW5pZmllZENoYW5uZWwobmFtZSwgaGFuZGxlci51bmlmaWVkKTtcblx0XHR0aGlzLl9yZW1vdGVDaGFubmVscy5zZXQobmFtZSwge1xuXHRcdFx0Y2hhbm5lbDogbmFtZSxcblx0XHRcdGNvbnRleHQ6IHRoaXMsXG5cdFx0XHRyZW1vdGU6IFByb21pc2UucmVzb2x2ZShyZWFkeSksXG5cdFx0XHR0cmFuc3BvcnQ6IHdvcmtlckluc3RhbmNlLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogXCJ3b3JrZXJcIlxuXHRcdH0pO1xuXHRcdHJldHVybiBlbmRwb2ludDtcblx0fVxuXHRhc3luYyBhZGRQb3J0KG5hbWUsIHBvcnQsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IGhhbmRsZXIgPSBuZXcgQ2hhbm5lbEhhbmRsZXIkMShuYW1lLCB0aGlzLCB7XG5cdFx0XHQuLi50aGlzLl9vcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pO1xuXHRcdHBvcnQuc3RhcnQ/LigpO1xuXHRcdGNvbnN0IHJlYWR5ID0gaGFuZGxlci5jcmVhdGVSZW1vdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMsIHBvcnQpO1xuXHRcdGNvbnN0IGVuZHBvaW50ID0ge1xuXHRcdFx0bmFtZSxcblx0XHRcdGhhbmRsZXIsXG5cdFx0XHRjb25uZWN0aW9uOiBoYW5kbGVyLmNvbm5lY3Rpb24sXG5cdFx0XHRzdWJzY3JpcHRpb25zOiBbXSxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwibWVzc2FnZS1wb3J0XCIsXG5cdFx0XHRyZWFkeTogUHJvbWlzZS5yZXNvbHZlKHJlYWR5KSxcblx0XHRcdHVuaWZpZWQ6IGhhbmRsZXIudW5pZmllZFxuXHRcdH07XG5cdFx0dGhpcy5fZW5kcG9pbnRzLnNldChuYW1lLCBlbmRwb2ludCk7XG5cdFx0dGhpcy5fcmVnaXN0ZXJVbmlmaWVkQ2hhbm5lbChuYW1lLCBoYW5kbGVyLnVuaWZpZWQpO1xuXHRcdHRoaXMuX3JlbW90ZUNoYW5uZWxzLnNldChuYW1lLCB7XG5cdFx0XHRjaGFubmVsOiBuYW1lLFxuXHRcdFx0Y29udGV4dDogdGhpcyxcblx0XHRcdHJlbW90ZTogUHJvbWlzZS5yZXNvbHZlKHJlYWR5KSxcblx0XHRcdHRyYW5zcG9ydDogcG9ydCxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwibWVzc2FnZS1wb3J0XCJcblx0XHR9KTtcblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblx0YXN5bmMgYWRkQnJvYWRjYXN0KG5hbWUsIGJyb2FkY2FzdE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IGJjID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoYnJvYWRjYXN0TmFtZSA/PyBuYW1lKTtcblx0XHRjb25zdCBoYW5kbGVyID0gbmV3IENoYW5uZWxIYW5kbGVyJDEobmFtZSwgdGhpcywge1xuXHRcdFx0Li4udGhpcy5fb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcblx0XHRcdC4uLm9wdGlvbnNcblx0XHR9KTtcblx0XHRjb25zdCByZWFkeSA9IGhhbmRsZXIuY3JlYXRlUmVtb3RlQ2hhbm5lbChuYW1lLCBvcHRpb25zLCBiYyk7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSB7XG5cdFx0XHRuYW1lLFxuXHRcdFx0aGFuZGxlcixcblx0XHRcdGNvbm5lY3Rpb246IGhhbmRsZXIuY29ubmVjdGlvbixcblx0XHRcdHN1YnNjcmlwdGlvbnM6IFtdLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogXCJicm9hZGNhc3RcIixcblx0XHRcdHJlYWR5OiBQcm9taXNlLnJlc29sdmUocmVhZHkpLFxuXHRcdFx0dW5pZmllZDogaGFuZGxlci51bmlmaWVkXG5cdFx0fTtcblx0XHR0aGlzLl9lbmRwb2ludHMuc2V0KG5hbWUsIGVuZHBvaW50KTtcblx0XHR0aGlzLl9yZWdpc3RlclVuaWZpZWRDaGFubmVsKG5hbWUsIGhhbmRsZXIudW5pZmllZCk7XG5cdFx0dGhpcy5fcmVtb3RlQ2hhbm5lbHMuc2V0KG5hbWUsIHtcblx0XHRcdGNoYW5uZWw6IG5hbWUsXG5cdFx0XHRjb250ZXh0OiB0aGlzLFxuXHRcdFx0cmVtb3RlOiBQcm9taXNlLnJlc29sdmUocmVhZHkpLFxuXHRcdFx0dHJhbnNwb3J0OiBiYyxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwiYnJvYWRjYXN0XCJcblx0XHR9KTtcblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblx0YWRkU2VsZkNoYW5uZWwobmFtZSwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IG5ldyBDaGFubmVsSGFuZGxlciQxKG5hbWUsIHRoaXMsIHtcblx0XHRcdC4uLnRoaXMuX29wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fSk7XG5cdFx0Y29uc3Qgc2VsZlRhcmdldCA9IHRoaXMuX2dsb2JhbFNlbGYgPz8gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGwpO1xuXHRcdGNvbnN0IGVuZHBvaW50ID0ge1xuXHRcdFx0bmFtZSxcblx0XHRcdGhhbmRsZXIsXG5cdFx0XHRjb25uZWN0aW9uOiBoYW5kbGVyLmNvbm5lY3Rpb24sXG5cdFx0XHRzdWJzY3JpcHRpb25zOiBbXSxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwic2VsZlwiLFxuXHRcdFx0cmVhZHk6IFByb21pc2UucmVzb2x2ZShzZWxmVGFyZ2V0ID8gaGFuZGxlci5jcmVhdGVSZW1vdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMsIHNlbGZUYXJnZXQpIDogbnVsbCksXG5cdFx0XHR1bmlmaWVkOiBoYW5kbGVyLnVuaWZpZWRcblx0XHR9O1xuXHRcdHRoaXMuX2VuZHBvaW50cy5zZXQobmFtZSwgZW5kcG9pbnQpO1xuXHRcdHRoaXMuX3JlZ2lzdGVyVW5pZmllZENoYW5uZWwobmFtZSwgaGFuZGxlci51bmlmaWVkKTtcblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblx0YXN5bmMgYWRkVHJhbnNwb3J0KG5hbWUsIGNvbmZpZykge1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBjb25maWcub3B0aW9ucyA/PyB7fTtcblx0XHRzd2l0Y2ggKGNvbmZpZy50eXBlKSB7XG5cdFx0XHRjYXNlIFwid29ya2VyXCI6XG5cdFx0XHRcdGlmICghY29uZmlnLndvcmtlcikgdGhyb3cgbmV3IEVycm9yKFwiV29ya2VyIHJlcXVpcmVkIGZvciB3b3JrZXIgdHJhbnNwb3J0XCIpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRXb3JrZXIobmFtZSwgY29uZmlnLndvcmtlciwgb3B0aW9ucyk7XG5cdFx0XHRjYXNlIFwibWVzc2FnZS1wb3J0XCI6XG5cdFx0XHRcdGlmICghY29uZmlnLnBvcnQpIHRocm93IG5ldyBFcnJvcihcIlBvcnQgcmVxdWlyZWQgZm9yIG1lc3NhZ2UtcG9ydCB0cmFuc3BvcnRcIik7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZFBvcnQobmFtZSwgY29uZmlnLnBvcnQsIG9wdGlvbnMpO1xuXHRcdFx0Y2FzZSBcImJyb2FkY2FzdFwiOlxuXHRcdFx0XHRjb25zdCBiY05hbWUgPSB0eXBlb2YgY29uZmlnLmJyb2FkY2FzdCA9PT0gXCJzdHJpbmdcIiA/IGNvbmZpZy5icm9hZGNhc3QgOiB2b2lkIDA7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZEJyb2FkY2FzdChuYW1lLCBiY05hbWUsIG9wdGlvbnMpO1xuXHRcdFx0Y2FzZSBcInNlbGZcIjogcmV0dXJuIHRoaXMuYWRkU2VsZkNoYW5uZWwobmFtZSwgb3B0aW9ucyk7XG5cdFx0XHRkZWZhdWx0OiByZXR1cm4gdGhpcy5jcmVhdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXHRjcmVhdGVDaGFubmVsUGFpcihuYW1lMSwgbmFtZTIsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IG1jID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG5cdFx0Y29uc3QgaGFuZGxlcjEgPSBuZXcgQ2hhbm5lbEhhbmRsZXIkMShuYW1lMSwgdGhpcywge1xuXHRcdFx0Li4udGhpcy5fb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcblx0XHRcdC4uLm9wdGlvbnNcblx0XHR9KTtcblx0XHRjb25zdCBoYW5kbGVyMiA9IG5ldyBDaGFubmVsSGFuZGxlciQxKG5hbWUyLCB0aGlzLCB7XG5cdFx0XHQuLi50aGlzLl9vcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pO1xuXHRcdG1jLnBvcnQxLnN0YXJ0KCk7XG5cdFx0bWMucG9ydDIuc3RhcnQoKTtcblx0XHRjb25zdCByZWFkeTEgPSBQcm9taXNlLnJlc29sdmUoaGFuZGxlcjEuY3JlYXRlUmVtb3RlQ2hhbm5lbChuYW1lMiwgb3B0aW9ucywgbWMucG9ydDEpKTtcblx0XHRjb25zdCByZWFkeTIgPSBQcm9taXNlLnJlc29sdmUoaGFuZGxlcjIuY3JlYXRlUmVtb3RlQ2hhbm5lbChuYW1lMSwgb3B0aW9ucywgbWMucG9ydDIpKTtcblx0XHRjb25zdCBjaGFubmVsMSA9IHtcblx0XHRcdG5hbWU6IG5hbWUxLFxuXHRcdFx0aGFuZGxlcjogaGFuZGxlcjEsXG5cdFx0XHRjb25uZWN0aW9uOiBoYW5kbGVyMS5jb25uZWN0aW9uLFxuXHRcdFx0c3Vic2NyaXB0aW9uczogW10sXG5cdFx0XHR0cmFuc3BvcnRUeXBlOiBcIm1lc3NhZ2UtcG9ydFwiLFxuXHRcdFx0cmVhZHk6IHJlYWR5MSxcblx0XHRcdHVuaWZpZWQ6IGhhbmRsZXIxLnVuaWZpZWRcblx0XHR9O1xuXHRcdGNvbnN0IGNoYW5uZWwyID0ge1xuXHRcdFx0bmFtZTogbmFtZTIsXG5cdFx0XHRoYW5kbGVyOiBoYW5kbGVyMixcblx0XHRcdGNvbm5lY3Rpb246IGhhbmRsZXIyLmNvbm5lY3Rpb24sXG5cdFx0XHRzdWJzY3JpcHRpb25zOiBbXSxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwibWVzc2FnZS1wb3J0XCIsXG5cdFx0XHRyZWFkeTogcmVhZHkyLFxuXHRcdFx0dW5pZmllZDogaGFuZGxlcjIudW5pZmllZFxuXHRcdH07XG5cdFx0dGhpcy5fZW5kcG9pbnRzLnNldChuYW1lMSwgY2hhbm5lbDEpO1xuXHRcdHRoaXMuX2VuZHBvaW50cy5zZXQobmFtZTIsIGNoYW5uZWwyKTtcblx0XHR0aGlzLl9yZWdpc3RlclVuaWZpZWRDaGFubmVsKG5hbWUxLCBoYW5kbGVyMS51bmlmaWVkKTtcblx0XHR0aGlzLl9yZWdpc3RlclVuaWZpZWRDaGFubmVsKG5hbWUyLCBoYW5kbGVyMi51bmlmaWVkKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2hhbm5lbDEsXG5cdFx0XHRjaGFubmVsMixcblx0XHRcdG1lc3NhZ2VDaGFubmVsOiBtY1xuXHRcdH07XG5cdH1cblx0Z2V0IGdsb2JhbFNlbGYoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dsb2JhbFNlbGY7XG5cdH1cblx0YXN5bmMgY29ubmVjdFJlbW90ZShjaGFubmVsTmFtZSwgb3B0aW9ucyA9IHt9LCBicm9hZGNhc3QpIHtcblx0XHR0aGlzLmluaXRIb3N0KCk7XG5cdFx0cmV0dXJuIHRoaXMuX2hvc3QuY3JlYXRlUmVtb3RlQ2hhbm5lbChjaGFubmVsTmFtZSwgb3B0aW9ucywgYnJvYWRjYXN0KTtcblx0fVxuXHRhc3luYyBpbXBvcnRNb2R1bGVJbkNoYW5uZWwoY2hhbm5lbE5hbWUsIHVybCwgb3B0aW9ucyA9IHt9LCBicm9hZGNhc3QpIHtcblx0XHRyZXR1cm4gKGF3YWl0IHRoaXMuY29ubmVjdFJlbW90ZShjaGFubmVsTmFtZSwgb3B0aW9ucy5jaGFubmVsT3B0aW9ucywgYnJvYWRjYXN0KSk/LmRvSW1wb3J0TW9kdWxlPy4odXJsLCBvcHRpb25zLmltcG9ydE9wdGlvbnMpO1xuXHR9XG5cdCRjcmVhdGVPclVzZUV4aXN0aW5nUmVtb3RlKGNoYW5uZWwsIG9wdGlvbnMgPSB7fSwgYnJvYWRjYXN0KSB7XG5cdFx0aWYgKGNoYW5uZWwgPT0gbnVsbCB8fCBicm9hZGNhc3QpIHJldHVybiBudWxsO1xuXHRcdGlmICh0aGlzLl9yZW1vdGVDaGFubmVscy5oYXMoY2hhbm5lbCkpIHJldHVybiB0aGlzLl9yZW1vdGVDaGFubmVscy5nZXQoY2hhbm5lbCk7XG5cdFx0Y29uc3QgbXNnQ2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuXHRcdGNvbnN0IHByb21pc2UgPSBQcm9taXNlZChuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0Y29uc3Qgd29ya2VyID0gbG9hZFdvcmtlciQxKHdvcmtlckNvZGUpO1xuXHRcdFx0d29ya2VyPy5hZGRFdmVudExpc3RlbmVyPy4oXCJtZXNzYWdlXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQuZGF0YS50eXBlID09PSBcImNoYW5uZWxDcmVhdGVkXCIpIHtcblx0XHRcdFx0XHRtc2dDaGFubmVsLnBvcnQxPy5zdGFydD8uKCk7XG5cdFx0XHRcdFx0cmVzb2x2ZShuZXcgUmVtb3RlQ2hhbm5lbEhlbHBlciQxKGV2ZW50LmRhdGEuY2hhbm5lbCwgdGhpcywgb3B0aW9ucykpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHdvcmtlcj8ucG9zdE1lc3NhZ2U/Lih7XG5cdFx0XHRcdHR5cGU6IFwiY3JlYXRlQ2hhbm5lbFwiLFxuXHRcdFx0XHRjaGFubmVsLFxuXHRcdFx0XHRzZW5kZXI6IHRoaXMuX2hvc3ROYW1lLFxuXHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRtZXNzYWdlUG9ydDogbXNnQ2hhbm5lbC5wb3J0MlxuXHRcdFx0fSwgeyB0cmFuc2ZlcjogW21zZ0NoYW5uZWwucG9ydDJdIH0pO1xuXHRcdH0pKTtcblx0XHRjb25zdCBpbmZvID0ge1xuXHRcdFx0Y2hhbm5lbCxcblx0XHRcdGNvbnRleHQ6IHRoaXMsXG5cdFx0XHRtZXNzYWdlQ2hhbm5lbDogbXNnQ2hhbm5lbCxcblx0XHRcdHJlbW90ZTogcHJvbWlzZVxuXHRcdH07XG5cdFx0dGhpcy5fcmVtb3RlQ2hhbm5lbHMuc2V0KGNoYW5uZWwsIGluZm8pO1xuXHRcdHJldHVybiBpbmZvO1xuXHR9XG5cdCRyZWdpc3RlckNvbm5lY3Rpb24ocGFyYW1zKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLnRoaXMuX2Nvbm5lY3Rpb25SZWdpc3RyeS5yZWdpc3RlcihwYXJhbXMpLFxuXHRcdFx0Y29udGV4dElkOiB0aGlzLl9pZFxuXHRcdH07XG5cdH1cblx0JG1hcmtOb3RpZmllZChwYXJhbXMpIHtcblx0XHRjb25zdCBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LnJlZ2lzdGVyKHtcblx0XHRcdGxvY2FsQ2hhbm5lbDogcGFyYW1zLmxvY2FsQ2hhbm5lbCxcblx0XHRcdHJlbW90ZUNoYW5uZWw6IHBhcmFtcy5yZW1vdGVDaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBwYXJhbXMuc2VuZGVyLFxuXHRcdFx0ZGlyZWN0aW9uOiBwYXJhbXMuZGlyZWN0aW9uLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogcGFyYW1zLnRyYW5zcG9ydFR5cGVcblx0XHR9KTtcblx0XHR0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkubWFya05vdGlmaWVkKGNvbm5lY3Rpb24sIHBhcmFtcy5wYXlsb2FkKTtcblx0fVxuXHQkb2JzZXJ2ZVNpZ25hbChwYXJhbXMpIHtcblx0XHRjb25zdCBkaXJlY3Rpb24gPSAocGFyYW1zLnBheWxvYWQ/LnR5cGUgPz8gXCJub3RpZnlcIikgPT09IFwiY29ubmVjdFwiID8gXCJpbmNvbWluZ1wiIDogXCJpbmNvbWluZ1wiO1xuXHRcdHRoaXMuJG1hcmtOb3RpZmllZCh7XG5cdFx0XHRsb2NhbENoYW5uZWw6IHBhcmFtcy5sb2NhbENoYW5uZWwsXG5cdFx0XHRyZW1vdGVDaGFubmVsOiBwYXJhbXMucmVtb3RlQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogcGFyYW1zLnNlbmRlcixcblx0XHRcdGRpcmVjdGlvbixcblx0XHRcdHRyYW5zcG9ydFR5cGU6IHBhcmFtcy50cmFuc3BvcnRUeXBlLFxuXHRcdFx0cGF5bG9hZDogcGFyYW1zLnBheWxvYWRcblx0XHR9KTtcblx0fVxuXHQkZm9yd2FyZFVuaWZpZWRDb25uZWN0aW9uRXZlbnQoY2hhbm5lbCwgZXZlbnQpIHtcblx0XHRjb25zdCBtYXBwZWRUcmFuc3BvcnRUeXBlID0gZXZlbnQuY29ubmVjdGlvbi50cmFuc3BvcnRUeXBlID8/IFwiaW50ZXJuYWxcIjtcblx0XHRjb25zdCBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LnJlZ2lzdGVyKHtcblx0XHRcdGxvY2FsQ2hhbm5lbDogZXZlbnQuY29ubmVjdGlvbi5sb2NhbENoYW5uZWwgfHwgY2hhbm5lbCxcblx0XHRcdHJlbW90ZUNoYW5uZWw6IGV2ZW50LmNvbm5lY3Rpb24ucmVtb3RlQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogZXZlbnQuY29ubmVjdGlvbi5zZW5kZXIsXG5cdFx0XHRkaXJlY3Rpb246IGV2ZW50LmNvbm5lY3Rpb24uZGlyZWN0aW9uLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogbWFwcGVkVHJhbnNwb3J0VHlwZSxcblx0XHRcdG1ldGFkYXRhOiBldmVudC5jb25uZWN0aW9uLm1ldGFkYXRhXG5cdFx0fSk7XG5cdFx0aWYgKGV2ZW50LnR5cGUgPT09IFwibm90aWZpZWRcIikgdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5Lm1hcmtOb3RpZmllZChjb25uZWN0aW9uLCBldmVudC5wYXlsb2FkKTtcblx0XHRlbHNlIGlmIChldmVudC50eXBlID09PSBcImRpc2Nvbm5lY3RlZFwiKSB0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkuY2xvc2VCeUNoYW5uZWwoZXZlbnQuY29ubmVjdGlvbi5sb2NhbENoYW5uZWwpO1xuXHR9XG5cdGNsb3NlQ2hhbm5lbChuYW1lKSB7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSB0aGlzLl9lbmRwb2ludHMuZ2V0KG5hbWUpO1xuXHRcdGlmICghZW5kcG9pbnQpIHJldHVybiBmYWxzZTtcblx0XHRlbmRwb2ludC5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG5cdFx0ZW5kcG9pbnQuaGFuZGxlci5jbG9zZSgpO1xuXHRcdGVuZHBvaW50LnRyYW5zcG9ydD8uZGV0YWNoKCk7XG5cdFx0dGhpcy5fdW5pZmllZENvbm5lY3Rpb25TdWJzLmdldChuYW1lKT8udW5zdWJzY3JpYmUoKTtcblx0XHR0aGlzLl91bmlmaWVkQ29ubmVjdGlvblN1YnMuZGVsZXRlKG5hbWUpO1xuXHRcdHRoaXMuX3VuaWZpZWRCeUNoYW5uZWwuZGVsZXRlKG5hbWUpO1xuXHRcdHRoaXMuX2VuZHBvaW50cy5kZWxldGUobmFtZSk7XG5cdFx0aWYgKG5hbWUgPT09IHRoaXMuX2hvc3ROYW1lKSB0aGlzLl9ob3N0ID0gbnVsbDtcblx0XHR0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkuY2xvc2VCeUNoYW5uZWwobmFtZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0aWYgKHRoaXMuX2Nsb3NlZCkgcmV0dXJuO1xuXHRcdHRoaXMuX2Nsb3NlZCA9IHRydWU7XG5cdFx0Zm9yIChjb25zdCBbbmFtZV0gb2YgdGhpcy5fZW5kcG9pbnRzKSB0aGlzLmNsb3NlQ2hhbm5lbChuYW1lKTtcblx0XHR0aGlzLl9yZW1vdGVDaGFubmVscy5jbGVhcigpO1xuXHRcdHRoaXMuX2hvc3QgPSBudWxsO1xuXHRcdHRoaXMuX3VuaWZpZWRDb25uZWN0aW9uU3Vicy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcblx0XHR0aGlzLl91bmlmaWVkQ29ubmVjdGlvblN1YnMuY2xlYXIoKTtcblx0XHR0aGlzLl91bmlmaWVkQnlDaGFubmVsLmNsZWFyKCk7XG5cdFx0dGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LmNsZWFyKCk7XG5cdFx0dGhpcy5fY29ubmVjdGlvbkV2ZW50cy5jb21wbGV0ZSgpO1xuXHR9XG5cdGdldCBjbG9zZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nsb3NlZDtcblx0fVxuXHRfcmVnaXN0ZXJVbmlmaWVkQ2hhbm5lbChuYW1lLCB1bmlmaWVkKSB7XG5cdFx0dGhpcy5fdW5pZmllZEJ5Q2hhbm5lbC5zZXQobmFtZSwgdW5pZmllZCk7XG5cdFx0dGhpcy5fdW5pZmllZENvbm5lY3Rpb25TdWJzLmdldChuYW1lKT8udW5zdWJzY3JpYmUoKTtcblx0XHRjb25zdCBzdWJzY3JpcHRpb24gPSB1bmlmaWVkLnN1YnNjcmliZUNvbm5lY3Rpb25zKChldmVudCkgPT4ge1xuXHRcdFx0dGhpcy4kZm9yd2FyZFVuaWZpZWRDb25uZWN0aW9uRXZlbnQobmFtZSwgZXZlbnQpO1xuXHRcdH0pO1xuXHRcdHRoaXMuX3VuaWZpZWRDb25uZWN0aW9uU3Vicy5zZXQobmFtZSwgc3Vic2NyaXB0aW9uKTtcblx0fVxuXHRfZW1pdENvbm5lY3Rpb25FdmVudChldmVudCkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25FdmVudHMubmV4dCh7XG5cdFx0XHQuLi5ldmVudCxcblx0XHRcdGNvbm5lY3Rpb246IHtcblx0XHRcdFx0Li4uZXZlbnQuY29ubmVjdGlvbixcblx0XHRcdFx0Y29udGV4dElkOiB0aGlzLl9pZFxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59O1xuZnVuY3Rpb24gaXNSZWZsZWN0QWN0aW9uKGFjdGlvbikge1xuXHRyZXR1cm4gWy4uLk9iamVjdC52YWx1ZXMoV1JlZmxlY3RBY3Rpb24pXS5pbmNsdWRlcyhhY3Rpb24pO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplVHJhbnNwb3J0QmluZGluZyh0YXJnZXQpIHtcblx0aWYgKCF0YXJnZXQpIHJldHVybiBudWxsO1xuXHRpZiAoaXNUcmFuc3BvcnRCaW5kaW5nKHRhcmdldCkpIHJldHVybiB0YXJnZXQ7XG5cdGNvbnN0IG5hdGl2ZVRhcmdldCA9IHRhcmdldDtcblx0Y29uc3QgdHJhbnNwb3J0VHlwZSA9IGdldER5bmFtaWNUcmFuc3BvcnRUeXBlKG5hdGl2ZVRhcmdldCk7XG5cdHJldHVybiB7XG5cdFx0dGFyZ2V0OiBuYXRpdmVUYXJnZXQsXG5cdFx0dGFyZ2V0Q2hhbm5lbDogXCJ1bmtub3duXCIsXG5cdFx0dHJhbnNwb3J0VHlwZTogdHJhbnNwb3J0VHlwZSA9PT0gXCJpbnRlcm5hbFwiID8gXCJzZWxmXCIgOiB0cmFuc3BvcnRUeXBlLFxuXHRcdHNlbmRlcjogKG1lc3NhZ2UsIHRyYW5zZmVyKSA9PiB7XG5cdFx0XHRpZiAodHlwZW9mIFdlYlNvY2tldCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBuYXRpdmVUYXJnZXQgaW5zdGFuY2VvZiBXZWJTb2NrZXQpIHtcblx0XHRcdFx0bmF0aXZlVGFyZ2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRuYXRpdmVUYXJnZXQucG9zdE1lc3NhZ2U/LihtZXNzYWdlLCB0cmFuc2Zlcj8ubGVuZ3RoID8geyB0cmFuc2ZlciB9IDogdm9pZCAwKTtcblx0XHR9LFxuXHRcdHBvc3RNZXNzYWdlOiAobWVzc2FnZSwgb3B0aW9ucykgPT4ge1xuXHRcdFx0bmF0aXZlVGFyZ2V0LnBvc3RNZXNzYWdlPy4obWVzc2FnZSwgb3B0aW9ucyk7XG5cdFx0fSxcblx0XHRhZGRFdmVudExpc3RlbmVyOiBuYXRpdmVUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcj8uYmluZChuYXRpdmVUYXJnZXQpLFxuXHRcdHJlbW92ZUV2ZW50TGlzdGVuZXI6IG5hdGl2ZVRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyPy5iaW5kKG5hdGl2ZVRhcmdldCksXG5cdFx0c3RhcnQ6IG5hdGl2ZVRhcmdldC5zdGFydD8uYmluZChuYXRpdmVUYXJnZXQpLFxuXHRcdGNsb3NlOiBuYXRpdmVUYXJnZXQuY2xvc2U/LmJpbmQobmF0aXZlVGFyZ2V0KVxuXHR9O1xufVxuZnVuY3Rpb24gaXNUcmFuc3BvcnRCaW5kaW5nKHZhbHVlKSB7XG5cdHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBcInRhcmdldFwiIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5wb3N0TWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gZ2V0RHluYW1pY1RyYW5zcG9ydFR5cGUodGFyZ2V0KSB7XG5cdGNvbnN0IGVmZmVjdGl2ZVRhcmdldCA9IGlzVHJhbnNwb3J0QmluZGluZyh0YXJnZXQpID8gdGFyZ2V0LnRhcmdldCA6IHRhcmdldDtcblx0aWYgKCFlZmZlY3RpdmVUYXJnZXQpIHJldHVybiBcImludGVybmFsXCI7XG5cdGlmIChlZmZlY3RpdmVUYXJnZXQgPT09IFwiY2hyb21lLXJ1bnRpbWVcIikgcmV0dXJuIFwiY2hyb21lLXJ1bnRpbWVcIjtcblx0aWYgKGVmZmVjdGl2ZVRhcmdldCA9PT0gXCJjaHJvbWUtdGFic1wiKSByZXR1cm4gXCJjaHJvbWUtdGFic1wiO1xuXHRpZiAoZWZmZWN0aXZlVGFyZ2V0ID09PSBcImNocm9tZS1wb3J0XCIpIHJldHVybiBcImNocm9tZS1wb3J0XCI7XG5cdGlmIChlZmZlY3RpdmVUYXJnZXQgPT09IFwiY2hyb21lLWV4dGVybmFsXCIpIHJldHVybiBcImNocm9tZS1leHRlcm5hbFwiO1xuXHRpZiAodHlwZW9mIE1lc3NhZ2VQb3J0ICE9PSBcInVuZGVmaW5lZFwiICYmIGVmZmVjdGl2ZVRhcmdldCBpbnN0YW5jZW9mIE1lc3NhZ2VQb3J0KSByZXR1cm4gXCJtZXNzYWdlLXBvcnRcIjtcblx0aWYgKHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsICE9PSBcInVuZGVmaW5lZFwiICYmIGVmZmVjdGl2ZVRhcmdldCBpbnN0YW5jZW9mIEJyb2FkY2FzdENoYW5uZWwpIHJldHVybiBcImJyb2FkY2FzdFwiO1xuXHRpZiAodHlwZW9mIFdvcmtlciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlZmZlY3RpdmVUYXJnZXQgaW5zdGFuY2VvZiBXb3JrZXIpIHJldHVybiBcIndvcmtlclwiO1xuXHRpZiAodHlwZW9mIFdlYlNvY2tldCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlZmZlY3RpdmVUYXJnZXQgaW5zdGFuY2VvZiBXZWJTb2NrZXQpIHJldHVybiBcIndlYnNvY2tldFwiO1xuXHRpZiAodHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZWZmZWN0aXZlVGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIGVmZmVjdGl2ZVRhcmdldCAmJiB0eXBlb2YgZWZmZWN0aXZlVGFyZ2V0LnBvc3RNZXNzYWdlID09PSBcImZ1bmN0aW9uXCIgJiYgZWZmZWN0aXZlVGFyZ2V0Lm9uTWVzc2FnZT8uYWRkTGlzdGVuZXIpIHJldHVybiBcImNocm9tZS1wb3J0XCI7XG5cdGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlZmZlY3RpdmVUYXJnZXQgPT09IHNlbGYpIHJldHVybiBcInNlbGZcIjtcblx0cmV0dXJuIFwiaW50ZXJuYWxcIjtcbn1cbmZ1bmN0aW9uIGxvYWRXb3JrZXIkMShXWCkge1xuXHRpZiAoV1ggaW5zdGFuY2VvZiBXb3JrZXIpIHJldHVybiBXWDtcblx0aWYgKFdYIGluc3RhbmNlb2YgVVJMKSByZXR1cm4gbmV3IFdvcmtlcihXWC5ocmVmLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdGlmICh0eXBlb2YgV1ggPT09IFwiZnVuY3Rpb25cIikgdHJ5IHtcblx0XHRyZXR1cm4gbmV3IFdYKHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIFdYKHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0fVxuXHRpZiAodHlwZW9mIFdYID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKFdYLnN0YXJ0c1dpdGgoXCIvXCIpKSByZXR1cm4gbmV3IFdvcmtlcihyZXNvbHZlV29ya2VyU3BlY2lmaWVySHJlZihXWC5yZXBsYWNlKC9eXFwvLywgXCIuL1wiKSksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0XHRpZiAoVVJMLmNhblBhcnNlKFdYKSB8fCBXWC5zdGFydHNXaXRoKFwiLi9cIikpIHJldHVybiBuZXcgV29ya2VyKHJlc29sdmVXb3JrZXJTcGVjaWZpZXJIcmVmKFdYKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRcdHJldHVybiBuZXcgV29ya2VyKFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW1dYXSwgeyB0eXBlOiBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiB9KSksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0fVxuXHRpZiAoV1ggaW5zdGFuY2VvZiBCbG9iIHx8IFdYIGluc3RhbmNlb2YgRmlsZSkgcmV0dXJuIG5ldyBXb3JrZXIoVVJMLmNyZWF0ZU9iamVjdFVSTChXWCksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0cmV0dXJuIFdYID8/ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiBudWxsKTtcbn1cbnZhciBDT05URVhUX1JFR0lTVFJZID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBERUZBVUxUX0NPTlRFWFQgPSBudWxsO1xuZnVuY3Rpb24gZ2V0RGVmYXVsdENvbnRleHQoKSB7XG5cdGlmICghREVGQVVMVF9DT05URVhUKSB7XG5cdFx0REVGQVVMVF9DT05URVhUID0gbmV3IENoYW5uZWxDb250ZXh0KHtcblx0XHRcdG5hbWU6IFwiJGRlZmF1bHQkXCIsXG5cdFx0XHR1c2VHbG9iYWxTZWxmOiB0cnVlXG5cdFx0fSk7XG5cdFx0Q09OVEVYVF9SRUdJU1RSWS5zZXQoXCIkZGVmYXVsdCRcIiwgREVGQVVMVF9DT05URVhUKTtcblx0fVxuXHRyZXR1cm4gREVGQVVMVF9DT05URVhUO1xufVxuZnVuY3Rpb24gY3JlYXRlQ2hhbm5lbENvbnRleHQob3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IGN0eCA9IG5ldyBDaGFubmVsQ29udGV4dChvcHRpb25zKTtcblx0aWYgKG9wdGlvbnMubmFtZSkgQ09OVEVYVF9SRUdJU1RSWS5zZXQob3B0aW9ucy5uYW1lLCBjdHgpO1xuXHRyZXR1cm4gY3R4O1xufVxuZnVuY3Rpb24gZ2V0T3JDcmVhdGVDb250ZXh0KG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRpZiAoQ09OVEVYVF9SRUdJU1RSWS5oYXMobmFtZSkpIHJldHVybiBDT05URVhUX1JFR0lTVFJZLmdldChuYW1lKTtcblx0cmV0dXJuIGNyZWF0ZUNoYW5uZWxDb250ZXh0KHtcblx0XHQuLi5vcHRpb25zLFxuXHRcdG5hbWVcblx0fSk7XG59XG5mdW5jdGlvbiBnZXRDb250ZXh0KG5hbWUpIHtcblx0cmV0dXJuIENPTlRFWFRfUkVHSVNUUlkuZ2V0KG5hbWUpO1xufVxuZnVuY3Rpb24gZGVsZXRlQ29udGV4dChuYW1lKSB7XG5cdGNvbnN0IGN0eCA9IENPTlRFWFRfUkVHSVNUUlkuZ2V0KG5hbWUpO1xuXHRpZiAoY3R4KSB7XG5cdFx0Y3R4LmNsb3NlKCk7XG5cdFx0cmV0dXJuIENPTlRFWFRfUkVHSVNUUlkuZGVsZXRlKG5hbWUpO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lcygpIHtcblx0cmV0dXJuIFsuLi5DT05URVhUX1JFR0lTVFJZLmtleXMoKV07XG59XG5mdW5jdGlvbiBjcmVhdGVDaGFubmVsc0luQ29udGV4dChjaGFubmVsTmFtZXMsIGNvbnRleHRPcHRpb25zID0ge30pIHtcblx0Y29uc3QgY29udGV4dCA9IGNyZWF0ZUNoYW5uZWxDb250ZXh0KGNvbnRleHRPcHRpb25zKTtcblx0cmV0dXJuIHtcblx0XHRjb250ZXh0LFxuXHRcdGNoYW5uZWxzOiBjb250ZXh0LmNyZWF0ZUNoYW5uZWxzKGNoYW5uZWxOYW1lcylcblx0fTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydE1vZHVsZUluQ29udGV4dChjaGFubmVsTmFtZSwgdXJsLCBvcHRpb25zID0ge30pIHtcblx0Y29uc3QgY29udGV4dCA9IGNyZWF0ZUNoYW5uZWxDb250ZXh0KG9wdGlvbnMuY29udGV4dE9wdGlvbnMpO1xuXHRyZXR1cm4ge1xuXHRcdGNvbnRleHQsXG5cdFx0bW9kdWxlOiBhd2FpdCBjb250ZXh0LmltcG9ydE1vZHVsZUluQ2hhbm5lbChjaGFubmVsTmFtZSwgdXJsLCB7XG5cdFx0XHRjaGFubmVsT3B0aW9uczogb3B0aW9ucy5jaGFubmVsT3B0aW9ucyxcblx0XHRcdGltcG9ydE9wdGlvbnM6IG9wdGlvbnMuaW1wb3J0T3B0aW9uc1xuXHRcdH0pXG5cdH07XG59XG5hc3luYyBmdW5jdGlvbiBhZGRXb3JrZXJDaGFubmVsKG5hbWUsIHdvcmtlciwgb3B0aW9ucyA9IHt9KSB7XG5cdHJldHVybiBnZXREZWZhdWx0Q29udGV4dCgpLmFkZFdvcmtlcihuYW1lLCB3b3JrZXIsIG9wdGlvbnMpO1xufVxuYXN5bmMgZnVuY3Rpb24gYWRkUG9ydENoYW5uZWwobmFtZSwgcG9ydCwgb3B0aW9ucyA9IHt9KSB7XG5cdHJldHVybiBnZXREZWZhdWx0Q29udGV4dCgpLmFkZFBvcnQobmFtZSwgcG9ydCwgb3B0aW9ucyk7XG59XG5hc3luYyBmdW5jdGlvbiBhZGRCcm9hZGNhc3RDaGFubmVsKG5hbWUsIGJyb2FkY2FzdE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRyZXR1cm4gZ2V0RGVmYXVsdENvbnRleHQoKS5hZGRCcm9hZGNhc3QobmFtZSwgYnJvYWRjYXN0TmFtZSwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBhZGRTZWxmQ2hhbm5lbFRvRGVmYXVsdChuYW1lLCBvcHRpb25zID0ge30pIHtcblx0cmV0dXJuIGdldERlZmF1bHRDb250ZXh0KCkuYWRkU2VsZkNoYW5uZWwobmFtZSwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBkZWZlckNoYW5uZWwobmFtZSwgaW5pdEZuKSB7XG5cdGdldERlZmF1bHRDb250ZXh0KCkuZGVmZXIobmFtZSwgaW5pdEZuKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGluaXREZWZlcnJlZENoYW5uZWwobmFtZSkge1xuXHRyZXR1cm4gZ2V0RGVmYXVsdENvbnRleHQoKS5pbml0RGVmZXJyZWQobmFtZSk7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRDaGFubmVsRnJvbURlZmF1bHQobmFtZSkge1xuXHRyZXR1cm4gZ2V0RGVmYXVsdENvbnRleHQoKS5nZXRDaGFubmVsQXN5bmMobmFtZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0Q2hhbm5lbFBhaXIobmFtZTEsIG5hbWUyLCBvcHRpb25zID0ge30pIHtcblx0cmV0dXJuIGdldERlZmF1bHRDb250ZXh0KCkuY3JlYXRlQ2hhbm5lbFBhaXIobmFtZTEsIG5hbWUyLCBvcHRpb25zKTtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdHJhbnNwb3J0L1RyYW5zcG9ydE9ic2VydmFibGUudHNcbnZhciBUcmFuc3BvcnRPYnNlcnZhYmxlID0gY2xhc3Mge1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9saXN0ZW5pbmcgPSBmYWxzZTtcblx0X2NsZWFudXAgPSBudWxsO1xuXHRzdWJzY3JpYmUob2JzZXJ2ZXJPck5leHQpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXJPck5leHQgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXJPck5leHQgfSA6IG9ic2VydmVyT3JOZXh0O1xuXHRcdGNvbnN0IGZpcnN0ID0gdGhpcy5fc3Vicy5zaXplID09PSAwO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0aWYgKGZpcnN0ICYmICF0aGlzLl9saXN0ZW5pbmcpIHRoaXMuX2FjdGl2YXRlKCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0XHRpZiAodGhpcy5fc3Vicy5zaXplID09PSAwICYmIHRoaXMuX2xpc3RlbmluZykgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0X2RlYWN0aXZhdGUoKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fY2xlYW51cCA9IG51bGw7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gZmFsc2U7XG5cdH1cblx0X2Rpc3BhdGNoKHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRzLm5leHQ/Lih2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdH1cblx0fVxuXHRfZXJyb3IoZXJyKSB7XG5cdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIpO1xuXHR9XG5cdF9jb21wbGV0ZSgpIHtcblx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5jb21wbGV0ZT8uKCk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdHRoaXMuX2RlYWN0aXZhdGUoKTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9jb21wbGV0ZSgpO1xuXHR9XG5cdGdldCBzdWJzY3JpYmVyQ291bnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N1YnMuc2l6ZTtcblx0fVxuXHRnZXQgaXNMaXN0ZW5pbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xpc3RlbmluZztcblx0fVxufTtcbnZhciBXb3JrZXJPYnNlcnZhYmxlID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRPYnNlcnZhYmxlIHtcblx0X3dvcmtlcjtcblx0X3NlbmQ7XG5cdGNvbnN0cnVjdG9yKF93b3JrZXIpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX3dvcmtlciA9IF93b3JrZXI7XG5cdFx0dGhpcy5fc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0aGlzLl93b3JrZXIpO1xuXHR9XG5cdG5leHQodmFsdWUsIHRyYW5zZmVyKSB7XG5cdFx0dGhpcy5fc2VuZCh2YWx1ZSwgdHJhbnNmZXIpO1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuaW5nKSByZXR1cm47XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRoaXMuX3dvcmtlciwgKGQpID0+IHRoaXMuX2Rpc3BhdGNoKGQpLCAoZSkgPT4gdGhpcy5fZXJyb3IoZSkpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cblx0dGVybWluYXRlKCkge1xuXHRcdHRoaXMuX3dvcmtlci50ZXJtaW5hdGUoKTtcblx0XHR0aGlzLl9jb21wbGV0ZSgpO1xuXHR9XG5cdGdldCB3b3JrZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3dvcmtlcjtcblx0fVxufTtcbnZhciBNZXNzYWdlUG9ydE9ic2VydmFibGUgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydE9ic2VydmFibGUge1xuXHRfcG9ydDtcblx0X3NlbmQ7XG5cdGNvbnN0cnVjdG9yKF9wb3J0KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl9wb3J0ID0gX3BvcnQ7XG5cdFx0dGhpcy5fc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0aGlzLl9wb3J0KTtcblx0fVxuXHRuZXh0KHZhbHVlLCB0cmFuc2Zlcikge1xuXHRcdHRoaXMuX3NlbmQodmFsdWUsIHRyYW5zZmVyKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0aGlzLl9wb3J0LCAoZCkgPT4gdGhpcy5fZGlzcGF0Y2goZCkpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cblx0Z2V0IHBvcnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnQ7XG5cdH1cbn07XG52YXIgQnJvYWRjYXN0Q2hhbm5lbE9ic2VydmFibGUgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydE9ic2VydmFibGUge1xuXHRfbmFtZTtcblx0X2NoYW5uZWw7XG5cdF9zZW5kO1xuXHRjb25zdHJ1Y3RvcihfbmFtZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fbmFtZSA9IF9uYW1lO1xuXHRcdHRoaXMuX2NoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbChfbmFtZSk7XG5cdFx0dGhpcy5fc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0aGlzLl9jaGFubmVsKTtcblx0fVxuXHRuZXh0KHZhbHVlKSB7XG5cdFx0dGhpcy5fc2VuZCh2YWx1ZSk7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fY2hhbm5lbCwgKGQpID0+IHtcblx0XHRcdGlmIChkPy5zZW5kZXIgIT09IHRoaXMuX25hbWUpIHRoaXMuX2Rpc3BhdGNoKGQpO1xuXHRcdH0pO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fY2hhbm5lbC5jbG9zZSgpO1xuXHRcdHN1cGVyLmNsb3NlKCk7XG5cdH1cbn07XG52YXIgV2ViU29ja2V0T2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF91cmw7XG5cdF9wcm90b2NvbHM7XG5cdF93cyA9IG51bGw7XG5cdF9wZW5kaW5nID0gW107XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRjb25zdHJ1Y3RvcihfdXJsLCBfcHJvdG9jb2xzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl91cmwgPSBfdXJsO1xuXHRcdHRoaXMuX3Byb3RvY29scyA9IF9wcm90b2NvbHM7XG5cdH1cblx0Y29ubmVjdCgpIHtcblx0XHRpZiAodGhpcy5fd3MpIHJldHVybjtcblx0XHRjb25zdCB1cmwgPSB0eXBlb2YgdGhpcy5fdXJsID09PSBcInN0cmluZ1wiID8gdGhpcy5fdXJsIDogdGhpcy5fdXJsLmhyZWY7XG5cdFx0dGhpcy5fd3MgPSBuZXcgV2ViU29ja2V0KHVybCwgdGhpcy5fcHJvdG9jb2xzKTtcblx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiY29ubmVjdGluZ1wiKTtcblx0XHR0aGlzLl93cy5hZGRFdmVudExpc3RlbmVyKFwib3BlblwiLCAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwib3BlblwiKTtcblx0XHRcdHRoaXMuX3BlbmRpbmcuZm9yRWFjaCgobSkgPT4gdGhpcy5uZXh0KG0pKTtcblx0XHRcdHRoaXMuX3BlbmRpbmcgPSBbXTtcblx0XHR9KTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fd3MsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSwgKGUpID0+IHRoaXMuX2Vycm9yKGUpLCAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiY2xvc2VkXCIpO1xuXHRcdFx0dGhpcy5fY29tcGxldGUoKTtcblx0XHR9KTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG5cdG5leHQodmFsdWUpIHtcblx0XHRpZiAoIXRoaXMuX3dzIHx8IHRoaXMuX3dzLnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5PUEVOKSB7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLnB1c2godmFsdWUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZTogXywgLi4uZGF0YSB9ID0gdmFsdWU7XG5cdFx0dGhpcy5fd3Muc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICghdGhpcy5fd3MpIHRoaXMuY29ubmVjdCgpO1xuXHR9XG5cdGNsb3NlKGNvZGUsIHJlYXNvbikge1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjbG9zaW5nXCIpO1xuXHRcdHRoaXMuX3dzPy5jbG9zZShjb2RlLCByZWFzb24pO1xuXHRcdHRoaXMuX3dzID0gbnVsbDtcblx0XHRzdXBlci5jbG9zZSgpO1xuXHR9XG5cdGdldCBzdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGU7XG5cdH1cblx0Z2V0IGlzT3BlbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fd3M/LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOO1xuXHR9XG59O1xudmFyIENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlJDEgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydE9ic2VydmFibGUge1xuXHRfc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcihcImNocm9tZS1ydW50aW1lXCIpO1xuXHRuZXh0KHZhbHVlKSB7XG5cdFx0dGhpcy5fc2VuZCh2YWx1ZSk7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJjaHJvbWUtcnVudGltZVwiLCAoZCkgPT4gdGhpcy5fZGlzcGF0Y2goZCkpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cbn07XG52YXIgQ2hyb21lVGFic09ic2VydmFibGUkMSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF90YWJJZDtcblx0Y29uc3RydWN0b3IoX3RhYklkKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl90YWJJZCA9IF90YWJJZDtcblx0fVxuXHRzZXRUYWJJZChpZCkge1xuXHRcdHRoaXMuX3RhYklkID0gaWQ7XG5cdH1cblx0bmV4dCh2YWx1ZSkge1xuXHRcdGlmICh0aGlzLl90YWJJZCA9PSBudWxsIHx8IHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS50YWJzKSByZXR1cm47XG5cdFx0Y29uc3QgeyB0cmFuc2ZlcmFibGU6IF8sIC4uLmRhdGEgfSA9IHZhbHVlO1xuXHRcdGNocm9tZS50YWJzLnNlbmRNZXNzYWdlKHRoaXMuX3RhYklkLCBkYXRhKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcihcImNocm9tZS10YWJzXCIsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSwgdm9pZCAwLCB2b2lkIDAsIHsgdGFiSWQ6IHRoaXMuX3RhYklkIH0pO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cbn07XG52YXIgQ2hyb21lUG9ydE9ic2VydmFibGUkMSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF9wb3J0TmFtZTtcblx0X3RhYklkO1xuXHRfc2VuZDtcblx0Y29uc3RydWN0b3IoX3BvcnROYW1lLCBfdGFiSWQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX3BvcnROYW1lID0gX3BvcnROYW1lO1xuXHRcdHRoaXMuX3RhYklkID0gX3RhYklkO1xuXHRcdHRoaXMuX3NlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIoXCJjaHJvbWUtcG9ydFwiLCB7XG5cdFx0XHRwb3J0TmFtZTogX3BvcnROYW1lLFxuXHRcdFx0dGFiSWQ6IF90YWJJZFxuXHRcdH0pO1xuXHR9XG5cdG5leHQodmFsdWUpIHtcblx0XHR0aGlzLl9zZW5kKHZhbHVlKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcihcImNocm9tZS1wb3J0XCIsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSwgdm9pZCAwLCB2b2lkIDAsIHtcblx0XHRcdHBvcnROYW1lOiB0aGlzLl9wb3J0TmFtZSxcblx0XHRcdHRhYklkOiB0aGlzLl90YWJJZFxuXHRcdH0pO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cbn07XG52YXIgU2VydmljZVdvcmtlckNsaWVudE9ic2VydmFibGUgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydE9ic2VydmFibGUge1xuXHRfc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcihcInNlcnZpY2Utd29ya2VyLWNsaWVudFwiKTtcblx0bmV4dCh2YWx1ZSwgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kKHZhbHVlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJzZXJ2aWNlLXdvcmtlci1jbGllbnRcIiwgKGQpID0+IHRoaXMuX2Rpc3BhdGNoKGQpKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG59O1xudmFyIFNlcnZpY2VXb3JrZXJIb3N0T2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKFwic2VydmljZS13b3JrZXItaG9zdFwiKTtcblx0bmV4dCh2YWx1ZSwgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kKHZhbHVlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJzZXJ2aWNlLXdvcmtlci1ob3N0XCIsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxufTtcbnZhciBTZWxmT2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKFwic2VsZlwiKTtcblx0bmV4dCh2YWx1ZSwgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kKHZhbHVlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJzZWxmXCIsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxufTtcbnZhciBUcmFuc3BvcnRPYnNlcnZhYmxlRmFjdG9yeSA9IHtcblx0d29ya2VyOiAodykgPT4gbmV3IFdvcmtlck9ic2VydmFibGUodyksXG5cdHdvcmtlckZyb21Vcmw6ICh1cmwsIG9wdHMpID0+IG5ldyBXb3JrZXJPYnNlcnZhYmxlKG5ldyBXb3JrZXIodHlwZW9mIHVybCA9PT0gXCJzdHJpbmdcIiA/IHVybCA6IHVybC5ocmVmLCB7XG5cdFx0dHlwZTogXCJtb2R1bGVcIixcblx0XHQuLi5vcHRzXG5cdH0pKSxcblx0bWVzc2FnZVBvcnQ6IChwKSA9PiBuZXcgTWVzc2FnZVBvcnRPYnNlcnZhYmxlKHApLFxuXHRtZXNzYWdlQ2hhbm5lbDogKCkgPT4ge1xuXHRcdGNvbnN0IGNoID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBvcnQxOiBuZXcgTWVzc2FnZVBvcnRPYnNlcnZhYmxlKGNoLnBvcnQxKSxcblx0XHRcdHBvcnQyOiBuZXcgTWVzc2FnZVBvcnRPYnNlcnZhYmxlKGNoLnBvcnQyKVxuXHRcdH07XG5cdH0sXG5cdGJyb2FkY2FzdDogKG5hbWUpID0+IG5ldyBCcm9hZGNhc3RDaGFubmVsT2JzZXJ2YWJsZShuYW1lKSxcblx0d2Vic29ja2V0OiAodXJsLCBwcm90b2NvbHMpID0+IG5ldyBXZWJTb2NrZXRPYnNlcnZhYmxlKHVybCwgcHJvdG9jb2xzKSxcblx0Y2hyb21lUnVudGltZTogKCkgPT4gbmV3IENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlJDEoKSxcblx0Y2hyb21lVGFiczogKHRhYklkKSA9PiBuZXcgQ2hyb21lVGFic09ic2VydmFibGUkMSh0YWJJZCksXG5cdGNocm9tZVBvcnQ6IChwb3J0TmFtZSwgdGFiSWQpID0+IG5ldyBDaHJvbWVQb3J0T2JzZXJ2YWJsZSQxKHBvcnROYW1lLCB0YWJJZCksXG5cdHNlcnZpY2VXb3JrZXJDbGllbnQ6ICgpID0+IG5ldyBTZXJ2aWNlV29ya2VyQ2xpZW50T2JzZXJ2YWJsZSgpLFxuXHRzZXJ2aWNlV29ya2VySG9zdDogKCkgPT4gbmV3IFNlcnZpY2VXb3JrZXJIb3N0T2JzZXJ2YWJsZSgpLFxuXHRzZWxmOiAoKSA9PiBuZXcgU2VsZk9ic2VydmFibGUoKVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUJpZGlyZWN0aW9uYWxDaGFubmVsJDEob3V0Ym91bmQsIGluYm91bmQpIHtcblx0cmV0dXJuIHtcblx0XHRzZW5kOiAodiwgdCkgPT4gb3V0Ym91bmQubmV4dCh2LCB0KSxcblx0XHRzdWJzY3JpYmU6IChoKSA9PiBpbmJvdW5kLnN1YnNjcmliZSh7IG5leHQ6IGggfSksXG5cdFx0Y2xvc2U6ICgpID0+IHtcblx0XHRcdG91dGJvdW5kLmNsb3NlKCk7XG5cdFx0XHRpbmJvdW5kLmNsb3NlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvV29ya2VyLnRzXG52YXIgV29ya2VyQ29udGV4dCA9IGNsYXNzIHtcblx0X2NvbnRleHQ7XG5cdF9jb25maWc7XG5cdF9zdWJzY3JpcHRpb25zID0gW107XG5cdF9pbmNvbWluZ0Nvbm5lY3Rpb25zID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogMTAwIH0pO1xuXHRfY2hhbm5lbENyZWF0ZWQgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdF9jaGFubmVsQ2xvc2VkID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5fY29uZmlnID0ge1xuXHRcdFx0bmFtZTogY29uZmlnLm5hbWUgPz8gXCJ3b3JrZXJcIixcblx0XHRcdHdvcmtlck5hbWU6IGNvbmZpZy53b3JrZXJOYW1lID8/IGB3b3JrZXItJHtVVUlEdjQoKS5zbGljZSgwLCA4KX1gLFxuXHRcdFx0YXV0b0FjY2VwdENoYW5uZWxzOiBjb25maWcuYXV0b0FjY2VwdENoYW5uZWxzID8/IHRydWUsXG5cdFx0XHRhbGxvd2VkQ2hhbm5lbHM6IGNvbmZpZy5hbGxvd2VkQ2hhbm5lbHMgPz8gW10sXG5cdFx0XHRtYXhDaGFubmVsczogY29uZmlnLm1heENoYW5uZWxzID8/IDEwMCxcblx0XHRcdGF1dG9Db25uZWN0OiBjb25maWcuYXV0b0Nvbm5lY3QgPz8gdHJ1ZSxcblx0XHRcdHVzZUdsb2JhbFNlbGY6IHRydWUsXG5cdFx0XHRkZWZhdWx0T3B0aW9uczogY29uZmlnLmRlZmF1bHRPcHRpb25zID8/IHt9LFxuXHRcdFx0aXNvbGF0ZWRTdG9yYWdlOiBjb25maWcuaXNvbGF0ZWRTdG9yYWdlID8/IGZhbHNlLFxuXHRcdFx0Li4uY29uZmlnXG5cdFx0fTtcblx0XHR0aGlzLl9jb250ZXh0ID0gY3JlYXRlQ2hhbm5lbENvbnRleHQoe1xuXHRcdFx0bmFtZTogdGhpcy5fY29uZmlnLm5hbWUsXG5cdFx0XHR1c2VHbG9iYWxTZWxmOiB0cnVlLFxuXHRcdFx0ZGVmYXVsdE9wdGlvbnM6IGNvbmZpZy5kZWZhdWx0T3B0aW9uc1xuXHRcdH0pO1xuXHRcdHRoaXMuX3NldHVwTWVzc2FnZUxpc3RlbmVyKCk7XG5cdH1cblx0Z2V0IG9uQ29ubmVjdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5jb21pbmdDb25uZWN0aW9ucztcblx0fVxuXHRnZXQgb25DaGFubmVsQ3JlYXRlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbENyZWF0ZWQ7XG5cdH1cblx0Z2V0IG9uQ2hhbm5lbENsb3NlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbENsb3NlZDtcblx0fVxuXHRzdWJzY3JpYmVDb25uZWN0aW9ucyhoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luY29taW5nQ29ubmVjdGlvbnMuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdHN1YnNjcmliZUNoYW5uZWxDcmVhdGVkKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbENyZWF0ZWQuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdGFjY2VwdENvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuXHRcdGlmICghdGhpcy5fY2FuQWNjZXB0Q2hhbm5lbChjb25uZWN0aW9uLmNoYW5uZWwpKSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCBlbmRwb2ludCA9IHRoaXMuX2NvbnRleHQuY3JlYXRlQ2hhbm5lbChjb25uZWN0aW9uLmNoYW5uZWwsIGNvbm5lY3Rpb24ub3B0aW9ucyk7XG5cdFx0aWYgKGNvbm5lY3Rpb24ucG9ydCkge1xuXHRcdFx0Y29ubmVjdGlvbi5wb3J0LnN0YXJ0Py4oKTtcblx0XHRcdGVuZHBvaW50LmhhbmRsZXIuY3JlYXRlUmVtb3RlQ2hhbm5lbChjb25uZWN0aW9uLnNlbmRlciwgY29ubmVjdGlvbi5vcHRpb25zLCBjb25uZWN0aW9uLnBvcnQpO1xuXHRcdH1cblx0XHR0aGlzLl9jaGFubmVsQ3JlYXRlZC5uZXh0KHtcblx0XHRcdGNoYW5uZWw6IGNvbm5lY3Rpb24uY2hhbm5lbCxcblx0XHRcdGVuZHBvaW50LFxuXHRcdFx0c2VuZGVyOiBjb25uZWN0aW9uLnNlbmRlcixcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHRcdHRoaXMuX3Bvc3RDaGFubmVsQ3JlYXRlZChjb25uZWN0aW9uLmNoYW5uZWwsIGNvbm5lY3Rpb24uc2VuZGVyLCBjb25uZWN0aW9uLmlkKTtcblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblx0Y3JlYXRlQ2hhbm5lbChuYW1lLCBvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHQuY3JlYXRlQ2hhbm5lbChuYW1lLCBvcHRpb25zKTtcblx0fVxuXHRnZXRDaGFubmVsKG5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dC5nZXRDaGFubmVsKG5hbWUpO1xuXHR9XG5cdGhhc0NoYW5uZWwobmFtZSkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0Lmhhc0NoYW5uZWwobmFtZSk7XG5cdH1cblx0Z2V0Q2hhbm5lbE5hbWVzKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0LmdldENoYW5uZWxOYW1lcygpO1xuXHR9XG5cdHF1ZXJ5Q29ubmVjdGlvbnMocXVlcnkgPSB7fSkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0LnF1ZXJ5Q29ubmVjdGlvbnMocXVlcnkpO1xuXHR9XG5cdG5vdGlmeUNvbm5lY3Rpb25zKHBheWxvYWQgPSB7fSwgcXVlcnkgPSB7fSkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0Lm5vdGlmeUNvbm5lY3Rpb25zKHBheWxvYWQsIHF1ZXJ5KTtcblx0fVxuXHRjbG9zZUNoYW5uZWwobmFtZSkge1xuXHRcdGNvbnN0IGNsb3NlZCA9IHRoaXMuX2NvbnRleHQuY2xvc2VDaGFubmVsKG5hbWUpO1xuXHRcdGlmIChjbG9zZWQpIHRoaXMuX2NoYW5uZWxDbG9zZWQubmV4dCh7XG5cdFx0XHRjaGFubmVsOiBuYW1lLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0cmV0dXJuIGNsb3NlZDtcblx0fVxuXHRnZXQgY29udGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dDtcblx0fVxuXHRnZXQgY29uZmlnKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb25maWc7XG5cdH1cblx0X3NldHVwTWVzc2FnZUxpc3RlbmVyKCkge1xuXHRcdGFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsICgoZXZlbnQpID0+IHtcblx0XHRcdHRoaXMuX2hhbmRsZUluY29taW5nTWVzc2FnZShldmVudCk7XG5cdFx0fSkpO1xuXHR9XG5cdF9oYW5kbGVJbmNvbWluZ01lc3NhZ2UoZXZlbnQpIHtcblx0XHRjb25zdCBkYXRhID0gZXZlbnQuZGF0YTtcblx0XHRpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpIHJldHVybjtcblx0XHRzd2l0Y2ggKGRhdGEudHlwZSkge1xuXHRcdFx0Y2FzZSBcImNyZWF0ZUNoYW5uZWxcIjpcblx0XHRcdFx0dGhpcy5faGFuZGxlQ3JlYXRlQ2hhbm5lbChkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29ubmVjdENoYW5uZWxcIjpcblx0XHRcdFx0dGhpcy5faGFuZGxlQ29ubmVjdENoYW5uZWwoZGF0YSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImFkZFBvcnRcIjpcblx0XHRcdFx0dGhpcy5faGFuZGxlQWRkUG9ydChkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwibGlzdENoYW5uZWxzXCI6XG5cdFx0XHRcdHRoaXMuX2hhbmRsZUxpc3RDaGFubmVscyhkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2xvc2VDaGFubmVsXCI6XG5cdFx0XHRcdHRoaXMuX2hhbmRsZUNsb3NlQ2hhbm5lbChkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwicGluZ1wiOlxuXHRcdFx0XHRwb3N0TWVzc2FnZSh7XG5cdFx0XHRcdFx0dHlwZTogXCJwb25nXCIsXG5cdFx0XHRcdFx0aWQ6IGRhdGEuaWQsXG5cdFx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6IGlmIChkYXRhLmNoYW5uZWwgJiYgdGhpcy5fY29udGV4dC5oYXNDaGFubmVsKGRhdGEuY2hhbm5lbCkpICh0aGlzLl9jb250ZXh0LmdldENoYW5uZWwoZGF0YS5jaGFubmVsKT8uaGFuZGxlcik/LmhhbmRsZUFuZFJlc3BvbnNlPy4oZGF0YS5wYXlsb2FkLCBkYXRhLnJlcUlkKTtcblx0XHR9XG5cdH1cblx0X2hhbmRsZUNyZWF0ZUNoYW5uZWwoZGF0YSkge1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB7XG5cdFx0XHRpZDogZGF0YS5yZXFJZCA/PyBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IGRhdGEuY2hhbm5lbCxcblx0XHRcdHNlbmRlcjogZGF0YS5zZW5kZXIgPz8gXCJ1bmtub3duXCIsXG5cdFx0XHR0eXBlOiBcImNoYW5uZWxcIixcblx0XHRcdHBvcnQ6IGRhdGEubWVzc2FnZVBvcnQsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KCksXG5cdFx0XHRvcHRpb25zOiBkYXRhLm9wdGlvbnNcblx0XHR9O1xuXHRcdHRoaXMuX2luY29taW5nQ29ubmVjdGlvbnMubmV4dChjb25uZWN0aW9uKTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmF1dG9BY2NlcHRDaGFubmVscykgdGhpcy5hY2NlcHRDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuXHR9XG5cdF9oYW5kbGVDb25uZWN0Q2hhbm5lbChkYXRhKSB7XG5cdFx0Y29uc3QgY29ubmVjdGlvbiA9IHtcblx0XHRcdGlkOiBkYXRhLnJlcUlkID8/IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogZGF0YS5jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBkYXRhLnNlbmRlciA/PyBcInVua25vd25cIixcblx0XHRcdHR5cGU6IGRhdGEucG9ydFR5cGUgPz8gXCJjaGFubmVsXCIsXG5cdFx0XHRwb3J0OiBkYXRhLnBvcnQsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KCksXG5cdFx0XHRvcHRpb25zOiBkYXRhLm9wdGlvbnNcblx0XHR9O1xuXHRcdHRoaXMuX2luY29taW5nQ29ubmVjdGlvbnMubmV4dChjb25uZWN0aW9uKTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmF1dG9BY2NlcHRDaGFubmVscyAmJiB0aGlzLl9jYW5BY2NlcHRDaGFubmVsKGRhdGEuY2hhbm5lbCkpIHtcblx0XHRcdGNvbnN0IGVuZHBvaW50ID0gdGhpcy5fY29udGV4dC5nZXRPckNyZWF0ZUNoYW5uZWwoZGF0YS5jaGFubmVsLCBkYXRhLm9wdGlvbnMpO1xuXHRcdFx0aWYgKGRhdGEucG9ydCkge1xuXHRcdFx0XHRkYXRhLnBvcnQuc3RhcnQ/LigpO1xuXHRcdFx0XHRlbmRwb2ludC5oYW5kbGVyLmNyZWF0ZVJlbW90ZUNoYW5uZWwoZGF0YS5zZW5kZXIsIGRhdGEub3B0aW9ucywgZGF0YS5wb3J0KTtcblx0XHRcdH1cblx0XHRcdHBvc3RNZXNzYWdlKHtcblx0XHRcdFx0dHlwZTogXCJjaGFubmVsQ29ubmVjdGVkXCIsXG5cdFx0XHRcdGNoYW5uZWw6IGRhdGEuY2hhbm5lbCxcblx0XHRcdFx0cmVxSWQ6IGRhdGEucmVxSWRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRfaGFuZGxlQWRkUG9ydChkYXRhKSB7XG5cdFx0aWYgKCFkYXRhLnBvcnQgfHwgIWRhdGEuY2hhbm5lbCkgcmV0dXJuO1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB7XG5cdFx0XHRpZDogZGF0YS5yZXFJZCA/PyBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IGRhdGEuY2hhbm5lbCxcblx0XHRcdHNlbmRlcjogZGF0YS5zZW5kZXIgPz8gXCJ1bmtub3duXCIsXG5cdFx0XHR0eXBlOiBcInBvcnRcIixcblx0XHRcdHBvcnQ6IGRhdGEucG9ydCxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcblx0XHRcdG9wdGlvbnM6IGRhdGEub3B0aW9uc1xuXHRcdH07XG5cdFx0dGhpcy5faW5jb21pbmdDb25uZWN0aW9ucy5uZXh0KGNvbm5lY3Rpb24pO1xuXHRcdGlmICh0aGlzLl9jb25maWcuYXV0b0FjY2VwdENoYW5uZWxzKSB0aGlzLmFjY2VwdENvbm5lY3Rpb24oY29ubmVjdGlvbik7XG5cdH1cblx0X2hhbmRsZUxpc3RDaGFubmVscyhkYXRhKSB7XG5cdFx0cG9zdE1lc3NhZ2Uoe1xuXHRcdFx0dHlwZTogXCJjaGFubmVsTGlzdFwiLFxuXHRcdFx0Y2hhbm5lbHM6IHRoaXMuZ2V0Q2hhbm5lbE5hbWVzKCksXG5cdFx0XHRyZXFJZDogZGF0YS5yZXFJZFxuXHRcdH0pO1xuXHR9XG5cdF9oYW5kbGVDbG9zZUNoYW5uZWwoZGF0YSkge1xuXHRcdGlmIChkYXRhLmNoYW5uZWwpIHtcblx0XHRcdHRoaXMuY2xvc2VDaGFubmVsKGRhdGEuY2hhbm5lbCk7XG5cdFx0XHRwb3N0TWVzc2FnZSh7XG5cdFx0XHRcdHR5cGU6IFwiY2hhbm5lbENsb3NlZFwiLFxuXHRcdFx0XHRjaGFubmVsOiBkYXRhLmNoYW5uZWwsXG5cdFx0XHRcdHJlcUlkOiBkYXRhLnJlcUlkXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0X2NhbkFjY2VwdENoYW5uZWwoY2hhbm5lbCkge1xuXHRcdGlmICh0aGlzLl9jb250ZXh0LnNpemUgPj0gdGhpcy5fY29uZmlnLm1heENoYW5uZWxzKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKHRoaXMuX2NvbmZpZy5hbGxvd2VkQ2hhbm5lbHMubGVuZ3RoID4gMCkgcmV0dXJuIHRoaXMuX2NvbmZpZy5hbGxvd2VkQ2hhbm5lbHMuaW5jbHVkZXMoY2hhbm5lbCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0X3Bvc3RDaGFubmVsQ3JlYXRlZChjaGFubmVsLCBzZW5kZXIsIHJlcUlkKSB7XG5cdFx0cG9zdE1lc3NhZ2Uoe1xuXHRcdFx0dHlwZTogXCJjaGFubmVsQ3JlYXRlZFwiLFxuXHRcdFx0Y2hhbm5lbCxcblx0XHRcdHNlbmRlcixcblx0XHRcdHJlcUlkLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMgPSBbXTtcblx0XHR0aGlzLl9pbmNvbWluZ0Nvbm5lY3Rpb25zLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5fY2hhbm5lbENyZWF0ZWQuY29tcGxldGUoKTtcblx0XHR0aGlzLl9jaGFubmVsQ2xvc2VkLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5fY29udGV4dC5jbG9zZSgpO1xuXHR9XG59O1xudmFyIFdPUktFUl9DT05URVhUID0gbnVsbDtcbmZ1bmN0aW9uIGdldFdvcmtlckNvbnRleHQoY29uZmlnKSB7XG5cdGlmICghV09SS0VSX0NPTlRFWFQpIFdPUktFUl9DT05URVhUID0gbmV3IFdvcmtlckNvbnRleHQoY29uZmlnKTtcblx0cmV0dXJuIFdPUktFUl9DT05URVhUO1xufVxuZnVuY3Rpb24gaW5pdFdvcmtlckNvbnRleHQoY29uZmlnKSB7XG5cdFdPUktFUl9DT05URVhUPy5jbG9zZSgpO1xuXHRXT1JLRVJfQ09OVEVYVCA9IG5ldyBXb3JrZXJDb250ZXh0KGNvbmZpZyk7XG5cdHJldHVybiBXT1JLRVJfQ09OVEVYVDtcbn1cbmZ1bmN0aW9uIG9uV29ya2VyQ29ubmVjdGlvbihoYW5kbGVyKSB7XG5cdHJldHVybiBnZXRXb3JrZXJDb250ZXh0KCkuc3Vic2NyaWJlQ29ubmVjdGlvbnMoaGFuZGxlcik7XG59XG5mdW5jdGlvbiBvbldvcmtlckNoYW5uZWxDcmVhdGVkKGhhbmRsZXIpIHtcblx0cmV0dXJuIGdldFdvcmtlckNvbnRleHQoKS5zdWJzY3JpYmVDaGFubmVsQ3JlYXRlZChoYW5kbGVyKTtcbn1cbnZhciBXT1JLRVJfUkVTUE9OREVSID0gbnVsbDtcbnZhciBXT1JLRVJfSU5WT0tFUiA9IG51bGw7XG5mdW5jdGlvbiBnZXRXb3JrZXJSZXNwb25kZXIoY2hhbm5lbCkge1xuXHRpZiAoIVdPUktFUl9SRVNQT05ERVIpIHtcblx0XHRXT1JLRVJfUkVTUE9OREVSID0gY3JlYXRlUmVzcG9uZGVyKGNoYW5uZWwgPz8gXCJ3b3JrZXJcIik7XG5cdFx0V09SS0VSX1JFU1BPTkRFUi5saXN0ZW4oc2VsZik7XG5cdH1cblx0cmV0dXJuIFdPUktFUl9SRVNQT05ERVI7XG59XG5mdW5jdGlvbiBnZXRXb3JrZXJJbnZva2VyKGNoYW5uZWwpIHtcblx0aWYgKCFXT1JLRVJfSU5WT0tFUikge1xuXHRcdFdPUktFUl9JTlZPS0VSID0gY3JlYXRlSW52b2tlcihjaGFubmVsID8/IFwid29ya2VyXCIpO1xuXHRcdFdPUktFUl9JTlZPS0VSLmNvbm5lY3Qoc2VsZik7XG5cdH1cblx0cmV0dXJuIFdPUktFUl9JTlZPS0VSO1xufVxuZnVuY3Rpb24gZXhwb3NlRnJvbVdvcmtlcihuYW1lLCBvYmopIHtcblx0Z2V0V29ya2VyUmVzcG9uZGVyKCkuZXhwb3NlKG5hbWUsIG9iaik7XG59XG5mdW5jdGlvbiBvbldvcmtlckludm9jYXRpb24oaGFuZGxlcikge1xuXHRyZXR1cm4gZ2V0V29ya2VyUmVzcG9uZGVyKCkuc3Vic2NyaWJlSW52b2NhdGlvbnMoaGFuZGxlcik7XG59XG5mdW5jdGlvbiBjcmVhdGVIb3N0UHJveHkoaG9zdENoYW5uZWwgPSBcImhvc3RcIiwgYmFzZVBhdGggPSBbXSkge1xuXHRyZXR1cm4gZ2V0V29ya2VySW52b2tlcigpLmNyZWF0ZVByb3h5KGhvc3RDaGFubmVsLCBiYXNlUGF0aCk7XG59XG5mdW5jdGlvbiBpbXBvcnRJbkhvc3QodXJsLCBob3N0Q2hhbm5lbCA9IFwiaG9zdFwiKSB7XG5cdHJldHVybiBnZXRXb3JrZXJJbnZva2VyKCkuaW1wb3J0TW9kdWxlKGhvc3RDaGFubmVsLCB1cmwpO1xufVxudmFyIGN0eCA9IGdldFdvcmtlckNvbnRleHQoeyBuYW1lOiBcIndvcmtlclwiIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9vYnNlcnZhYmxlL0Nocm9tZU9ic2VydmFibGUudHNcbnZhciBCYXNlQ2hyb21lT2JzZXJ2YWJsZSA9IGNsYXNzIHtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfbGlzdGVuaW5nID0gZmFsc2U7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHRjb25zdCBmaXJzdCA9IHRoaXMuX3N1YnMuc2l6ZSA9PT0gMDtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdGlmIChmaXJzdCAmJiAhdGhpcy5fbGlzdGVuaW5nKSB0aGlzLl9hY3RpdmF0ZSgpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCAmJiB0aGlzLl9saXN0ZW5pbmcpIHRoaXMuX2RlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdF9kZWFjdGl2YXRlKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBudWxsO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IGZhbHNlO1xuXHR9XG5cdF9kaXNwYXRjaCh2YWx1ZSkge1xuXHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0cy5uZXh0Py4odmFsdWUpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHR9XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdHRoaXMuX2RlYWN0aXZhdGUoKTtcblx0fVxufTtcbnZhciBDaHJvbWVSdW50aW1lT2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgQmFzZUNocm9tZU9ic2VydmFibGUge1xuXHRfaGFuZGxlcjtcblx0X29wdGlvbnM7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y29uc3RydWN0b3IoX2hhbmRsZXIsIF9vcHRpb25zID0ge30pIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX2hhbmRsZXIgPSBfaGFuZGxlcjtcblx0XHR0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG5cdH1cblx0c2VuZChtc2cpIHtcblx0XHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybjtcblx0XHRjb25zdCB7IF9zZW5kZXIsIF90YWJJZCwgX2ZyYW1lSWQsIHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKGRhdGEpO1xuXHR9XG5cdHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdCxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHsgX3NlbmRlciwgX3RhYklkLCBfZnJhbWVJZCwgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSB7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWRcblx0XHRcdH07XG5cdFx0XHRjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZShkYXRhLCAocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0aWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikgcmVqZWN0KG5ldyBFcnJvcihjaHJvbWUucnVudGltZS5sYXN0RXJyb3IubWVzc2FnZSkpO1xuXHRcdFx0XHRlbHNlIHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShyZXFJZCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZyB8fCB0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUucnVudGltZSkgcmV0dXJuO1xuXHRcdGNvbnN0IGxpc3RlbmVyID0gKG1lc3NhZ2UsIHNlbmRlciwgc2VuZFJlc3BvbnNlKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fb3B0aW9ucy5maWx0ZXJTZW5kZXIgJiYgIXRoaXMuX29wdGlvbnMuZmlsdGVyU2VuZGVyKHNlbmRlcikpIHJldHVybiBmYWxzZTtcblx0XHRcdGlmICh0aGlzLl9vcHRpb25zLmZpbHRlck1lc3NhZ2UgJiYgIXRoaXMuX29wdGlvbnMuZmlsdGVyTWVzc2FnZShtZXNzYWdlKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdFx0Li4ubWVzc2FnZSxcblx0XHRcdFx0aWQ6IG1lc3NhZ2UuaWQgPz8gVVVJRHY0KCksXG5cdFx0XHRcdF9zZW5kZXI6IHNlbmRlcixcblx0XHRcdFx0X3RhYklkOiBzZW5kZXIudGFiPy5pZCxcblx0XHRcdFx0X2ZyYW1lSWQ6IHNlbmRlci5mcmFtZUlkXG5cdFx0XHR9O1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIGRhdGEucmVxSWQpIHtcblx0XHRcdFx0Y29uc3QgcCA9IHRoaXMuX3BlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdHAucmVzb2x2ZShkYXRhLnBheWxvYWQpO1xuXHRcdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5faGFuZGxlcikge1xuXHRcdFx0XHRjb25zdCByZXNwb25kID0gKHJlc3VsdCkgPT4gc2VuZFJlc3BvbnNlKHJlc3VsdCk7XG5cdFx0XHRcdGNvbnN0IHN1YnNjcmliZXIgPSB7XG5cdFx0XHRcdFx0bmV4dDogKHYpID0+IHRoaXMuX2Rpc3BhdGNoKHYpLFxuXHRcdFx0XHRcdGVycm9yOiAoKSA9PiB7fSxcblx0XHRcdFx0XHRjb21wbGV0ZTogKCkgPT4ge30sXG5cdFx0XHRcdFx0c2lnbmFsOiBuZXcgQWJvcnRDb250cm9sbGVyKCkuc2lnbmFsLFxuXHRcdFx0XHRcdGFjdGl2ZTogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5faGFuZGxlcihkYXRhLCByZXNwb25kLCBzdWJzY3JpYmVyKSBpbnN0YW5jZW9mIFByb21pc2UgPyB0cnVlIDogdGhpcy5fb3B0aW9ucy5hc3luY1Jlc3BvbnNlO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fZGlzcGF0Y2goZGF0YSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cbn07XG52YXIgQ2hyb21lVGFic09ic2VydmFibGUgPSBjbGFzcyBleHRlbmRzIEJhc2VDaHJvbWVPYnNlcnZhYmxlIHtcblx0X3RhYklkO1xuXHRfb3B0aW9ucztcblx0Y29uc3RydWN0b3IoX3RhYklkLCBfb3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl90YWJJZCA9IF90YWJJZDtcblx0XHR0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG5cdH1cblx0c2V0VGFiSWQoaWQpIHtcblx0XHR0aGlzLl90YWJJZCA9IGlkO1xuXHR9XG5cdHNlbmQobXNnKSB7XG5cdFx0aWYgKHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS50YWJzIHx8IHRoaXMuX3RhYklkID09IG51bGwpIHJldHVybjtcblx0XHRjb25zdCB7IF9zZW5kZXIsIF90YWJJZCwgX2ZyYW1lSWQsIHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGNocm9tZS50YWJzLnNlbmRNZXNzYWdlKHRoaXMuX3RhYklkLCBkYXRhKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZyB8fCB0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUucnVudGltZSkgcmV0dXJuO1xuXHRcdGNvbnN0IGxpc3RlbmVyID0gKG1lc3NhZ2UsIHNlbmRlcikgPT4ge1xuXHRcdFx0aWYgKHRoaXMuX3RhYklkICE9IG51bGwgJiYgc2VuZGVyLnRhYj8uaWQgIT09IHRoaXMuX3RhYklkKSByZXR1cm47XG5cdFx0XHRpZiAodGhpcy5fb3B0aW9ucy5maWx0ZXJTZW5kZXIgJiYgIXRoaXMuX29wdGlvbnMuZmlsdGVyU2VuZGVyKHNlbmRlcikpIHJldHVybjtcblx0XHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRcdC4uLm1lc3NhZ2UsXG5cdFx0XHRcdGlkOiBtZXNzYWdlLmlkID8/IFVVSUR2NCgpLFxuXHRcdFx0XHRfc2VuZGVyOiBzZW5kZXIsXG5cdFx0XHRcdF90YWJJZDogc2VuZGVyLnRhYj8uaWQsXG5cdFx0XHRcdF9mcmFtZUlkOiBzZW5kZXIuZnJhbWVJZFxuXHRcdFx0fTtcblx0XHRcdHRoaXMuX2Rpc3BhdGNoKGRhdGEpO1xuXHRcdH07XG5cdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gKCkgPT4gY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG59O1xudmFyIENocm9tZVBvcnRPYnNlcnZhYmxlID0gY2xhc3MgZXh0ZW5kcyBCYXNlQ2hyb21lT2JzZXJ2YWJsZSB7XG5cdF9wb3J0TmFtZTtcblx0X3RhYklkO1xuXHRfcG9ydCA9IG51bGw7XG5cdF9pbmZvID0gbnVsbDtcblx0Y29uc3RydWN0b3IoX3BvcnROYW1lLCBfdGFiSWQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX3BvcnROYW1lID0gX3BvcnROYW1lO1xuXHRcdHRoaXMuX3RhYklkID0gX3RhYklkO1xuXHR9XG5cdGNvbm5lY3QoKSB7XG5cdFx0aWYgKHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS5ydW50aW1lKSByZXR1cm47XG5cdFx0dGhpcy5fcG9ydCA9IHRoaXMuX3RhYklkICE9IG51bGwgPyBjaHJvbWUudGFicy5jb25uZWN0KHRoaXMuX3RhYklkLCB7IG5hbWU6IHRoaXMuX3BvcnROYW1lIH0pIDogY2hyb21lLnJ1bnRpbWUuY29ubmVjdCh7IG5hbWU6IHRoaXMuX3BvcnROYW1lIH0pO1xuXHRcdHRoaXMuX2luZm8gPSB7XG5cdFx0XHRuYW1lOiB0aGlzLl9wb3J0TmFtZSxcblx0XHRcdHRhYklkOiB0aGlzLl90YWJJZFxuXHRcdH07XG5cdFx0dGhpcy5fc2V0dXBMaXN0ZW5lcnMoKTtcblx0fVxuXHRzZW5kKG1zZykge1xuXHRcdGlmICghdGhpcy5fcG9ydCkgcmV0dXJuO1xuXHRcdGNvbnN0IHsgX3NlbmRlciwgX3RhYklkLCBfZnJhbWVJZCwgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0dGhpcy5fcG9ydC5wb3N0TWVzc2FnZShkYXRhKTtcblx0fVxuXHRfc2V0dXBMaXN0ZW5lcnMoKSB7XG5cdFx0aWYgKCF0aGlzLl9wb3J0KSByZXR1cm47XG5cdFx0dGhpcy5fcG9ydC5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIoKG1zZykgPT4gdGhpcy5fZGlzcGF0Y2goe1xuXHRcdFx0Li4ubXNnLFxuXHRcdFx0aWQ6IG1zZy5pZCA/PyBVVUlEdjQoKVxuXHRcdH0pKTtcblx0XHR0aGlzLl9wb3J0Lm9uRGlzY29ubmVjdC5hZGRMaXN0ZW5lcigoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHRcdHRoaXMuX3BvcnQgPSBudWxsO1xuXHRcdH0pO1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAoIXRoaXMuX3BvcnQpIHRoaXMuY29ubmVjdCgpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cblx0X2RlYWN0aXZhdGUoKSB7XG5cdFx0dGhpcy5fcG9ydD8uZGlzY29ubmVjdCgpO1xuXHRcdHRoaXMuX3BvcnQgPSBudWxsO1xuXHRcdHN1cGVyLl9kZWFjdGl2YXRlKCk7XG5cdH1cblx0Z2V0IHBvcnRJbmZvKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbmZvO1xuXHR9XG5cdGdldCBpc0Nvbm5lY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcG9ydCAhPSBudWxsO1xuXHR9XG59O1xudmFyIENocm9tZUV4dGVybmFsT2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgQmFzZUNocm9tZU9ic2VydmFibGUge1xuXHRfZXh0ZW5zaW9uSWQ7XG5cdGNvbnN0cnVjdG9yKF9leHRlbnNpb25JZCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fZXh0ZW5zaW9uSWQgPSBfZXh0ZW5zaW9uSWQ7XG5cdH1cblx0c2VuZChtc2cpIHtcblx0XHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybjtcblx0XHRjb25zdCB7IF9zZW5kZXIsIF90YWJJZCwgX2ZyYW1lSWQsIHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGlmICh0aGlzLl9leHRlbnNpb25JZCkgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UodGhpcy5fZXh0ZW5zaW9uSWQsIGRhdGEpO1xuXHRcdGVsc2UgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoZGF0YSk7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcgfHwgdHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWU/Lm9uTWVzc2FnZUV4dGVybmFsKSByZXR1cm47XG5cdFx0Y29uc3QgbGlzdGVuZXIgPSAobWVzc2FnZSwgc2VuZGVyKSA9PiB7XG5cdFx0XHR0aGlzLl9kaXNwYXRjaCh7XG5cdFx0XHRcdC4uLm1lc3NhZ2UsXG5cdFx0XHRcdGlkOiBtZXNzYWdlLmlkID8/IFVVSUR2NCgpLFxuXHRcdFx0XHRfc2VuZGVyOiBzZW5kZXJcblx0XHRcdH0pO1xuXHRcdH07XG5cdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlRXh0ZXJuYWwuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbC5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUNocm9tZVJlcXVlc3RIYW5kbGVyKGNoYW5uZWxOYW1lLCBoYW5kbGVycykge1xuXHRyZXR1cm4gYXN5bmMgKGRhdGEsIHJlc3BvbmQsIHN1YnNjcmliZXIpID0+IHtcblx0XHRpZiAoZGF0YS50eXBlICE9PSBcInJlcXVlc3RcIikge1xuXHRcdFx0c3Vic2NyaWJlci5uZXh0KGRhdGEpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBhY3Rpb24gPSBkYXRhLnBheWxvYWQ/LmFjdGlvbjtcblx0XHRpZiAoYWN0aW9uICYmIGhhbmRsZXJzW2FjdGlvbl0pIHRyeSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyc1thY3Rpb25dKGRhdGEucGF5bG9hZD8uYXJncyA/PyBbXSwgZGF0YSk7XG5cdFx0XHRyZXNwb25kKHtcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHRjaGFubmVsOiBkYXRhLnNlbmRlcixcblx0XHRcdFx0c2VuZGVyOiBjaGFubmVsTmFtZSxcblx0XHRcdFx0cmVxSWQ6IGRhdGEucmVxSWQsXG5cdFx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdFx0cGF5bG9hZDogeyByZXN1bHQgfSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0cmVzcG9uZCh7XG5cdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0Y2hhbm5lbDogZGF0YS5zZW5kZXIsXG5cdFx0XHRcdHNlbmRlcjogY2hhbm5lbE5hbWUsXG5cdFx0XHRcdHJlcUlkOiBkYXRhLnJlcUlkLFxuXHRcdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHsgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRlbHNlIHN1YnNjcmliZXIubmV4dChkYXRhKTtcblx0fTtcbn1cbnZhciBDaHJvbWVPYnNlcnZhYmxlRmFjdG9yeSA9IHtcblx0cnVudGltZTogKGhhbmRsZXIsIG9wdGlvbnMpID0+IG5ldyBDaHJvbWVSdW50aW1lT2JzZXJ2YWJsZShoYW5kbGVyLCBvcHRpb25zKSxcblx0dGFiczogKHRhYklkLCBvcHRpb25zKSA9PiBuZXcgQ2hyb21lVGFic09ic2VydmFibGUodGFiSWQsIG9wdGlvbnMpLFxuXHRwb3J0OiAobmFtZSwgdGFiSWQpID0+IG5ldyBDaHJvbWVQb3J0T2JzZXJ2YWJsZShuYW1lLCB0YWJJZCksXG5cdGV4dGVybmFsOiAoZXh0ZW5zaW9uSWQpID0+IG5ldyBDaHJvbWVFeHRlcm5hbE9ic2VydmFibGUoZXh0ZW5zaW9uSWQpXG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9vYnNlcnZhYmxlL1NvY2tldElPT2JzZXJ2YWJsZS50c1xudmFyIFNvY2tldElPT2JzZXJ2YWJsZSA9IGNsYXNzIHtcblx0X3NvY2tldDtcblx0X2NoYW5uZWxOYW1lO1xuXHRfb3B0aW9ucztcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9saXN0ZW5pbmcgPSBmYWxzZTtcblx0X2NsZWFudXBzID0gW107XG5cdF9ldmVudHM7XG5cdF9kZWZhdWx0RXZlbnQ7XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRjb25zdHJ1Y3Rvcihfc29ja2V0LCBfY2hhbm5lbE5hbWUsIF9vcHRpb25zID0ge30pIHtcblx0XHR0aGlzLl9zb2NrZXQgPSBfc29ja2V0O1xuXHRcdHRoaXMuX2NoYW5uZWxOYW1lID0gX2NoYW5uZWxOYW1lO1xuXHRcdHRoaXMuX29wdGlvbnMgPSBfb3B0aW9ucztcblx0XHR0aGlzLl9ldmVudHMgPSBfb3B0aW9ucy5ldmVudHMgPz8gW1wibWVzc2FnZVwiLCBcImNoYW5uZWxcIl07XG5cdFx0dGhpcy5fZGVmYXVsdEV2ZW50ID0gX29wdGlvbnMuZGVmYXVsdEV2ZW50ID8/IFwibWVzc2FnZVwiO1xuXHRcdGlmIChfb3B0aW9ucy5hdXRvQ29ubmVjdCAhPT0gZmFsc2UpIHRoaXMuX3NvY2tldC5jb25uZWN0Py4oKTtcblx0fVxuXHRzZW5kKG1zZywgZXZlbnQpIHtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZSwgYWNrLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0dGhpcy5fc29ja2V0LmVtaXQoZXZlbnQgPz8gbXNnLmV2ZW50ID8/IHRoaXMuX2RlZmF1bHRFdmVudCwgZGF0YSk7XG5cdH1cblx0ZW1pdChldmVudCwgZGF0YSkge1xuXHRcdHRoaXMuX3NvY2tldC5lbWl0KGV2ZW50LCBkYXRhKTtcblx0fVxuXHRyZXF1ZXN0KG1zZywgZXZlbnQpIHtcblx0XHRjb25zdCByZXFJZCA9IG1zZy5yZXFJZCA/PyBVVUlEdjQoKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5fcGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5fcGVuZGluZy5oYXMocmVxSWQpKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUmVxdWVzdCB0aW1lb3V0XCIpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgM2U0KTtcblx0XHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlLCBhY2ssIC4uLmRhdGEgfSA9IHtcblx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRyZXFJZFxuXHRcdFx0fTtcblx0XHRcdHRoaXMuX3NvY2tldC5lbWl0KGV2ZW50ID8/IHRoaXMuX2RlZmF1bHRFdmVudCwgZGF0YSwgKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0Y29uc3QgZmlyc3QgPSB0aGlzLl9zdWJzLnNpemUgPT09IDA7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRpZiAoZmlyc3QgJiYgIXRoaXMuX2xpc3RlbmluZykgdGhpcy5fYWN0aXZhdGUoKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xvc2VkOiBmYWxzZSxcblx0XHRcdHVuc3Vic2NyaWJlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3N1YnMuZGVsZXRlKG9icyk7XG5cdFx0XHRcdGlmICh0aGlzLl9zdWJzLnNpemUgPT09IDAgJiYgdGhpcy5fbGlzdGVuaW5nKSB0aGlzLl9kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdGZvciAoY29uc3QgZXZlbnQgb2YgdGhpcy5fZXZlbnRzKSB7XG5cdFx0XHRjb25zdCBoYW5kbGVyID0gKGRhdGEsIGFjaykgPT4ge1xuXHRcdFx0XHRjb25zdCBtc2cgPSB7XG5cdFx0XHRcdFx0Li4udHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgPyBkYXRhIDogeyBwYXlsb2FkOiBkYXRhIH0sXG5cdFx0XHRcdFx0aWQ6IGRhdGE/LmlkID8/IFVVSUR2NCgpLFxuXHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdGFja1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAobXNnLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBtc2cucmVxSWQpIHtcblx0XHRcdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQobXNnLnJlcUlkKTtcblx0XHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdFx0cC5yZXNvbHZlKG1zZy5wYXlsb2FkKTtcblx0XHRcdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKG1zZy5yZXFJZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRcdHMubmV4dD8uKG1zZyk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR0aGlzLl9zb2NrZXQub24oZXZlbnQsIGhhbmRsZXIpO1xuXHRcdFx0dGhpcy5fY2xlYW51cHMucHVzaCgoKSA9PiB0aGlzLl9zb2NrZXQub2ZmKGV2ZW50LCBoYW5kbGVyKSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9uQ29ubmVjdCA9ICgpID0+IHRoaXMuX3N0YXRlLm5leHQoXCJjb25uZWN0ZWRcIik7XG5cdFx0Y29uc3Qgb25EaXNjb25uZWN0ID0gKCkgPT4gdGhpcy5fc3RhdGUubmV4dChcImRpc2Nvbm5lY3RlZFwiKTtcblx0XHRjb25zdCBvbkVycm9yID0gKGVycikgPT4ge1xuXHRcdFx0dGhpcy5fc3RhdGUubmV4dChcImVycm9yXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyKSkpO1xuXHRcdH07XG5cdFx0dGhpcy5fc29ja2V0Lm9uKFwiY29ubmVjdFwiLCBvbkNvbm5lY3QpO1xuXHRcdHRoaXMuX3NvY2tldC5vbihcImRpc2Nvbm5lY3RcIiwgb25EaXNjb25uZWN0KTtcblx0XHR0aGlzLl9zb2NrZXQub24oXCJlcnJvclwiLCBvbkVycm9yKTtcblx0XHR0aGlzLl9jbGVhbnVwcy5wdXNoKCgpID0+IHRoaXMuX3NvY2tldC5vZmYoXCJjb25uZWN0XCIsIG9uQ29ubmVjdCksICgpID0+IHRoaXMuX3NvY2tldC5vZmYoXCJkaXNjb25uZWN0XCIsIG9uRGlzY29ubmVjdCksICgpID0+IHRoaXMuX3NvY2tldC5vZmYoXCJlcnJvclwiLCBvbkVycm9yKSk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxuXHRfZGVhY3RpdmF0ZSgpIHtcblx0XHR0aGlzLl9jbGVhbnVwcy5mb3JFYWNoKChmbikgPT4gZm4oKSk7XG5cdFx0dGhpcy5fY2xlYW51cHMgPSBbXTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSBmYWxzZTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHR0aGlzLl9zdWJzLmNsZWFyKCk7XG5cdFx0dGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHRcdHRoaXMuX3NvY2tldC5kaXNjb25uZWN0Py4oKTtcblx0fVxuXHRnZXQgc29ja2V0KCkge1xuXHRcdHJldHVybiB0aGlzLl9zb2NrZXQ7XG5cdH1cblx0Z2V0IGNoYW5uZWxOYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsTmFtZTtcblx0fVxuXHRnZXQgaXNDb25uZWN0ZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NvY2tldC5jb25uZWN0ZWQgPz8gZmFsc2U7XG5cdH1cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZTtcblx0fVxufTtcbnZhciBTb2NrZXRJT1Jvb21PYnNlcnZhYmxlID0gY2xhc3Mge1xuXHRfcGFyZW50O1xuXHRfcm9vbU5hbWU7XG5cdF9zdWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0X3BhcmVudFN1YiA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKF9wYXJlbnQsIF9yb29tTmFtZSkge1xuXHRcdHRoaXMuX3BhcmVudCA9IF9wYXJlbnQ7XG5cdFx0dGhpcy5fcm9vbU5hbWUgPSBfcm9vbU5hbWU7XG5cdH1cblx0c2VuZChtc2cpIHtcblx0XHR0aGlzLl9wYXJlbnQuc2VuZCh7XG5cdFx0XHQuLi5tc2csXG5cdFx0XHRyb29tOiB0aGlzLl9yb29tTmFtZVxuXHRcdH0pO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0Y29uc3QgZmlyc3QgPSB0aGlzLl9zdWJzLnNpemUgPT09IDA7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRpZiAoZmlyc3QgJiYgIXRoaXMuX3BhcmVudFN1YikgdGhpcy5fcGFyZW50U3ViID0gdGhpcy5fcGFyZW50LnN1YnNjcmliZSh7XG5cdFx0XHRuZXh0OiAobXNnKSA9PiB7XG5cdFx0XHRcdGlmIChtc2cucm9vbSA9PT0gdGhpcy5fcm9vbU5hbWUgfHwgbXNnLmNoYW5uZWwgPT09IHRoaXMuX3Jvb21OYW1lKSBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdFx0XHRzLm5leHQ/Lihtc2cpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3I6IChlKSA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSBzLmVycm9yPy4oZSk7XG5cdFx0XHR9LFxuXHRcdFx0Y29tcGxldGU6ICgpID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuY29tcGxldGU/LigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCkge1xuXHRcdFx0XHRcdHRoaXMuX3BhcmVudFN1Yj8udW5zdWJzY3JpYmUoKTtcblx0XHRcdFx0XHR0aGlzLl9wYXJlbnRTdWIgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRnZXQgcm9vbU5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3Jvb21OYW1lO1xuXHR9XG59O1xuZnVuY3Rpb24gY3JlYXRlU29ja2V0UmVxdWVzdEhhbmRsZXIoY2hhbm5lbE5hbWUsIGhhbmRsZXJzKSB7XG5cdHJldHVybiBhc3luYyAoZGF0YSkgPT4ge1xuXHRcdGlmIChkYXRhLnR5cGUgIT09IFwicmVxdWVzdFwiIHx8ICFkYXRhLmFjaykgcmV0dXJuO1xuXHRcdGNvbnN0IGFjdGlvbiA9IGRhdGEucGF5bG9hZD8uYWN0aW9uO1xuXHRcdGlmIChhY3Rpb24gJiYgaGFuZGxlcnNbYWN0aW9uXSkgdHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXJzW2FjdGlvbl0oZGF0YS5wYXlsb2FkPy5hcmdzID8/IFtdLCBkYXRhKTtcblx0XHRcdGRhdGEuYWNrKHtcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHRjaGFubmVsOiBkYXRhLnNlbmRlcixcblx0XHRcdFx0c2VuZGVyOiBjaGFubmVsTmFtZSxcblx0XHRcdFx0cmVxSWQ6IGRhdGEucmVxSWQsXG5cdFx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdFx0cGF5bG9hZDogeyByZXN1bHQgfSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0ZGF0YS5hY2soe1xuXHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdGNoYW5uZWw6IGRhdGEuc2VuZGVyLFxuXHRcdFx0XHRzZW5kZXI6IGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRyZXFJZDogZGF0YS5yZXFJZCxcblx0XHRcdFx0dHlwZTogXCJyZXNwb25zZVwiLFxuXHRcdFx0XHRwYXlsb2FkOiB7IGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikgfSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG59XG52YXIgU29ja2V0SU9PYnNlcnZhYmxlRmFjdG9yeSA9IHtcblx0Y3JlYXRlOiAoc29ja2V0LCBjaGFubmVsTmFtZSwgb3B0aW9ucykgPT4gbmV3IFNvY2tldElPT2JzZXJ2YWJsZShzb2NrZXQsIGNoYW5uZWxOYW1lLCBvcHRpb25zKSxcblx0cm9vbTogKHBhcmVudCwgcm9vbU5hbWUpID0+IG5ldyBTb2NrZXRJT1Jvb21PYnNlcnZhYmxlKHBhcmVudCwgcm9vbU5hbWUpXG59O1xuZnVuY3Rpb24gY3JlYXRlU29ja2V0T2JzZXJ2YWJsZShzb2NrZXQsIGNoYW5uZWxOYW1lLCBvcHRpb25zKSB7XG5cdHJldHVybiBuZXcgU29ja2V0SU9PYnNlcnZhYmxlKHNvY2tldCwgY2hhbm5lbE5hbWUsIG9wdGlvbnMpO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvU2hhcmVkV29ya2VyVHJhbnNwb3J0LnRzXG52YXIgU2hhcmVkV29ya2VyQ2xpZW50ID0gY2xhc3Mge1xuXHRfc2NyaXB0VXJsO1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9vcHRpb25zO1xuXHRfd29ya2VyID0gbnVsbDtcblx0X3BvcnQgPSBudWxsO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2xpc3RlbmluZyA9IGZhbHNlO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9wb3J0SWQgPSBVVUlEdjQoKTtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdGNvbnN0cnVjdG9yKF9zY3JpcHRVcmwsIF9jaGFubmVsTmFtZSwgX29wdGlvbnMgPSB7fSkge1xuXHRcdHRoaXMuX3NjcmlwdFVybCA9IF9zY3JpcHRVcmw7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuXHRcdGlmIChfb3B0aW9ucy5hdXRvQ29ubmVjdCAhPT0gZmFsc2UpIHRoaXMuY29ubmVjdCgpO1xuXHR9XG5cdGNvbm5lY3QoKSB7XG5cdFx0aWYgKHRoaXMuX3dvcmtlcikgcmV0dXJuO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLl93b3JrZXIgPSBuZXcgU2hhcmVkV29ya2VyKHRoaXMuX3NjcmlwdFVybCwge1xuXHRcdFx0XHRuYW1lOiB0aGlzLl9vcHRpb25zLm5hbWUsXG5cdFx0XHRcdGNyZWRlbnRpYWxzOiB0aGlzLl9vcHRpb25zLmNyZWRlbnRpYWxzLFxuXHRcdFx0XHR0eXBlOiB0aGlzLl9vcHRpb25zLnR5cGVcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5fcG9ydCA9IHRoaXMuX3dvcmtlci5wb3J0O1xuXHRcdFx0dGhpcy5fc2V0dXBMaXN0ZW5lcnMoKTtcblx0XHRcdHRoaXMuX3BvcnQuc3RhcnQoKTtcblx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjb25uZWN0aW5nXCIpO1xuXHRcdFx0dGhpcy5zZW5kKHtcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdFx0c2VuZGVyOiB0aGlzLl9wb3J0SWQsXG5cdFx0XHRcdHR5cGU6IFwic2lnbmFsXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRhY3Rpb246IFwiY29ubmVjdFwiLFxuXHRcdFx0XHRcdHBvcnRJZDogdGhpcy5fcG9ydElkXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJlcnJvclwiKTtcblx0XHRcdHRocm93IGU7XG5cdFx0fVxuXHR9XG5cdHNlbmQobXNnLCB0cmFuc2Zlcikge1xuXHRcdGlmICghdGhpcy5fcG9ydCkgcmV0dXJuO1xuXHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0dGhpcy5fcG9ydC5wb3N0TWVzc2FnZSh7XG5cdFx0XHQuLi5kYXRhLFxuXHRcdFx0cG9ydElkOiB0aGlzLl9wb3J0SWRcblx0XHR9LCB0cmFuc2ZlciA/PyBbXSk7XG5cdH1cblx0cmVxdWVzdChtc2cpIHtcblx0XHRjb25zdCByZXFJZCA9IG1zZy5yZXFJZCA/PyBVVUlEdjQoKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5fcGVuZGluZy5oYXMocmVxSWQpKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUmVxdWVzdCB0aW1lb3V0XCIpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgM2U0KTtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmU6ICh2KSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdHJlc29sdmUodik7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlamVjdDogKGUpID0+IHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zZW5kKHtcblx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRyZXFJZCxcblx0XHRcdFx0dHlwZTogXCJyZXF1ZXN0XCJcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdGJyb2FkY2FzdChtc2csIHRyYW5zZmVyKSB7XG5cdFx0dGhpcy5zZW5kKHtcblx0XHRcdC4uLm1zZyxcblx0XHRcdGJyb2FkY2FzdDogdHJ1ZVxuXHRcdH0sIHRyYW5zZmVyKTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0aWYgKCF0aGlzLl9saXN0ZW5pbmcpIHRoaXMuX2FjdGl2YXRlKCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0XHRpZiAodGhpcy5fc3Vicy5zaXplID09PSAwKSB0aGlzLl9kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRfc2V0dXBMaXN0ZW5lcnMoKSB7XG5cdFx0aWYgKCF0aGlzLl9wb3J0KSByZXR1cm47XG5cdFx0Y29uc3QgbXNnSGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0gZS5kYXRhO1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJzaWduYWxcIiAmJiBkYXRhLnBheWxvYWQ/LmFjdGlvbiA9PT0gXCJjb25uZWN0ZWRcIikgdGhpcy5fc3RhdGUubmV4dChcImNvbm5lY3RlZFwiKTtcblx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRcdGNvbnN0IHAgPSB0aGlzLl9wZW5kaW5nLmdldChkYXRhLnJlcUlkKTtcblx0XHRcdFx0aWYgKHApIHtcblx0XHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0XHRpZiAoZGF0YS5wYXlsb2FkPy5lcnJvcikgcC5yZWplY3QobmV3IEVycm9yKGRhdGEucGF5bG9hZC5lcnJvcikpO1xuXHRcdFx0XHRcdGVsc2UgcC5yZXNvbHZlKGRhdGEucGF5bG9hZD8ucmVzdWx0ID8/IGRhdGEucGF5bG9hZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/LihkYXRhKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgZXJySGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiZXJyb3JcIik7XG5cdFx0XHRjb25zdCBlcnIgPSAvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiU2hhcmVkV29ya2VyIGVycm9yXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIpO1xuXHRcdH07XG5cdFx0dGhpcy5fcG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtc2dIYW5kbGVyKTtcblx0XHR0aGlzLl9wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlZXJyb3JcIiwgZXJySGFuZGxlcik7XG5cdFx0dGhpcy5fY2xlYW51cCA9ICgpID0+IHtcblx0XHRcdHRoaXMuX3BvcnQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0dGhpcy5fcG9ydD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VlcnJvclwiLCBlcnJIYW5kbGVyKTtcblx0XHR9O1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG5cdF9kZWFjdGl2YXRlKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBudWxsO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IGZhbHNlO1xuXHR9XG5cdGRpc2Nvbm5lY3QoKSB7XG5cdFx0dGhpcy5zZW5kKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9wb3J0SWQsXG5cdFx0XHR0eXBlOiBcInNpZ25hbFwiLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRhY3Rpb246IFwiZGlzY29ubmVjdFwiLFxuXHRcdFx0XHRwb3J0SWQ6IHRoaXMuX3BvcnRJZFxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuX2RlYWN0aXZhdGUoKTtcblx0XHR0aGlzLl9wb3J0Py5jbG9zZSgpO1xuXHRcdHRoaXMuX3BvcnQgPSBudWxsO1xuXHRcdHRoaXMuX3dvcmtlciA9IG51bGw7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImRpc2Nvbm5lY3RlZFwiKTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHR0aGlzLl9zdWJzLmNsZWFyKCk7XG5cdFx0dGhpcy5kaXNjb25uZWN0KCk7XG5cdH1cblx0Z2V0IHBvcnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnQ7XG5cdH1cblx0Z2V0IHBvcnRJZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcG9ydElkO1xuXHR9XG5cdGdldCBpc0Nvbm5lY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWUoKSA9PT0gXCJjb25uZWN0ZWRcIjtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbE5hbWU7XG5cdH1cbn07XG52YXIgU2hhcmVkV29ya2VySG9zdCA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfcG9ydHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRjb25zdHJ1Y3RvcihfY2hhbm5lbE5hbWUpIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9zZXR1cEdsb2JhbEhhbmRsZXIoKTtcblx0fVxuXHRfc2V0dXBHbG9iYWxIYW5kbGVyKCkge1xuXHRcdGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBcIm9uY29ubmVjdFwiIGluIHNlbGYpIHtcblx0XHRcdHNlbGYub25jb25uZWN0ID0gKGUpID0+IHtcblx0XHRcdFx0Y29uc3QgcG9ydCA9IGUucG9ydHNbMF07XG5cdFx0XHRcdGNvbnN0IHBvcnRJZCA9IFVVSUR2NCgpO1xuXHRcdFx0XHR0aGlzLl9yZWdpc3RlclBvcnQocG9ydElkLCBwb3J0KTtcblx0XHRcdH07XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwicmVhZHlcIik7XG5cdFx0fVxuXHR9XG5cdF9yZWdpc3RlclBvcnQocG9ydElkLCBwb3J0KSB7XG5cdFx0Y29uc3QgaW5mbyA9IHtcblx0XHRcdGlkOiBwb3J0SWQsXG5cdFx0XHRjb25uZWN0ZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdGxhc3RTZWVuOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHRwb3J0Lm9ubWVzc2FnZSA9IChlKSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0gZS5kYXRhO1xuXHRcdFx0aW5mby5sYXN0U2VlbiA9IERhdGUubm93KCk7XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInNpZ25hbFwiKSB7XG5cdFx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmFjdGlvbiA9PT0gXCJjb25uZWN0XCIpIHtcblx0XHRcdFx0XHRjb25zdCByZWFsUG9ydElkID0gZGF0YS5wYXlsb2FkLnBvcnRJZCB8fCBwb3J0SWQ7XG5cdFx0XHRcdFx0dGhpcy5fcG9ydHMuZGVsZXRlKHBvcnRJZCk7XG5cdFx0XHRcdFx0aW5mby5pZCA9IHJlYWxQb3J0SWQ7XG5cdFx0XHRcdFx0dGhpcy5fcG9ydHMuc2V0KHJlYWxQb3J0SWQsIHtcblx0XHRcdFx0XHRcdHBvcnQsXG5cdFx0XHRcdFx0XHRpbmZvXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cG9ydC5wb3N0TWVzc2FnZSh7XG5cdFx0XHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdFx0XHRcdHNlbmRlcjogXCJob3N0XCIsXG5cdFx0XHRcdFx0XHR0eXBlOiBcInNpZ25hbFwiLFxuXHRcdFx0XHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRcdFx0XHRhY3Rpb246IFwiY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0XHRcdHBvcnRJZDogcmVhbFBvcnRJZFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5wYXlsb2FkPy5hY3Rpb24gPT09IFwiZGlzY29ubmVjdFwiKSB7XG5cdFx0XHRcdFx0dGhpcy5fdW5yZWdpc3RlclBvcnQoZGF0YS5wb3J0SWQgPz8gcG9ydElkKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChkYXRhLmJyb2FkY2FzdCkgdGhpcy5icm9hZGNhc3QoZGF0YSwgZGF0YS5wb3J0SWQgPz8gcG9ydElkKTtcblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/Lih7XG5cdFx0XHRcdFx0Li4uZGF0YSxcblx0XHRcdFx0XHRwb3J0SWQ6IGRhdGEucG9ydElkID8/IHBvcnRJZFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0cG9ydC5vbm1lc3NhZ2VlcnJvciA9IChlKSA9PiB7XG5cdFx0XHRjb25zdCBlcnIgPSAvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUG9ydCBtZXNzYWdlIGVycm9yXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIpO1xuXHRcdH07XG5cdFx0cG9ydC5zdGFydCgpO1xuXHRcdHRoaXMuX3BvcnRzLnNldChwb3J0SWQsIHtcblx0XHRcdHBvcnQsXG5cdFx0XHRpbmZvXG5cdFx0fSk7XG5cdH1cblx0X3VucmVnaXN0ZXJQb3J0KHBvcnRJZCkge1xuXHRcdGNvbnN0IGVudHJ5ID0gdGhpcy5fcG9ydHMuZ2V0KHBvcnRJZCk7XG5cdFx0aWYgKGVudHJ5KSB7XG5cdFx0XHRlbnRyeS5wb3J0LmNsb3NlKCk7XG5cdFx0XHR0aGlzLl9wb3J0cy5kZWxldGUocG9ydElkKTtcblx0XHR9XG5cdH1cblx0c2VuZChwb3J0SWQsIG1zZywgdHJhbnNmZXIpIHtcblx0XHRjb25zdCBlbnRyeSA9IHRoaXMuX3BvcnRzLmdldChwb3J0SWQpO1xuXHRcdGlmICghZW50cnkpIHJldHVybjtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGVudHJ5LnBvcnQucG9zdE1lc3NhZ2UoZGF0YSwgdHJhbnNmZXIgPz8gW10pO1xuXHR9XG5cdGJyb2FkY2FzdChtc2csIGV4Y2x1ZGVQb3J0SWQpIHtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGZvciAoY29uc3QgW2lkLCBlbnRyeV0gb2YgdGhpcy5fcG9ydHMpIGlmIChpZCAhPT0gZXhjbHVkZVBvcnRJZCkgZW50cnkucG9ydC5wb3N0TWVzc2FnZSh7XG5cdFx0XHQuLi5kYXRhLFxuXHRcdFx0YnJvYWRjYXN0OiB0cnVlXG5cdFx0fSk7XG5cdH1cblx0cmVzcG9uZChtc2csIHJlc3VsdCwgdHJhbnNmZXIpIHtcblx0XHRpZiAoIW1zZy5wb3J0SWQgfHwgIW1zZy5yZXFJZCkgcmV0dXJuO1xuXHRcdHRoaXMuc2VuZChtc2cucG9ydElkLCB7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBtc2cuc2VuZGVyLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdHJlcUlkOiBtc2cucmVxSWQsXG5cdFx0XHRwYXlsb2FkOiB7IHJlc3VsdCB9XG5cdFx0fSwgdHJhbnNmZXIpO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xvc2VkOiBmYWxzZSxcblx0XHRcdHVuc3Vic2NyaWJlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3N1YnMuZGVsZXRlKG9icyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRnZXRQb3J0cygpIHtcblx0XHRjb25zdCByZXN1bHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdGZvciAoY29uc3QgW2lkLCBlbnRyeV0gb2YgdGhpcy5fcG9ydHMpIHJlc3VsdC5zZXQoaWQsIHsgLi4uZW50cnkuaW5mbyB9KTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdGdldCBwb3J0Q291bnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnRzLnNpemU7XG5cdH1cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZTtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxOYW1lO1xuXHR9XG59O1xuZnVuY3Rpb24gY3JlYXRlU2hhcmVkV29ya2VyT2JzZXJ2YWJsZShzY3JpcHRVcmwsIGNoYW5uZWxOYW1lLCBvcHRpb25zKSB7XG5cdHJldHVybiBuZXcgU2hhcmVkV29ya2VyQ2xpZW50KHNjcmlwdFVybCwgY2hhbm5lbE5hbWUsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gY3JlYXRlU2hhcmVkV29ya2VySG9zdE9ic2VydmFibGUoY2hhbm5lbE5hbWUpIHtcblx0cmV0dXJuIG5ldyBTaGFyZWRXb3JrZXJIb3N0KGNoYW5uZWxOYW1lKTtcbn1cbnZhciBTaGFyZWRXb3JrZXJPYnNlcnZhYmxlRmFjdG9yeSA9IHtcblx0Y2xpZW50OiAodXJsLCBuYW1lLCBvcHRzKSA9PiBuZXcgU2hhcmVkV29ya2VyQ2xpZW50KHVybCwgbmFtZSwgb3B0cyksXG5cdGhvc3Q6IChuYW1lKSA9PiBuZXcgU2hhcmVkV29ya2VySG9zdChuYW1lKVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdHJhbnNwb3J0L0F0b21pY3NUcmFuc3BvcnQudHNcbnZhciBjYm9yRW5jb2RlciA9IG51bGw7XG5hc3luYyBmdW5jdGlvbiBnZXRDQk9SRW5jb2RlcigpIHtcblx0aWYgKGNib3JFbmNvZGVyKSByZXR1cm4gY2JvckVuY29kZXI7XG5cdHRyeSB7XG5cdFx0Y29uc3QgY2JvcnggPSBhd2FpdCBpbXBvcnQoXCIuL2Nib3IteC0hfnswMDB9fi5qc1wiKTtcblx0XHRjYm9yRW5jb2RlciA9IHtcblx0XHRcdGVuY29kZTogKHYpID0+IGNib3J4LmVuY29kZSh2KSxcblx0XHRcdGRlY29kZTogKGQpID0+IGNib3J4LmRlY29kZShkKVxuXHRcdH07XG5cdH0gY2F0Y2gge1xuXHRcdGNib3JFbmNvZGVyID0ge1xuXHRcdFx0ZW5jb2RlOiAodikgPT4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHYsIHJlcGxhY2VyKSksXG5cdFx0XHRkZWNvZGU6IChkKSA9PiBKU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShkKSwgcmV2aXZlcilcblx0XHR9O1xuXHR9XG5cdHJldHVybiBjYm9yRW5jb2Rlcjtcbn1cbmZ1bmN0aW9uIHJlcGxhY2VyKF9rZXksIHZhbHVlKSB7XG5cdGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRhVmlldykpIHJldHVybiB7XG5cdFx0X190eXBlZEFycmF5OiB0cnVlLFxuXHRcdHR5cGU6IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUsXG5cdFx0ZGF0YTogQXJyYXkuZnJvbSh2YWx1ZSlcblx0fTtcblx0aWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHJldHVybiB7XG5cdFx0X19hcnJheUJ1ZmZlcjogdHJ1ZSxcblx0XHRkYXRhOiBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KHZhbHVlKSlcblx0fTtcblx0cmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gcmV2aXZlcihfa2V5LCB2YWx1ZSkge1xuXHRpZiAodmFsdWU/Ll9fdHlwZWRBcnJheSkge1xuXHRcdGNvbnN0IFR5cGVkQXJyYXlDdG9yID0gZ2xvYmFsVGhpc1t2YWx1ZS50eXBlXTtcblx0XHRyZXR1cm4gVHlwZWRBcnJheUN0b3IgPyBuZXcgVHlwZWRBcnJheUN0b3IodmFsdWUuZGF0YSkgOiB2YWx1ZS5kYXRhO1xuXHR9XG5cdGlmICh2YWx1ZT8uX19hcnJheUJ1ZmZlcikgcmV0dXJuIG5ldyBVaW50OEFycmF5KHZhbHVlLmRhdGEpLmJ1ZmZlcjtcblx0cmV0dXJuIHZhbHVlO1xufVxudmFyIEhFQURFUl9TSVpFID0gMzI7XG52YXIgTE9DS19PRkZTRVQgPSAwO1xudmFyIFNFUV9PRkZTRVQgPSA0O1xudmFyIFNJWkVfT0ZGU0VUID0gODtcbnZhciBGTEFHU19PRkZTRVQgPSAxMjtcbnZhciBSRUFEWV9PRkZTRVQgPSAxNjtcbnZhciBBQ0tfT0ZGU0VUID0gMjA7XG52YXIgREFUQV9PRkZTRVQgPSBIRUFERVJfU0laRTtcbnZhciBGTEFHX0hBU19UUkFOU0ZFUiA9IDE7XG52YXIgRkxBR19DT01QUkVTU0VEID0gMjtcbnZhciBGTEFHX1JFU1BPTlNFID0gNDtcbnZhciBBdG9taWNzQnVmZmVyID0gY2xhc3Mge1xuXHRfY29uZmlnO1xuXHRfc2hhcmVkQnVmZmVyO1xuXHRfaW50MzJWaWV3O1xuXHRfdWludDhWaWV3O1xuXHRfbWF4RGF0YVNpemU7XG5cdGNvbnN0cnVjdG9yKGJ1ZmZlck9yU2l6ZSA9IDY1NTM2LCBfY29uZmlnID0ge30pIHtcblx0XHR0aGlzLl9jb25maWcgPSBfY29uZmlnO1xuXHRcdGlmICh0eXBlb2YgYnVmZmVyT3JTaXplID09PSBcIm51bWJlclwiKSB0aGlzLl9zaGFyZWRCdWZmZXIgPSBuZXcgU2hhcmVkQXJyYXlCdWZmZXIoYnVmZmVyT3JTaXplKTtcblx0XHRlbHNlIHRoaXMuX3NoYXJlZEJ1ZmZlciA9IGJ1ZmZlck9yU2l6ZTtcblx0XHR0aGlzLl9pbnQzMlZpZXcgPSBuZXcgSW50MzJBcnJheSh0aGlzLl9zaGFyZWRCdWZmZXIpO1xuXHRcdHRoaXMuX3VpbnQ4VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuX3NoYXJlZEJ1ZmZlcik7XG5cdFx0dGhpcy5fbWF4RGF0YVNpemUgPSB0aGlzLl9jb25maWcubWF4TWVzc2FnZVNpemUgPz8gdGhpcy5fc2hhcmVkQnVmZmVyLmJ5dGVMZW5ndGggLSBIRUFERVJfU0laRTtcblx0fVxuXHRhc3luYyB3cml0ZShkYXRhLCBmbGFncyA9IDApIHtcblx0XHRpZiAoZGF0YS5ieXRlTGVuZ3RoID4gdGhpcy5fbWF4RGF0YVNpemUpIHRocm93IG5ldyBFcnJvcihgTWVzc2FnZSB0b28gbGFyZ2U6ICR7ZGF0YS5ieXRlTGVuZ3RofSA+ICR7dGhpcy5fbWF4RGF0YVNpemV9YCk7XG5cdFx0d2hpbGUgKEF0b21pY3MuY29tcGFyZUV4Y2hhbmdlKHRoaXMuX2ludDMyVmlldywgTE9DS19PRkZTRVQgLyA0LCAwLCAxKSAhPT0gMCkgaWYgKCh0aGlzLl9jb25maWcudXNlQXN5bmNXYWl0ICYmIFwid2FpdEFzeW5jXCIgaW4gQXRvbWljcyA/IGF3YWl0IEF0b21pY3Mud2FpdEFzeW5jKHRoaXMuX2ludDMyVmlldywgTE9DS19PRkZTRVQgLyA0LCAxLCB0aGlzLl9jb25maWcud2FpdFRpbWVvdXQgPz8gMTAwKS52YWx1ZSA6IEF0b21pY3Mud2FpdCh0aGlzLl9pbnQzMlZpZXcsIExPQ0tfT0ZGU0VUIC8gNCwgMSwgdGhpcy5fY29uZmlnLndhaXRUaW1lb3V0ID8/IDEwMCkpID09PSBcInRpbWVkLW91dFwiKSBjb250aW51ZTtcblx0XHR0cnkge1xuXHRcdFx0QXRvbWljcy5zdG9yZSh0aGlzLl9pbnQzMlZpZXcsIFNJWkVfT0ZGU0VUIC8gNCwgZGF0YS5ieXRlTGVuZ3RoKTtcblx0XHRcdEF0b21pY3Muc3RvcmUodGhpcy5faW50MzJWaWV3LCBGTEFHU19PRkZTRVQgLyA0LCBmbGFncyk7XG5cdFx0XHR0aGlzLl91aW50OFZpZXcuc2V0KGRhdGEsIERBVEFfT0ZGU0VUKTtcblx0XHRcdEF0b21pY3MuYWRkKHRoaXMuX2ludDMyVmlldywgU0VRX09GRlNFVCAvIDQsIDEpO1xuXHRcdFx0QXRvbWljcy5zdG9yZSh0aGlzLl9pbnQzMlZpZXcsIFJFQURZX09GRlNFVCAvIDQsIDEpO1xuXHRcdFx0QXRvbWljcy5ub3RpZnkodGhpcy5faW50MzJWaWV3LCBSRUFEWV9PRkZTRVQgLyA0KTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRBdG9taWNzLnN0b3JlKHRoaXMuX2ludDMyVmlldywgTE9DS19PRkZTRVQgLyA0LCAwKTtcblx0XHRcdEF0b21pY3Mubm90aWZ5KHRoaXMuX2ludDMyVmlldywgTE9DS19PRkZTRVQgLyA0KTtcblx0XHR9XG5cdH1cblx0YXN5bmMgcmVhZCgpIHtcblx0XHRpZiAoQXRvbWljcy5sb2FkKHRoaXMuX2ludDMyVmlldywgUkVBRFlfT0ZGU0VUIC8gNCkgPT09IDApIHtcblx0XHRcdGlmICgodGhpcy5fY29uZmlnLnVzZUFzeW5jV2FpdCAmJiBcIndhaXRBc3luY1wiIGluIEF0b21pY3MgPyBhd2FpdCBBdG9taWNzLndhaXRBc3luYyh0aGlzLl9pbnQzMlZpZXcsIFJFQURZX09GRlNFVCAvIDQsIDAsIHRoaXMuX2NvbmZpZy53YWl0VGltZW91dCA/PyAxZTMpLnZhbHVlIDogQXRvbWljcy53YWl0KHRoaXMuX2ludDMyVmlldywgUkVBRFlfT0ZGU0VUIC8gNCwgMCwgdGhpcy5fY29uZmlnLndhaXRUaW1lb3V0ID8/IDFlMykpID09PSBcInRpbWVkLW91dFwiKSByZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3Qgc2l6ZSA9IEF0b21pY3MubG9hZCh0aGlzLl9pbnQzMlZpZXcsIFNJWkVfT0ZGU0VUIC8gNCk7XG5cdFx0Y29uc3QgZmxhZ3MgPSBBdG9taWNzLmxvYWQodGhpcy5faW50MzJWaWV3LCBGTEFHU19PRkZTRVQgLyA0KTtcblx0XHRjb25zdCBzZXEgPSBBdG9taWNzLmxvYWQodGhpcy5faW50MzJWaWV3LCBTRVFfT0ZGU0VUIC8gNCk7XG5cdFx0aWYgKHNpemUgPD0gMCB8fCBzaXplID4gdGhpcy5fbWF4RGF0YVNpemUpIHJldHVybiBudWxsO1xuXHRcdGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheShzaXplKTtcblx0XHRkYXRhLnNldCh0aGlzLl91aW50OFZpZXcuc3ViYXJyYXkoREFUQV9PRkZTRVQsIERBVEFfT0ZGU0VUICsgc2l6ZSkpO1xuXHRcdEF0b21pY3Muc3RvcmUodGhpcy5faW50MzJWaWV3LCBSRUFEWV9PRkZTRVQgLyA0LCAwKTtcblx0XHRBdG9taWNzLmFkZCh0aGlzLl9pbnQzMlZpZXcsIEFDS19PRkZTRVQgLyA0LCAxKTtcblx0XHRBdG9taWNzLm5vdGlmeSh0aGlzLl9pbnQzMlZpZXcsIEFDS19PRkZTRVQgLyA0KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZGF0YSxcblx0XHRcdGZsYWdzLFxuXHRcdFx0c2VxXG5cdFx0fTtcblx0fVxuXHRhc3luYyB3YWl0QWNrKGV4cGVjdGVkU2VxKSB7XG5cdFx0Y29uc3QgdGltZW91dCA9IHRoaXMuX2NvbmZpZy53YWl0VGltZW91dCA/PyA1ZTM7XG5cdFx0Y29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuXHRcdHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0KSB7XG5cdFx0XHRjb25zdCBhY2sgPSBBdG9taWNzLmxvYWQodGhpcy5faW50MzJWaWV3LCBBQ0tfT0ZGU0VUIC8gNCk7XG5cdFx0XHRpZiAoYWNrID49IGV4cGVjdGVkU2VxKSByZXR1cm4gdHJ1ZTtcblx0XHRcdGlmICh0aGlzLl9jb25maWcudXNlQXN5bmNXYWl0ICYmIFwid2FpdEFzeW5jXCIgaW4gQXRvbWljcykgYXdhaXQgQXRvbWljcy53YWl0QXN5bmModGhpcy5faW50MzJWaWV3LCBBQ0tfT0ZGU0VUIC8gNCwgYWNrLCAxMDApLnZhbHVlO1xuXHRcdFx0ZWxzZSBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCAxMCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Z2V0IGJ1ZmZlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5fc2hhcmVkQnVmZmVyO1xuXHR9XG5cdGdldCBjdXJyZW50U2VxKCkge1xuXHRcdHJldHVybiBBdG9taWNzLmxvYWQodGhpcy5faW50MzJWaWV3LCBTRVFfT0ZGU0VUIC8gNCk7XG5cdH1cbn07XG52YXIgQXRvbWljc1RyYW5zcG9ydCA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfY29uZmlnO1xuXHRfc2VuZEJ1ZmZlcjtcblx0X3JlY3ZCdWZmZXI7XG5cdF9lbmNvZGVyID0gbnVsbDtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9wb2xsaW5nID0gZmFsc2U7XG5cdF9wb2xsQWJvcnQgPSBudWxsO1xuXHRfd29ya2VySWQgPSBVVUlEdjQoKTtcblx0X2xhc3RTZXEgPSAwO1xuXHRfc3RhdGUgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0Y29uc3RydWN0b3IoX2NoYW5uZWxOYW1lLCBzZW5kQnVmZmVyLCByZWN2QnVmZmVyLCBfY29uZmlnID0ge30pIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9jb25maWcgPSBfY29uZmlnO1xuXHRcdHRoaXMuX3NlbmRCdWZmZXIgPSBzZW5kQnVmZmVyIGluc3RhbmNlb2YgQXRvbWljc0J1ZmZlciA/IHNlbmRCdWZmZXIgOiBuZXcgQXRvbWljc0J1ZmZlcihzZW5kQnVmZmVyLCBfY29uZmlnKTtcblx0XHR0aGlzLl9yZWN2QnVmZmVyID0gcmVjdkJ1ZmZlciBpbnN0YW5jZW9mIEF0b21pY3NCdWZmZXIgPyByZWN2QnVmZmVyIDogbmV3IEF0b21pY3NCdWZmZXIocmVjdkJ1ZmZlciwgX2NvbmZpZyk7XG5cdFx0dGhpcy5faW5pdCgpO1xuXHR9XG5cdGFzeW5jIF9pbml0KCkge1xuXHRcdHRoaXMuX2VuY29kZXIgPSBhd2FpdCBnZXRDQk9SRW5jb2RlcigpO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJyZWFkeVwiKTtcblx0fVxuXHRhc3luYyBzZW5kKG1zZywgdHJhbnNmZXIpIHtcblx0XHRpZiAoIXRoaXMuX2VuY29kZXIpIGF3YWl0IHRoaXMuX2luaXQoKTtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGxldCBmbGFncyA9IDA7XG5cdFx0aWYgKHRyYW5zZmVyPy5sZW5ndGgpIHtcblx0XHRcdGZsYWdzIHw9IEZMQUdfSEFTX1RSQU5TRkVSO1xuXHRcdFx0ZGF0YS5fdHJhbnNmZXJNZXRhID0gdHJhbnNmZXIubWFwKCh0LCBpKSA9PiAoe1xuXHRcdFx0XHRpbmRleDogaSxcblx0XHRcdFx0dHlwZTogdC5jb25zdHJ1Y3Rvci5uYW1lLFxuXHRcdFx0XHR0cmFuc2ZlcnJlZDogdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyICYmIFwidHJhbnNmZXJcIiBpbiB0XG5cdFx0XHR9KSk7XG5cdFx0fVxuXHRcdGNvbnN0IGVuY29kZWQgPSB0aGlzLl9lbmNvZGVyLmVuY29kZShkYXRhKTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmNvbXByZXNzaW9uICYmIGVuY29kZWQubGVuZ3RoID4gMTAyNCkgZmxhZ3MgfD0gRkxBR19DT01QUkVTU0VEO1xuXHRcdGF3YWl0IHRoaXMuX3NlbmRCdWZmZXIud3JpdGUoZW5jb2RlZCwgZmxhZ3MpO1xuXHR9XG5cdGFzeW5jIHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIlJlcXVlc3QgdGltZW91dFwiKSk7XG5cdFx0XHR9LCB0aGlzLl9jb25maWcud2FpdFRpbWVvdXQgPz8gM2U0KTtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmU6ICh2KSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdHJlc29sdmUodik7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlamVjdDogKGUpID0+IHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zZW5kKHtcblx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRyZXFJZCxcblx0XHRcdFx0dHlwZTogXCJyZXF1ZXN0XCJcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRpZiAoIXRoaXMuX3BvbGxpbmcpIHRoaXMuX3N0YXJ0UG9sbGluZygpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCkgdGhpcy5fc3RvcFBvbGxpbmcoKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdGFzeW5jIF9zdGFydFBvbGxpbmcoKSB7XG5cdFx0aWYgKHRoaXMuX3BvbGxpbmcpIHJldHVybjtcblx0XHR0aGlzLl9wb2xsaW5nID0gdHJ1ZTtcblx0XHR0aGlzLl9wb2xsQWJvcnQgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcInBvbGxpbmdcIik7XG5cdFx0d2hpbGUgKHRoaXMuX3BvbGxpbmcgJiYgIXRoaXMuX3BvbGxBYm9ydC5zaWduYWwuYWJvcnRlZCkgdHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX3JlY3ZCdWZmZXIucmVhZCgpO1xuXHRcdFx0aWYgKCFyZXN1bHQpIGNvbnRpbnVlO1xuXHRcdFx0aWYgKHJlc3VsdC5zZXEgPD0gdGhpcy5fbGFzdFNlcSkgY29udGludWU7XG5cdFx0XHR0aGlzLl9sYXN0U2VxID0gcmVzdWx0LnNlcTtcblx0XHRcdGNvbnN0IGRhdGEgPSB0aGlzLl9lbmNvZGVyLmRlY29kZShyZXN1bHQuZGF0YSk7XG5cdFx0XHRkYXRhLnNlcSA9IHJlc3VsdC5zZXE7XG5cdFx0XHRkYXRhLndvcmtlcklkID0gZGF0YS53b3JrZXJJZCA/PyB0aGlzLl93b3JrZXJJZDtcblx0XHRcdGlmIChyZXN1bHQuZmxhZ3MgJiBGTEFHX1JFU1BPTlNFIHx8IGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiKSB7XG5cdFx0XHRcdGlmIChkYXRhLnJlcUlkKSB7XG5cdFx0XHRcdFx0Y29uc3QgcCA9IHRoaXMuX3BlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRcdGlmIChwKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmVycm9yKSBwLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRcdFx0XHRlbHNlIHAucmVzb2x2ZShkYXRhLnBheWxvYWQ/LnJlc3VsdCA/PyBkYXRhLnBheWxvYWQpO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdFx0cy5uZXh0Py4oZGF0YSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5lcnJvcj8uKGUpO1xuXHRcdH1cblx0fVxuXHRfc3RvcFBvbGxpbmcoKSB7XG5cdFx0dGhpcy5fcG9sbGluZyA9IGZhbHNlO1xuXHRcdHRoaXMuX3BvbGxBYm9ydD8uYWJvcnQoKTtcblx0XHR0aGlzLl9wb2xsQWJvcnQgPSBudWxsO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJzdG9wcGVkXCIpO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpO1xuXHRcdHRoaXMuX3N1YnMuY2xlYXIoKTtcblx0XHR0aGlzLl9zdG9wUG9sbGluZygpO1xuXHR9XG5cdGdldCBzZW5kQnVmZmVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9zZW5kQnVmZmVyLmJ1ZmZlcjtcblx0fVxuXHRnZXQgcmVjdkJ1ZmZlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5fcmVjdkJ1ZmZlci5idWZmZXI7XG5cdH1cblx0Z2V0IHdvcmtlcklkKCkge1xuXHRcdHJldHVybiB0aGlzLl93b3JrZXJJZDtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbE5hbWU7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVBdG9taWNzQ2hhbm5lbFBhaXIoY2hhbm5lbE5hbWUsIGNvbmZpZyA9IHt9KSB7XG5cdGNvbnN0IGJ1ZmZlclNpemUgPSBjb25maWcuYnVmZmVyU2l6ZSA/PyA2NTUzNjtcblx0Y29uc3QgYnVmZmVyQSA9IG5ldyBTaGFyZWRBcnJheUJ1ZmZlcihidWZmZXJTaXplKTtcblx0Y29uc3QgYnVmZmVyQiA9IG5ldyBTaGFyZWRBcnJheUJ1ZmZlcihidWZmZXJTaXplKTtcblx0cmV0dXJuIHtcblx0XHRtYWluOiBuZXcgQXRvbWljc1RyYW5zcG9ydChjaGFubmVsTmFtZSwgYnVmZmVyQSwgYnVmZmVyQiwgY29uZmlnKSxcblx0XHR3b3JrZXI6IHtcblx0XHRcdHNlbmRCdWZmZXI6IGJ1ZmZlckIsXG5cdFx0XHRyZWN2QnVmZmVyOiBidWZmZXJBXG5cdFx0fVxuXHR9O1xufVxuZnVuY3Rpb24gY3JlYXRlV29ya2VyQXRvbWljc1RyYW5zcG9ydChjaGFubmVsTmFtZSwgc2VuZEJ1ZmZlciwgcmVjdkJ1ZmZlciwgY29uZmlnID0ge30pIHtcblx0cmV0dXJuIG5ldyBBdG9taWNzVHJhbnNwb3J0KGNoYW5uZWxOYW1lLCBzZW5kQnVmZmVyLCByZWN2QnVmZmVyLCBjb25maWcpO1xufVxudmFyIEF0b21pY3NSaW5nQnVmZmVyID0gY2xhc3MgQXRvbWljc1JpbmdCdWZmZXIge1xuXHRfYnVmZmVyO1xuXHRfbWV0YTtcblx0X2RhdGE7XG5cdF9zbG90U2l6ZTtcblx0X3Nsb3RDb3VudDtcblx0X21hc2s7XG5cdHN0YXRpYyBNRVRBX1NJWkUgPSAxNjtcblx0c3RhdGljIFdSSVRFX0lEWCA9IDA7XG5cdHN0YXRpYyBSRUFEX0lEWCA9IDQ7XG5cdHN0YXRpYyBPVkVSRkxPVyA9IDg7XG5cdGNvbnN0cnVjdG9yKGJ1ZmZlck9yQ29uZmlnID0ge30pIHtcblx0XHRpZiAoYnVmZmVyT3JDb25maWcgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcikge1xuXHRcdFx0dGhpcy5fYnVmZmVyID0gYnVmZmVyT3JDb25maWc7XG5cdFx0XHR0aGlzLl9zbG90Q291bnQgPSA2NDtcblx0XHRcdHRoaXMuX3Nsb3RTaXplID0gKHRoaXMuX2J1ZmZlci5ieXRlTGVuZ3RoIC0gQXRvbWljc1JpbmdCdWZmZXIuTUVUQV9TSVpFKSAvIHRoaXMuX3Nsb3RDb3VudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fc2xvdFNpemUgPSBidWZmZXJPckNvbmZpZy5zbG90U2l6ZSA/PyAxMDI0O1xuXHRcdFx0dGhpcy5fc2xvdENvdW50ID0gYnVmZmVyT3JDb25maWcuc2xvdENvdW50ID8/IDY0O1xuXHRcdFx0dGhpcy5fc2xvdENvdW50ID0gMSA8PCBNYXRoLmNlaWwoTWF0aC5sb2cyKHRoaXMuX3Nsb3RDb3VudCkpO1xuXHRcdFx0Y29uc3QgdG90YWxTaXplID0gQXRvbWljc1JpbmdCdWZmZXIuTUVUQV9TSVpFICsgdGhpcy5fc2xvdFNpemUgKiB0aGlzLl9zbG90Q291bnQ7XG5cdFx0XHR0aGlzLl9idWZmZXIgPSBuZXcgU2hhcmVkQXJyYXlCdWZmZXIodG90YWxTaXplKTtcblx0XHR9XG5cdFx0dGhpcy5fbWV0YSA9IG5ldyBJbnQzMkFycmF5KHRoaXMuX2J1ZmZlciwgMCwgQXRvbWljc1JpbmdCdWZmZXIuTUVUQV9TSVpFIC8gNCk7XG5cdFx0dGhpcy5fZGF0YSA9IG5ldyBVaW50OEFycmF5KHRoaXMuX2J1ZmZlciwgQXRvbWljc1JpbmdCdWZmZXIuTUVUQV9TSVpFKTtcblx0XHR0aGlzLl9tYXNrID0gdGhpcy5fc2xvdENvdW50IC0gMTtcblx0fVxuXHR3cml0ZShkYXRhKSB7XG5cdFx0aWYgKGRhdGEuYnl0ZUxlbmd0aCA+IHRoaXMuX3Nsb3RTaXplIC0gNCkgcmV0dXJuIGZhbHNlO1xuXHRcdGNvbnN0IHdyaXRlSWR4ID0gQXRvbWljcy5sb2FkKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLldSSVRFX0lEWCk7XG5cdFx0Y29uc3QgcmVhZElkeCA9IEF0b21pY3MubG9hZCh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5SRUFEX0lEWCk7XG5cdFx0aWYgKCh3cml0ZUlkeCArIDEgJiB0aGlzLl9tYXNrKSA9PT0gKHJlYWRJZHggJiB0aGlzLl9tYXNrKSkge1xuXHRcdFx0QXRvbWljcy5hZGQodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuT1ZFUkZMT1csIDEpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCBzbG90ID0gKHdyaXRlSWR4ICYgdGhpcy5fbWFzaykgKiB0aGlzLl9zbG90U2l6ZTtcblx0XHRuZXcgRGF0YVZpZXcodGhpcy5fYnVmZmVyLCBBdG9taWNzUmluZ0J1ZmZlci5NRVRBX1NJWkUgKyBzbG90KS5zZXRVaW50MzIoMCwgZGF0YS5ieXRlTGVuZ3RoLCB0cnVlKTtcblx0XHR0aGlzLl9kYXRhLnNldChkYXRhLCBzbG90ICsgNCk7XG5cdFx0QXRvbWljcy5zdG9yZSh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5XUklURV9JRFgsIHdyaXRlSWR4ICsgMSk7XG5cdFx0QXRvbWljcy5ub3RpZnkodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuV1JJVEVfSURYKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZWFkKCkge1xuXHRcdGNvbnN0IHdyaXRlSWR4ID0gQXRvbWljcy5sb2FkKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLldSSVRFX0lEWCk7XG5cdFx0Y29uc3QgcmVhZElkeCA9IEF0b21pY3MubG9hZCh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5SRUFEX0lEWCk7XG5cdFx0aWYgKHJlYWRJZHggPT09IHdyaXRlSWR4KSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCBzbG90ID0gKHJlYWRJZHggJiB0aGlzLl9tYXNrKSAqIHRoaXMuX3Nsb3RTaXplO1xuXHRcdGNvbnN0IHNpemUgPSBuZXcgRGF0YVZpZXcodGhpcy5fYnVmZmVyLCBBdG9taWNzUmluZ0J1ZmZlci5NRVRBX1NJWkUgKyBzbG90KS5nZXRVaW50MzIoMCwgdHJ1ZSk7XG5cdFx0aWYgKHNpemUgPT09IDAgfHwgc2l6ZSA+IHRoaXMuX3Nsb3RTaXplIC0gNCkgcmV0dXJuIG51bGw7XG5cdFx0Y29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuXHRcdGRhdGEuc2V0KHRoaXMuX2RhdGEuc3ViYXJyYXkoc2xvdCArIDQsIHNsb3QgKyA0ICsgc2l6ZSkpO1xuXHRcdEF0b21pY3Muc3RvcmUodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuUkVBRF9JRFgsIHJlYWRJZHggKyAxKTtcblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXHRhc3luYyB3YWl0UmVhZCh0aW1lb3V0KSB7XG5cdFx0Y29uc3Qgd3JpdGVJZHggPSBBdG9taWNzLmxvYWQodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuV1JJVEVfSURYKTtcblx0XHRpZiAoQXRvbWljcy5sb2FkKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLlJFQURfSURYKSA8IHdyaXRlSWR4KSByZXR1cm4gdGhpcy5yZWFkKCk7XG5cdFx0aWYgKFwid2FpdEFzeW5jXCIgaW4gQXRvbWljcykge1xuXHRcdFx0aWYgKGF3YWl0IEF0b21pY3Mud2FpdEFzeW5jKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLldSSVRFX0lEWCwgd3JpdGVJZHgsIHRpbWVvdXQgPz8gMWUzKS52YWx1ZSA9PT0gXCJva1wiKSByZXR1cm4gdGhpcy5yZWFkKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIE1hdGgubWluKHRpbWVvdXQgPz8gMWUzLCAxMDApKSk7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZWFkKCk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGdldCBidWZmZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0fVxuXHRnZXQgYXZhaWxhYmxlKCkge1xuXHRcdHJldHVybiBBdG9taWNzLmxvYWQodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuV1JJVEVfSURYKSAtIEF0b21pY3MubG9hZCh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5SRUFEX0lEWCkgJiB0aGlzLl9tYXNrO1xuXHR9XG5cdGdldCBvdmVyZmxvdygpIHtcblx0XHRyZXR1cm4gQXRvbWljcy5sb2FkKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLk9WRVJGTE9XKTtcblx0fVxufTtcbnZhciBBdG9taWNzVHJhbnNwb3J0RmFjdG9yeSA9IHtcblx0Y3JlYXRlOiAobmFtZSwgc2VuZCwgcmVjdiwgY29uZmlnKSA9PiBuZXcgQXRvbWljc1RyYW5zcG9ydChuYW1lLCBzZW5kLCByZWN2LCBjb25maWcpLFxuXHRjcmVhdGVQYWlyOiAobmFtZSwgY29uZmlnKSA9PiBjcmVhdGVBdG9taWNzQ2hhbm5lbFBhaXIobmFtZSwgY29uZmlnKSxcblx0Y3JlYXRlQnVmZmVyOiAoc2l6ZU9yQnVmZmVyLCBjb25maWcpID0+IG5ldyBBdG9taWNzQnVmZmVyKHNpemVPckJ1ZmZlciwgY29uZmlnKSxcblx0Y3JlYXRlUmluZ0J1ZmZlcjogKGNvbmZpZykgPT4gbmV3IEF0b21pY3NSaW5nQnVmZmVyKGNvbmZpZyksXG5cdGdldENCT1I6IGdldENCT1JFbmNvZGVyXG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvUlRDRGF0YUNoYW5uZWxUcmFuc3BvcnQudHNcbnZhciBERUZBVUxUX0lDRV9TRVJWRVJTID0gW1xuXHR7IHVybHM6IFwic3R1bjpzdHVuLmwuZ29vZ2xlLmNvbToxOTMwMlwiIH0sXG5cdHsgdXJsczogXCJzdHVuOnN0dW4xLmwuZ29vZ2xlLmNvbToxOTMwMlwiIH0sXG5cdHsgdXJsczogXCJzdHVuOnN0dW4yLmwuZ29vZ2xlLmNvbToxOTMwMlwiIH1cbl07XG52YXIgUlRDUGVlclRyYW5zcG9ydCA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfY29uZmlnO1xuXHRfcGM7XG5cdF9jaGFubmVsID0gbnVsbDtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9sb2NhbElkID0gVVVJRHY0KCk7XG5cdF9yZW1vdGVJZCA9IG51bGw7XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRfY2hhbm5lbFN0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9pY2VDYW5kaWRhdGVzID0gW107XG5cdF9pY2VHYXRoZXJpbmdDb21wbGV0ZSA9IGZhbHNlO1xuXHRjb25zdHJ1Y3RvcihfY2hhbm5lbE5hbWUsIF9jb25maWcgPSB7fSkge1xuXHRcdHRoaXMuX2NoYW5uZWxOYW1lID0gX2NoYW5uZWxOYW1lO1xuXHRcdHRoaXMuX2NvbmZpZyA9IF9jb25maWc7XG5cdFx0dGhpcy5fcGMgPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oeyBpY2VTZXJ2ZXJzOiBfY29uZmlnLmljZVNlcnZlcnMgPz8gREVGQVVMVF9JQ0VfU0VSVkVSUyB9KTtcblx0XHR0aGlzLl9zZXR1cFBlZXJDb25uZWN0aW9uKCk7XG5cdH1cblx0X3NldHVwUGVlckNvbm5lY3Rpb24oKSB7XG5cdFx0dGhpcy5fcGMub25pY2VjYW5kaWRhdGUgPSAoZSkgPT4ge1xuXHRcdFx0aWYgKGUuY2FuZGlkYXRlKSB7XG5cdFx0XHRcdHRoaXMuX2ljZUNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZS50b0pTT04oKSk7XG5cdFx0XHRcdGlmICh0aGlzLl9yZW1vdGVJZCAmJiB0aGlzLl9jb25maWcuc2lnbmFsaW5nKSB0aGlzLl9jb25maWcuc2lnbmFsaW5nLnNlbmQodGhpcy5fcmVtb3RlSWQsIHtcblx0XHRcdFx0XHR0eXBlOiBcImljZS1jYW5kaWRhdGVcIixcblx0XHRcdFx0XHRmcm9tUGVlcklkOiB0aGlzLl9sb2NhbElkLFxuXHRcdFx0XHRcdHRvUGVlcklkOiB0aGlzLl9yZW1vdGVJZCxcblx0XHRcdFx0XHRjYW5kaWRhdGU6IGUuY2FuZGlkYXRlLnRvSlNPTigpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dGhpcy5fcGMub25pY2VnYXRoZXJpbmdzdGF0ZWNoYW5nZSA9ICgpID0+IHtcblx0XHRcdGlmICh0aGlzLl9wYy5pY2VHYXRoZXJpbmdTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB0aGlzLl9pY2VHYXRoZXJpbmdDb21wbGV0ZSA9IHRydWU7XG5cdFx0fTtcblx0XHR0aGlzLl9wYy5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9ICgpID0+IHtcblx0XHRcdHRoaXMuX3N0YXRlLm5leHQodGhpcy5fcGMuY29ubmVjdGlvblN0YXRlKTtcblx0XHRcdGlmICh0aGlzLl9wYy5jb25uZWN0aW9uU3RhdGUgPT09IFwiZmFpbGVkXCIgfHwgdGhpcy5fcGMuY29ubmVjdGlvblN0YXRlID09PSBcImRpc2Nvbm5lY3RlZFwiKSBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5lcnJvcj8uKC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYENvbm5lY3Rpb24gJHt0aGlzLl9wYy5jb25uZWN0aW9uU3RhdGV9YCkpO1xuXHRcdH07XG5cdFx0dGhpcy5fcGMub25kYXRhY2hhbm5lbCA9IChlKSA9PiB7XG5cdFx0XHR0aGlzLl9zZXR1cERhdGFDaGFubmVsKGUuY2hhbm5lbCk7XG5cdFx0fTtcblx0fVxuXHRfc2V0dXBEYXRhQ2hhbm5lbChjaGFubmVsKSB7XG5cdFx0dGhpcy5fY2hhbm5lbCA9IGNoYW5uZWw7XG5cdFx0Y2hhbm5lbC5iaW5hcnlUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xuXHRcdGNoYW5uZWwub25vcGVuID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5fY2hhbm5lbFN0YXRlLm5leHQoXCJvcGVuXCIpO1xuXHRcdH07XG5cdFx0Y2hhbm5lbC5vbmNsb3NlID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5fY2hhbm5lbFN0YXRlLm5leHQoXCJjbG9zZWRcIik7XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5jb21wbGV0ZT8uKCk7XG5cdFx0fTtcblx0XHRjaGFubmVsLm9uZXJyb3IgPSAoZSkgPT4ge1xuXHRcdFx0Y29uc3QgZXJyID0gLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkRhdGFDaGFubmVsIGVycm9yXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIpO1xuXHRcdH07XG5cdFx0Y2hhbm5lbC5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuXHRcdFx0bGV0IGRhdGE7XG5cdFx0XHRpZiAodHlwZW9mIGUuZGF0YSA9PT0gXCJzdHJpbmdcIikgZGF0YSA9IEpTT04ucGFyc2UoZS5kYXRhKTtcblx0XHRcdGVsc2UgZGF0YSA9IHRoaXMuX2RlY29kZUJpbmFyeShlLmRhdGEpO1xuXHRcdFx0ZGF0YS5wZWVySWQgPSB0aGlzLl9yZW1vdGVJZCA/PyB2b2lkIDA7XG5cdFx0XHRkYXRhLmRhdGFDaGFubmVsTGFiZWwgPSBjaGFubmVsLmxhYmVsO1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIGRhdGEucmVxSWQpIHtcblx0XHRcdFx0Y29uc3QgcCA9IHRoaXMuX3BlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmVycm9yKSBwLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRcdFx0ZWxzZSBwLnJlc29sdmUoZGF0YS5wYXlsb2FkPy5yZXN1bHQgPz8gZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/LihkYXRhKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0YXN5bmMgY3JlYXRlT2ZmZXIocmVtb3RlSWQpIHtcblx0XHR0aGlzLl9yZW1vdGVJZCA9IHJlbW90ZUlkO1xuXHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLl9wYy5jcmVhdGVEYXRhQ2hhbm5lbCh0aGlzLl9jaGFubmVsTmFtZSwgdGhpcy5fY29uZmlnLmRhdGFDaGFubmVsT3B0aW9ucyk7XG5cdFx0dGhpcy5fc2V0dXBEYXRhQ2hhbm5lbChjaGFubmVsKTtcblx0XHRjb25zdCBvZmZlciA9IGF3YWl0IHRoaXMuX3BjLmNyZWF0ZU9mZmVyKCk7XG5cdFx0YXdhaXQgdGhpcy5fcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcik7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IFwib2ZmZXJcIixcblx0XHRcdGZyb21QZWVySWQ6IHRoaXMuX2xvY2FsSWQsXG5cdFx0XHR0b1BlZXJJZDogcmVtb3RlSWQsXG5cdFx0XHRzZHA6IG9mZmVyLnNkcFxuXHRcdH07XG5cdH1cblx0YXN5bmMgaGFuZGxlT2ZmZXIoc2lnbmFsKSB7XG5cdFx0dGhpcy5fcmVtb3RlSWQgPSBzaWduYWwuZnJvbVBlZXJJZDtcblx0XHRhd2FpdCB0aGlzLl9wYy5zZXRSZW1vdGVEZXNjcmlwdGlvbih7XG5cdFx0XHR0eXBlOiBcIm9mZmVyXCIsXG5cdFx0XHRzZHA6IHNpZ25hbC5zZHBcblx0XHR9KTtcblx0XHRjb25zdCBhbnN3ZXIgPSBhd2FpdCB0aGlzLl9wYy5jcmVhdGVBbnN3ZXIoKTtcblx0XHRhd2FpdCB0aGlzLl9wYy5zZXRMb2NhbERlc2NyaXB0aW9uKGFuc3dlcik7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IFwiYW5zd2VyXCIsXG5cdFx0XHRmcm9tUGVlcklkOiB0aGlzLl9sb2NhbElkLFxuXHRcdFx0dG9QZWVySWQ6IHNpZ25hbC5mcm9tUGVlcklkLFxuXHRcdFx0c2RwOiBhbnN3ZXIuc2RwXG5cdFx0fTtcblx0fVxuXHRhc3luYyBoYW5kbGVBbnN3ZXIoc2lnbmFsKSB7XG5cdFx0YXdhaXQgdGhpcy5fcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oe1xuXHRcdFx0dHlwZTogXCJhbnN3ZXJcIixcblx0XHRcdHNkcDogc2lnbmFsLnNkcFxuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGFkZEljZUNhbmRpZGF0ZShzaWduYWwpIHtcblx0XHRpZiAoc2lnbmFsLmNhbmRpZGF0ZSkgYXdhaXQgdGhpcy5fcGMuYWRkSWNlQ2FuZGlkYXRlKHNpZ25hbC5jYW5kaWRhdGUpO1xuXHR9XG5cdHNlbmQobXNnLCBiaW5hcnkpIHtcblx0XHRpZiAoIXRoaXMuX2NoYW5uZWwgfHwgdGhpcy5fY2hhbm5lbC5yZWFkeVN0YXRlICE9PSBcIm9wZW5cIikgcmV0dXJuO1xuXHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlLCBwZWVySWQsIGRhdGFDaGFubmVsTGFiZWwsIC4uLmRhdGEgfSA9IG1zZztcblx0XHRpZiAoYmluYXJ5IHx8IG1zZy5iaW5hcnkpIHRoaXMuX2NoYW5uZWwuc2VuZCh0aGlzLl9lbmNvZGVCaW5hcnkoZGF0YSkpO1xuXHRcdGVsc2UgdGhpcy5fY2hhbm5lbC5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcblx0fVxuXHRyZXF1ZXN0KG1zZykge1xuXHRcdGNvbnN0IHJlcUlkID0gbXNnLnJlcUlkID8/IFVVSUR2NCgpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKHJlcUlkKTtcblx0XHRcdFx0cmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJSZXF1ZXN0IHRpbWVvdXRcIikpO1xuXHRcdFx0fSwgdGhpcy5fY29uZmlnLmNvbm5lY3Rpb25UaW1lb3V0ID8/IDNlNCk7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLnNldChyZXFJZCwge1xuXHRcdFx0XHRyZXNvbHZlOiAodikgPT4ge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRyZXNvbHZlKHYpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZWplY3Q6IChlKSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuc2VuZCh7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWQsXG5cdFx0XHRcdHR5cGU6IFwicmVxdWVzdFwiXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0X2VuY29kZUJpbmFyeShkYXRhKSB7XG5cdFx0Y29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuXHRcdHJldHVybiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoanNvbikuYnVmZmVyO1xuXHR9XG5cdF9kZWNvZGVCaW5hcnkoYnVmZmVyKSB7XG5cdFx0Y29uc3QganNvbiA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShidWZmZXIpO1xuXHRcdHJldHVybiBKU09OLnBhcnNlKGpzb24pO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpO1xuXHRcdHRoaXMuX3N1YnMuY2xlYXIoKTtcblx0XHRpZiAodGhpcy5fcmVtb3RlSWQgJiYgdGhpcy5fY29uZmlnLnNpZ25hbGluZykgdGhpcy5fY29uZmlnLnNpZ25hbGluZy5zZW5kKHRoaXMuX3JlbW90ZUlkLCB7XG5cdFx0XHR0eXBlOiBcImRpc2Nvbm5lY3RcIixcblx0XHRcdGZyb21QZWVySWQ6IHRoaXMuX2xvY2FsSWQsXG5cdFx0XHR0b1BlZXJJZDogdGhpcy5fcmVtb3RlSWRcblx0XHR9KTtcblx0XHR0aGlzLl9jaGFubmVsPy5jbG9zZSgpO1xuXHRcdHRoaXMuX3BjLmNsb3NlKCk7XG5cdH1cblx0Z2V0IGxvY2FsSWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xvY2FsSWQ7XG5cdH1cblx0Z2V0IHJlbW90ZUlkKCkge1xuXHRcdHJldHVybiB0aGlzLl9yZW1vdGVJZDtcblx0fVxuXHRnZXQgY29ubmVjdGlvblN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9wYy5jb25uZWN0aW9uU3RhdGU7XG5cdH1cblx0Z2V0IGNoYW5uZWxTdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbD8ucmVhZHlTdGF0ZSA/PyBudWxsO1xuXHR9XG5cdGdldCBzdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGU7XG5cdH1cblx0Z2V0IGNoYW5uZWxTdGF0ZU9ic2VydmFibGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxTdGF0ZTtcblx0fVxuXHRnZXQgaWNlQ2FuZGlkYXRlcygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2ljZUNhbmRpZGF0ZXNdO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbE5hbWU7XG5cdH1cbn07XG52YXIgUlRDUGVlck1hbmFnZXIgPSBjbGFzcyB7XG5cdF9jaGFubmVsTmFtZTtcblx0X2NvbmZpZztcblx0X3BlZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2xvY2FsSWQgPSBVVUlEdjQoKTtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfc2lnbmFsaW5nQ2xlYW51cCA9IG51bGw7XG5cdF9wZWVyRXZlbnRzID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdGNvbnN0cnVjdG9yKF9jaGFubmVsTmFtZSwgX2NvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fY29uZmlnID0gX2NvbmZpZztcblx0XHR0aGlzLl9zZXR1cFNpZ25hbGluZygpO1xuXHR9XG5cdF9zZXR1cFNpZ25hbGluZygpIHtcblx0XHRpZiAoIXRoaXMuX2NvbmZpZy5zaWduYWxpbmcpIHJldHVybjtcblx0XHRjb25zdCBjbGVhbnVwID0gdGhpcy5fY29uZmlnLnNpZ25hbGluZy5vbk1lc3NhZ2UoYXN5bmMgKHNpZ25hbCkgPT4ge1xuXHRcdFx0aWYgKHNpZ25hbC50b1BlZXJJZCAhPT0gdGhpcy5fbG9jYWxJZCkgcmV0dXJuO1xuXHRcdFx0c3dpdGNoIChzaWduYWwudHlwZSkge1xuXHRcdFx0XHRjYXNlIFwib2ZmZXJcIjoge1xuXHRcdFx0XHRcdGNvbnN0IGFuc3dlciA9IGF3YWl0IHRoaXMuX2dldE9yQ3JlYXRlUGVlcihzaWduYWwuZnJvbVBlZXJJZCkuaGFuZGxlT2ZmZXIoc2lnbmFsKTtcblx0XHRcdFx0XHR0aGlzLl9jb25maWcuc2lnbmFsaW5nLnNlbmQoc2lnbmFsLmZyb21QZWVySWQsIGFuc3dlcik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBcImFuc3dlclwiOiB7XG5cdFx0XHRcdFx0Y29uc3QgcGVlciA9IHRoaXMuX3BlZXJzLmdldChzaWduYWwuZnJvbVBlZXJJZCk7XG5cdFx0XHRcdFx0aWYgKHBlZXIpIGF3YWl0IHBlZXIuaGFuZGxlQW5zd2VyKHNpZ25hbCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBcImljZS1jYW5kaWRhdGVcIjoge1xuXHRcdFx0XHRcdGNvbnN0IHBlZXIgPSB0aGlzLl9wZWVycy5nZXQoc2lnbmFsLmZyb21QZWVySWQpO1xuXHRcdFx0XHRcdGlmIChwZWVyKSBhd2FpdCBwZWVyLmFkZEljZUNhbmRpZGF0ZShzaWduYWwpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgXCJkaXNjb25uZWN0XCI6IHRoaXMuX3JlbW92ZVBlZXIoc2lnbmFsLmZyb21QZWVySWQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmICh0eXBlb2YgY2xlYW51cCA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLl9zaWduYWxpbmdDbGVhbnVwID0gY2xlYW51cDtcblx0XHRlbHNlIGlmIChjbGVhbnVwICYmIFwidW5zdWJzY3JpYmVcIiBpbiBjbGVhbnVwKSB0aGlzLl9zaWduYWxpbmdDbGVhbnVwID0gKCkgPT4gY2xlYW51cC51bnN1YnNjcmliZSgpO1xuXHR9XG5cdF9nZXRPckNyZWF0ZVBlZXIocGVlcklkKSB7XG5cdFx0bGV0IHBlZXIgPSB0aGlzLl9wZWVycy5nZXQocGVlcklkKTtcblx0XHRpZiAoIXBlZXIpIHtcblx0XHRcdHBlZXIgPSBuZXcgUlRDUGVlclRyYW5zcG9ydCh0aGlzLl9jaGFubmVsTmFtZSwgdGhpcy5fY29uZmlnKTtcblx0XHRcdHRoaXMuX3BlZXJzLnNldChwZWVySWQsIHBlZXIpO1xuXHRcdFx0cGVlci5zdGF0ZS5zdWJzY3JpYmUoeyBuZXh0OiAoc3RhdGUpID0+IHtcblx0XHRcdFx0aWYgKHN0YXRlID09PSBcImNvbm5lY3RlZFwiKSB0aGlzLl9wZWVyRXZlbnRzLm5leHQoe1xuXHRcdFx0XHRcdHR5cGU6IFwiY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0cGVlcklkLFxuXHRcdFx0XHRcdHBlZXJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGVsc2UgaWYgKHN0YXRlID09PSBcImRpc2Nvbm5lY3RlZFwiIHx8IHN0YXRlID09PSBcImNsb3NlZFwiKSB0aGlzLl9wZWVyRXZlbnRzLm5leHQoe1xuXHRcdFx0XHRcdHR5cGU6IFwiZGlzY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0cGVlcklkXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRlbHNlIGlmIChzdGF0ZSA9PT0gXCJmYWlsZWRcIikge1xuXHRcdFx0XHRcdHRoaXMuX3BlZXJFdmVudHMubmV4dCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBcImZhaWxlZFwiLFxuXHRcdFx0XHRcdFx0cGVlcklkXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5fcmVtb3ZlUGVlcihwZWVySWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IH0pO1xuXHRcdFx0cGVlci5zdWJzY3JpYmUoe1xuXHRcdFx0XHRuZXh0OiAobXNnKSA9PiB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRcdFx0XHRzLm5leHQ/Lihtc2cpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9yOiAoZSkgPT4ge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSBzLmVycm9yPy4oZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gcGVlcjtcblx0fVxuXHRfcmVtb3ZlUGVlcihwZWVySWQpIHtcblx0XHRjb25zdCBwZWVyID0gdGhpcy5fcGVlcnMuZ2V0KHBlZXJJZCk7XG5cdFx0aWYgKHBlZXIpIHtcblx0XHRcdHBlZXIuY2xvc2UoKTtcblx0XHRcdHRoaXMuX3BlZXJzLmRlbGV0ZShwZWVySWQpO1xuXHRcdFx0dGhpcy5fcGVlckV2ZW50cy5uZXh0KHtcblx0XHRcdFx0dHlwZTogXCJkaXNjb25uZWN0ZWRcIixcblx0XHRcdFx0cGVlcklkXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0YXN5bmMgY29ubmVjdChwZWVySWQpIHtcblx0XHRjb25zdCBwZWVyID0gdGhpcy5fZ2V0T3JDcmVhdGVQZWVyKHBlZXJJZCk7XG5cdFx0Y29uc3Qgb2ZmZXIgPSBhd2FpdCBwZWVyLmNyZWF0ZU9mZmVyKHBlZXJJZCk7XG5cdFx0aWYgKHRoaXMuX2NvbmZpZy5zaWduYWxpbmcpIGF3YWl0IHRoaXMuX2NvbmZpZy5zaWduYWxpbmcuc2VuZChwZWVySWQsIG9mZmVyKTtcblx0XHRyZXR1cm4gcGVlcjtcblx0fVxuXHRzZW5kKHBlZXJJZCwgbXNnKSB7XG5cdFx0dGhpcy5fcGVlcnMuZ2V0KHBlZXJJZCk/LnNlbmQobXNnKTtcblx0fVxuXHRicm9hZGNhc3QobXNnKSB7XG5cdFx0Zm9yIChjb25zdCBwZWVyIG9mIHRoaXMuX3BlZXJzLnZhbHVlcygpKSBwZWVyLnNlbmQobXNnKTtcblx0fVxuXHRyZXF1ZXN0KHBlZXJJZCwgbXNnKSB7XG5cdFx0Y29uc3QgcGVlciA9IHRoaXMuX3BlZXJzLmdldChwZWVySWQpO1xuXHRcdGlmICghcGVlcikgcmV0dXJuIFByb21pc2UucmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJQZWVyIG5vdCBmb3VuZFwiKSk7XG5cdFx0cmV0dXJuIHBlZXIucmVxdWVzdChtc2cpO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xvc2VkOiBmYWxzZSxcblx0XHRcdHVuc3Vic2NyaWJlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3N1YnMuZGVsZXRlKG9icyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRvblBlZXJFdmVudChoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BlZXJFdmVudHMuc3Vic2NyaWJlKHsgbmV4dDogaGFuZGxlciB9KTtcblx0fVxuXHRnZXRQZWVycygpIHtcblx0XHRjb25zdCByZXN1bHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdGZvciAoY29uc3QgW2lkLCBwZWVyXSBvZiB0aGlzLl9wZWVycykgcmVzdWx0LnNldChpZCwge1xuXHRcdFx0aWQsXG5cdFx0XHRjb25uZWN0aW9uU3RhdGU6IHBlZXIuY29ubmVjdGlvblN0YXRlLFxuXHRcdFx0aWNlQ29ubmVjdGlvblN0YXRlOiBcIm5ld1wiLFxuXHRcdFx0ZGF0YUNoYW5uZWxTdGF0ZTogcGVlci5jaGFubmVsU3RhdGUgPz8gXCJjbG9zZWRcIlxuXHRcdH0pO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc2lnbmFsaW5nQ2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdGZvciAoY29uc3QgcGVlciBvZiB0aGlzLl9wZWVycy52YWx1ZXMoKSkgcGVlci5jbG9zZSgpO1xuXHRcdHRoaXMuX3BlZXJzLmNsZWFyKCk7XG5cdH1cblx0Z2V0IGxvY2FsSWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xvY2FsSWQ7XG5cdH1cblx0Z2V0IHBlZXJDb3VudCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcGVlcnMuc2l6ZTtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxOYW1lO1xuXHR9XG59O1xuZnVuY3Rpb24gY3JlYXRlQnJvYWRjYXN0U2lnbmFsaW5nKGNoYW5uZWxOYW1lKSB7XG5cdGNvbnN0IGJjID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoYHJ0Yy1zaWduYWxpbmc6JHtjaGFubmVsTmFtZX1gKTtcblx0Y29uc3QgaGFuZGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRiYy5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuXHRcdGZvciAoY29uc3QgaCBvZiBoYW5kbGVycykgaChlLmRhdGEpO1xuXHR9O1xuXHRyZXR1cm4ge1xuXHRcdHNlbmQocGVlcklkLCBtZXNzYWdlKSB7XG5cdFx0XHRiYy5wb3N0TWVzc2FnZShtZXNzYWdlKTtcblx0XHR9LFxuXHRcdG9uTWVzc2FnZShoYW5kbGVyKSB7XG5cdFx0XHRoYW5kbGVycy5hZGQoaGFuZGxlcik7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR1bnN1YnNjcmliZTogKCkgPT4gaGFuZGxlcnMuZGVsZXRlKGhhbmRsZXIpLFxuXHRcdFx0XHRjbG9zZWQ6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0Y2xvc2UoKSB7XG5cdFx0XHRiYy5jbG9zZSgpO1xuXHRcdFx0aGFuZGxlcnMuY2xlYXIoKTtcblx0XHR9XG5cdH07XG59XG52YXIgUlRDVHJhbnNwb3J0RmFjdG9yeSA9IHtcblx0Y3JlYXRlUGVlcjogKG5hbWUsIGNvbmZpZykgPT4gbmV3IFJUQ1BlZXJUcmFuc3BvcnQobmFtZSwgY29uZmlnKSxcblx0Y3JlYXRlTWFuYWdlcjogKG5hbWUsIGNvbmZpZykgPT4gbmV3IFJUQ1BlZXJNYW5hZ2VyKG5hbWUsIGNvbmZpZyksXG5cdGNyZWF0ZVNpZ25hbGluZzogKG5hbWUpID0+IGNyZWF0ZUJyb2FkY2FzdFNpZ25hbGluZyhuYW1lKVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdHJhbnNwb3J0L1BvcnRUcmFuc3BvcnQudHNcbnZhciBQb3J0VHJhbnNwb3J0ID0gY2xhc3Mge1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9jb25maWc7XG5cdF9wb3J0O1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2xpc3RlbmluZyA9IGZhbHNlO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9wb3J0SWQgPSBVVUlEdjQoKTtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9rZWVwQWxpdmVUaW1lciA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKHBvcnQsIF9jaGFubmVsTmFtZSwgX2NvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fY29uZmlnID0gX2NvbmZpZztcblx0XHR0aGlzLl9wb3J0ID0gcG9ydDtcblx0XHR0aGlzLl9zZXR1cFBvcnQoKTtcblx0XHRpZiAoX2NvbmZpZy5hdXRvU3RhcnQgIT09IGZhbHNlKSB0aGlzLnN0YXJ0KCk7XG5cdH1cblx0X3NldHVwUG9ydCgpIHtcblx0XHRjb25zdCBtc2dIYW5kbGVyID0gKGUpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSBlLmRhdGE7XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIgJiYgZGF0YS5yZXFJZCkge1xuXHRcdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdGlmIChwKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdFx0aWYgKGRhdGEucGF5bG9hZD8uZXJyb3IpIHAucmVqZWN0KG5ldyBFcnJvcihkYXRhLnBheWxvYWQuZXJyb3IpKTtcblx0XHRcdFx0XHRlbHNlIHAucmVzb2x2ZShkYXRhLnBheWxvYWQ/LnJlc3VsdCA/PyBkYXRhLnBheWxvYWQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJzaWduYWxcIiAmJiBkYXRhLnBheWxvYWQ/LmFjdGlvbiA9PT0gXCJwaW5nXCIpIHtcblx0XHRcdFx0dGhpcy5zZW5kKHtcblx0XHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdFx0c2VuZGVyOiB0aGlzLl9wb3J0SWQsXG5cdFx0XHRcdFx0dHlwZTogXCJzaWduYWxcIixcblx0XHRcdFx0XHRwYXlsb2FkOiB7IGFjdGlvbjogXCJwb25nXCIgfVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZGF0YS5wb3J0SWQgPSBkYXRhLnBvcnRJZCA/PyB0aGlzLl9wb3J0SWQ7XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdFx0cy5uZXh0Py4oZGF0YSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IGVyckhhbmRsZXIgPSAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiZXJyb3JcIik7XG5cdFx0XHRjb25zdCBlcnIgPSAvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUG9ydCBlcnJvclwiKTtcblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSBzLmVycm9yPy4oZXJyKTtcblx0XHR9O1xuXHRcdHRoaXMuX3BvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0dGhpcy5fcG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZWVycm9yXCIsIGVyckhhbmRsZXIpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSAoKSA9PiB7XG5cdFx0XHR0aGlzLl9wb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0dGhpcy5fcG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZWVycm9yXCIsIGVyckhhbmRsZXIpO1xuXHRcdH07XG5cdH1cblx0c3RhcnQoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX3BvcnQuc3RhcnQoKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJyZWFkeVwiKTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmtlZXBBbGl2ZSkgdGhpcy5fc3RhcnRLZWVwQWxpdmUoKTtcblx0fVxuXHRzZW5kKG1zZywgdHJhbnNmZXIpIHtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdHRoaXMuX3BvcnQucG9zdE1lc3NhZ2Uoe1xuXHRcdFx0Li4uZGF0YSxcblx0XHRcdHBvcnRJZDogdGhpcy5fcG9ydElkXG5cdFx0fSwgdHJhbnNmZXIgPz8gW10pO1xuXHR9XG5cdHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIlJlcXVlc3QgdGltZW91dFwiKSk7XG5cdFx0XHR9LCB0aGlzLl9jb25maWcudGltZW91dCA/PyAzZTQpO1xuXHRcdFx0dGhpcy5fcGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdFx0cmVzb2x2ZTogKHYpID0+IHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0cmVzb2x2ZSh2KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVqZWN0OiAoZSkgPT4ge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnNlbmQoe1xuXHRcdFx0XHQuLi5tc2csXG5cdFx0XHRcdHJlcUlkLFxuXHRcdFx0XHR0eXBlOiBcInJlcXVlc3RcIlxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdF9zdGFydEtlZXBBbGl2ZSgpIHtcblx0XHR0aGlzLl9rZWVwQWxpdmVUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdHRoaXMuc2VuZCh7XG5cdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdHNlbmRlcjogdGhpcy5fcG9ydElkLFxuXHRcdFx0XHR0eXBlOiBcInNpZ25hbFwiLFxuXHRcdFx0XHRwYXlsb2FkOiB7IGFjdGlvbjogXCJwaW5nXCIgfVxuXHRcdFx0fSk7XG5cdFx0fSwgdGhpcy5fY29uZmlnLmtlZXBBbGl2ZUludGVydmFsID8/IDNlNCk7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0aWYgKHRoaXMuX2tlZXBBbGl2ZVRpbWVyKSB7XG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMuX2tlZXBBbGl2ZVRpbWVyKTtcblx0XHRcdHRoaXMuX2tlZXBBbGl2ZVRpbWVyID0gbnVsbDtcblx0XHR9XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdHRoaXMuX3BvcnQuY2xvc2UoKTtcblx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiY2xvc2VkXCIpO1xuXHR9XG5cdGdldCBwb3J0KCkge1xuXHRcdHJldHVybiB0aGlzLl9wb3J0O1xuXHR9XG5cdGdldCBwb3J0SWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnRJZDtcblx0fVxuXHRnZXQgaXNMaXN0ZW5pbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xpc3RlbmluZztcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbE5hbWU7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVDaGFubmVsUGFpcihjaGFubmVsTmFtZSwgY29uZmlnKSB7XG5cdGNvbnN0IGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcblx0cmV0dXJuIHtcblx0XHRsb2NhbDogbmV3IFBvcnRUcmFuc3BvcnQoY2hhbm5lbC5wb3J0MSwgY2hhbm5lbE5hbWUsIGNvbmZpZyksXG5cdFx0cmVtb3RlOiBjaGFubmVsLnBvcnQyLFxuXHRcdHRyYW5zZmVyOiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gY2hhbm5lbC5wb3J0Mjtcblx0XHR9XG5cdH07XG59XG5mdW5jdGlvbiBjcmVhdGVGcm9tUG9ydChwb3J0LCBjaGFubmVsTmFtZSwgY29uZmlnKSB7XG5cdHJldHVybiBuZXcgUG9ydFRyYW5zcG9ydChwb3J0LCBjaGFubmVsTmFtZSwgY29uZmlnKTtcbn1cbnZhciBQb3J0UG9vbCA9IGNsYXNzIHtcblx0X2RlZmF1bHRDb25maWc7XG5cdF9jaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9tYWluUG9ydCA9IG51bGw7XG5cdF9zdWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0Y29uc3RydWN0b3IoX2RlZmF1bHRDb25maWcgPSB7fSkge1xuXHRcdHRoaXMuX2RlZmF1bHRDb25maWcgPSBfZGVmYXVsdENvbmZpZztcblx0fVxuXHRjcmVhdGUoY2hhbm5lbE5hbWUsIGNvbmZpZykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUNoYW5uZWxQYWlyKGNoYW5uZWxOYW1lLCB7XG5cdFx0XHQuLi50aGlzLl9kZWZhdWx0Q29uZmlnLFxuXHRcdFx0Li4uY29uZmlnXG5cdFx0fSk7XG5cdFx0cmVzdWx0LmxvY2FsLnN1YnNjcmliZSh7IG5leHQ6IChtc2cpID0+IHtcblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/Lihtc2cpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHR9XG5cdFx0fSB9KTtcblx0XHR0aGlzLl9jaGFubmVscy5zZXQoY2hhbm5lbE5hbWUsIHJlc3VsdC5sb2NhbCk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXHRhZGQoY2hhbm5lbE5hbWUsIHBvcnQsIGNvbmZpZykge1xuXHRcdGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBQb3J0VHJhbnNwb3J0KHBvcnQsIGNoYW5uZWxOYW1lLCB7XG5cdFx0XHQuLi50aGlzLl9kZWZhdWx0Q29uZmlnLFxuXHRcdFx0Li4uY29uZmlnXG5cdFx0fSk7XG5cdFx0dHJhbnNwb3J0LnN1YnNjcmliZSh7IG5leHQ6IChtc2cpID0+IHtcblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/Lihtc2cpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHR9XG5cdFx0fSB9KTtcblx0XHR0aGlzLl9jaGFubmVscy5zZXQoY2hhbm5lbE5hbWUsIHRyYW5zcG9ydCk7XG5cdFx0cmV0dXJuIHRyYW5zcG9ydDtcblx0fVxuXHRnZXQoY2hhbm5lbE5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbHMuZ2V0KGNoYW5uZWxOYW1lKTtcblx0fVxuXHRzZW5kKGNoYW5uZWxOYW1lLCBtc2csIHRyYW5zZmVyKSB7XG5cdFx0dGhpcy5fY2hhbm5lbHMuZ2V0KGNoYW5uZWxOYW1lKT8uc2VuZChtc2csIHRyYW5zZmVyKTtcblx0fVxuXHRicm9hZGNhc3QobXNnLCB0cmFuc2Zlcikge1xuXHRcdGZvciAoY29uc3QgdHJhbnNwb3J0IG9mIHRoaXMuX2NoYW5uZWxzLnZhbHVlcygpKSB0cmFuc3BvcnQuc2VuZChtc2csIHRyYW5zZmVyKTtcblx0fVxuXHRyZXF1ZXN0KGNoYW5uZWxOYW1lLCBtc2cpIHtcblx0XHRjb25zdCBjaGFubmVsID0gdGhpcy5fY2hhbm5lbHMuZ2V0KGNoYW5uZWxOYW1lKTtcblx0XHRpZiAoIWNoYW5uZWwpIHJldHVybiBQcm9taXNlLnJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBDaGFubmVsICR7Y2hhbm5lbE5hbWV9IG5vdCBmb3VuZGApKTtcblx0XHRyZXR1cm4gY2hhbm5lbC5yZXF1ZXN0KG1zZyk7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdHJlbW92ZShjaGFubmVsTmFtZSkge1xuXHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLl9jaGFubmVscy5nZXQoY2hhbm5lbE5hbWUpO1xuXHRcdGlmIChjaGFubmVsKSB7XG5cdFx0XHRjaGFubmVsLmNsb3NlKCk7XG5cdFx0XHR0aGlzLl9jaGFubmVscy5kZWxldGUoY2hhbm5lbE5hbWUpO1xuXHRcdH1cblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHR0aGlzLl9zdWJzLmNsZWFyKCk7XG5cdFx0Zm9yIChjb25zdCBjaGFubmVsIG9mIHRoaXMuX2NoYW5uZWxzLnZhbHVlcygpKSBjaGFubmVsLmNsb3NlKCk7XG5cdFx0dGhpcy5fY2hhbm5lbHMuY2xlYXIoKTtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWVzKCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMuX2NoYW5uZWxzLmtleXMoKSk7XG5cdH1cblx0Z2V0IHNpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxzLnNpemU7XG5cdH1cbn07XG52YXIgV2luZG93UG9ydENvbm5lY3RvciA9IGNsYXNzIHtcblx0X3RhcmdldDtcblx0X2NoYW5uZWxOYW1lO1xuXHRfY29uZmlnO1xuXHRfdHJhbnNwb3J0ID0gbnVsbDtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9oYW5kc2hha2VDb21wbGV0ZSA9IGZhbHNlO1xuXHRjb25zdHJ1Y3RvcihfdGFyZ2V0LCBfY2hhbm5lbE5hbWUsIF9jb25maWcgPSB7fSkge1xuXHRcdHRoaXMuX3RhcmdldCA9IF90YXJnZXQ7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fY29uZmlnID0gX2NvbmZpZztcblx0fVxuXHRhc3luYyBjb25uZWN0KCkge1xuXHRcdGlmICh0aGlzLl90cmFuc3BvcnQgJiYgdGhpcy5faGFuZHNoYWtlQ29tcGxldGUpIHJldHVybiB0aGlzLl90cmFuc3BvcnQ7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImNvbm5lY3RpbmdcIik7XG5cdFx0Y29uc3QgeyBsb2NhbCwgcmVtb3RlIH0gPSBjcmVhdGVDaGFubmVsUGFpcih0aGlzLl9jaGFubmVsTmFtZSwgdGhpcy5fY29uZmlnKTtcblx0XHR0aGlzLl90YXJnZXQucG9zdE1lc3NhZ2Uoe1xuXHRcdFx0dHlwZTogXCJwb3J0LWNvbm5lY3RcIixcblx0XHRcdGNoYW5uZWxOYW1lOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHBvcnRJZDogbG9jYWwucG9ydElkXG5cdFx0fSwgdGhpcy5fY29uZmlnLnRhcmdldE9yaWdpbiA/PyBcIipcIiwgW3JlbW90ZV0pO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiSGFuZHNoYWtlIHRpbWVvdXRcIikpO1xuXHRcdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiZXJyb3JcIik7XG5cdFx0XHR9LCB0aGlzLl9jb25maWcuaGFuZHNoYWtlVGltZW91dCA/PyAxZTQpO1xuXHRcdFx0Y29uc3Qgc3ViID0gbG9jYWwuc3Vic2NyaWJlKHsgbmV4dDogKG1zZykgPT4ge1xuXHRcdFx0XHRpZiAobXNnLnR5cGUgPT09IFwic2lnbmFsXCIgJiYgbXNnLnBheWxvYWQ/LmFjdGlvbiA9PT0gXCJoYW5kc2hha2UtYWNrXCIpIHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0dGhpcy5faGFuZHNoYWtlQ29tcGxldGUgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuX3RyYW5zcG9ydCA9IGxvY2FsO1xuXHRcdFx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjb25uZWN0ZWRcIik7XG5cdFx0XHRcdFx0c3ViLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHRcdFx0cmVzb2x2ZShsb2NhbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gfSk7XG5cdFx0fSk7XG5cdH1cblx0c3RhdGljIGxpc3RlbihjaGFubmVsTmFtZSwgaGFuZGxlciwgY29uZmlnKSB7XG5cdFx0Y29uc3QgbXNnSGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHRpZiAoZS5kYXRhPy50eXBlICE9PSBcInBvcnQtY29ubmVjdFwiIHx8IGUuZGF0YT8uY2hhbm5lbE5hbWUgIT09IGNoYW5uZWxOYW1lKSByZXR1cm47XG5cdFx0XHRpZiAoIWUucG9ydHNbMF0pIHJldHVybjtcblx0XHRcdGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBQb3J0VHJhbnNwb3J0KGUucG9ydHNbMF0sIGNoYW5uZWxOYW1lLCBjb25maWcpO1xuXHRcdFx0dHJhbnNwb3J0LnNlbmQoe1xuXHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdGNoYW5uZWw6IGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRzZW5kZXI6IHRyYW5zcG9ydC5wb3J0SWQsXG5cdFx0XHRcdHR5cGU6IFwic2lnbmFsXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHsgYWN0aW9uOiBcImhhbmRzaGFrZS1hY2tcIiB9XG5cdFx0XHR9KTtcblx0XHRcdGhhbmRsZXIodHJhbnNwb3J0KTtcblx0XHR9O1xuXHRcdGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0cmV0dXJuICgpID0+IGdsb2JhbFRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdH1cblx0ZGlzY29ubmVjdCgpIHtcblx0XHR0aGlzLl90cmFuc3BvcnQ/LmNsb3NlKCk7XG5cdFx0dGhpcy5fdHJhbnNwb3J0ID0gbnVsbDtcblx0XHR0aGlzLl9oYW5kc2hha2VDb21wbGV0ZSA9IGZhbHNlO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJkaXNjb25uZWN0ZWRcIik7XG5cdH1cblx0Z2V0IGlzQ29ubmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzLl9oYW5kc2hha2VDb21wbGV0ZTtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCB0cmFuc3BvcnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3RyYW5zcG9ydDtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVBvcnRQcm94eSh0cmFuc3BvcnQsIHRhcmdldFBhdGggPSBbXSkge1xuXHRyZXR1cm4gY3JlYXRlU2VuZGVyUHJveHkoe1xuXHRcdHJlcXVlc3Q6IChtc2cpID0+IHRyYW5zcG9ydC5yZXF1ZXN0KG1zZyksXG5cdFx0Y2hhbm5lbE5hbWU6IHRyYW5zcG9ydC5jaGFubmVsTmFtZSxcblx0XHRzZW5kZXJJZDogdHJhbnNwb3J0LnBvcnRJZFxuXHR9LCB0YXJnZXRQYXRoKTtcbn1cbmZ1bmN0aW9uIGV4cG9zZU92ZXJQb3J0KHRyYW5zcG9ydCwgdGFyZ2V0KSB7XG5cdGNvbnN0IGhhbmRsZXIgPSBjcmVhdGVFeHBvc2VIYW5kbGVyKHRhcmdldCk7XG5cdHJldHVybiB0cmFuc3BvcnQuc3Vic2NyaWJlKHsgbmV4dDogYXN5bmMgKG1zZykgPT4ge1xuXHRcdGlmIChtc2cudHlwZSAhPT0gXCJyZXF1ZXN0XCIgfHwgIW1zZy5wYXlsb2FkPy5wYXRoKSByZXR1cm47XG5cdFx0Y29uc3QgeyBhY3Rpb24sIHBhdGgsIGFyZ3MgfSA9IG1zZy5wYXlsb2FkO1xuXHRcdGxldCByZXN1bHQ7XG5cdFx0bGV0IGVycm9yO1xuXHRcdHRyeSB7XG5cdFx0XHRyZXN1bHQgPSBhd2FpdCBoYW5kbGVyKGFjdGlvbiwgcGF0aCwgYXJncyA/PyBbXSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0ZXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG5cdFx0fVxuXHRcdHRyYW5zcG9ydC5zZW5kKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IG1zZy5zZW5kZXIsXG5cdFx0XHRzZW5kZXI6IHRyYW5zcG9ydC5wb3J0SWQsXG5cdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRyZXFJZDogbXNnLnJlcUlkLFxuXHRcdFx0cGF5bG9hZDogZXJyb3IgPyB7IGVycm9yIH0gOiB7IHJlc3VsdCB9XG5cdFx0fSk7XG5cdH0gfSk7XG59XG52YXIgUG9ydFRyYW5zcG9ydEZhY3RvcnkgPSB7XG5cdGNyZWF0ZTogKHBvcnQsIG5hbWUsIGNvbmZpZykgPT4gbmV3IFBvcnRUcmFuc3BvcnQocG9ydCwgbmFtZSwgY29uZmlnKSxcblx0Y3JlYXRlUGFpcjogKG5hbWUsIGNvbmZpZykgPT4gY3JlYXRlQ2hhbm5lbFBhaXIobmFtZSwgY29uZmlnKSxcblx0Y3JlYXRlUG9vbDogKGNvbmZpZykgPT4gbmV3IFBvcnRQb29sKGNvbmZpZyksXG5cdGNyZWF0ZVdpbmRvd0Nvbm5lY3RvcjogKHRhcmdldCwgbmFtZSwgY29uZmlnKSA9PiBuZXcgV2luZG93UG9ydENvbm5lY3Rvcih0YXJnZXQsIG5hbWUsIGNvbmZpZyksXG5cdGxpc3RlbjogV2luZG93UG9ydENvbm5lY3Rvci5saXN0ZW4sXG5cdGNyZWF0ZVByb3h5OiBjcmVhdGVQb3J0UHJveHksXG5cdGV4cG9zZTogZXhwb3NlT3ZlclBvcnRcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3N0b3JhZ2UvVHJhbnNmZXJhYmxlU3RvcmFnZS50c1xudmFyIFRyYW5zZmVyYWJsZVN0b3JhZ2UgPSBjbGFzcyB7XG5cdF9kYiA9IG51bGw7XG5cdF9jb25maWc7XG5cdF9jaGFuZ2VzID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRfY2xlYW51cFRpbWVyID0gbnVsbDtcblx0Y29uc3RydWN0b3IoY29uZmlnKSB7XG5cdFx0dGhpcy5fY29uZmlnID0ge1xuXHRcdFx0c3RvcmVOYW1lOiBcInRyYW5zZmVyYWJsZVwiLFxuXHRcdFx0dmVyc2lvbjogMSxcblx0XHRcdGluZGV4ZXM6IFtdLFxuXHRcdFx0ZW5hYmxlQ2hhbmdlVHJhY2tpbmc6IHRydWUsXG5cdFx0XHRhdXRvQ2xlYW51cEV4cGlyZWQ6IHRydWUsXG5cdFx0XHRjbGVhbnVwSW50ZXJ2YWw6IDZlNCxcblx0XHRcdC4uLmNvbmZpZ1xuXHRcdH07XG5cdH1cblx0YXN5bmMgb3BlbigpIHtcblx0XHRpZiAodGhpcy5fZGIpIHJldHVybjtcblx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwib3BlbmluZ1wiKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKHRoaXMuX2NvbmZpZy5kYk5hbWUsIHRoaXMuX2NvbmZpZy52ZXJzaW9uKTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3RhdGUubmV4dChcImVycm9yXCIpO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2U6ICR7cmVxdWVzdC5lcnJvcj8ubWVzc2FnZX1gKSk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2RiID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJvcGVuXCIpO1xuXHRcdFx0XHRpZiAodGhpcy5fY29uZmlnLmF1dG9DbGVhbnVwRXhwaXJlZCkgdGhpcy5fc3RhcnRDbGVhbnVwVGltZXIoKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcblx0XHRcdFx0aWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLl9jb25maWcuc3RvcmVOYW1lLCB7IGtleVBhdGg6IFwiaWRcIiB9KTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcImNyZWF0ZWRBdFwiLCBcImNyZWF0ZWRBdFwiKTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcInVwZGF0ZWRBdFwiLCBcInVwZGF0ZWRBdFwiKTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcImV4cGlyZXNBdFwiLCBcImV4cGlyZXNBdFwiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGlkeCBvZiB0aGlzLl9jb25maWcuaW5kZXhlcykgc3RvcmUuY3JlYXRlSW5kZXgoaWR4Lm5hbWUsIGlkeC5rZXlQYXRoLCB7IHVuaXF1ZTogaWR4LnVuaXF1ZSA/PyBmYWxzZSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHRpZiAodGhpcy5fY2xlYW51cFRpbWVyKSB7XG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMuX2NsZWFudXBUaW1lcik7XG5cdFx0XHR0aGlzLl9jbGVhbnVwVGltZXIgPSBudWxsO1xuXHRcdH1cblx0XHR0aGlzLl9kYj8uY2xvc2UoKTtcblx0XHR0aGlzLl9kYiA9IG51bGw7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImNsb3NlZFwiKTtcblx0fVxuXHRhc3luYyBwdXQoaWQsIGRhdGEsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGF3YWl0IHRoaXMuX2Vuc3VyZU9wZW4oKTtcblx0XHRsZXQgYnVmZmVycyA9IG9wdGlvbnMuYnVmZmVycyA/PyBbXTtcblx0XHRpZiAob3B0aW9ucy50cmFuc2ZlciAmJiBidWZmZXJzLmxlbmd0aCA+IDApIGJ1ZmZlcnMgPSBidWZmZXJzLm1hcCgoYnVmKSA9PiB7XG5cdFx0XHRpZiAoXCJ0cmFuc2ZlclwiIGluIGJ1ZiAmJiB0eXBlb2YgYnVmLnRyYW5zZmVyID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBidWYudHJhbnNmZXIoKTtcblx0XHRcdHJldHVybiBidWY7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMuZ2V0KGlkKTtcblx0XHRjb25zdCByZWNvcmQgPSB7XG5cdFx0XHRpZCxcblx0XHRcdGRhdGEsXG5cdFx0XHRidWZmZXJzOiBidWZmZXJzLmxlbmd0aCA+IDAgPyBidWZmZXJzIDogdm9pZCAwLFxuXHRcdFx0bWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG5cdFx0XHRjcmVhdGVkQXQ6IGV4aXN0aW5nPy5jcmVhdGVkQXQgPz8gbm93LFxuXHRcdFx0dXBkYXRlZEF0OiBub3csXG5cdFx0XHRleHBpcmVzQXQ6IG9wdGlvbnMuZXhwaXJlc0luID8gbm93ICsgb3B0aW9ucy5leHBpcmVzSW4gOiB2b2lkIDBcblx0XHR9O1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gdGhpcy5fZGIudHJhbnNhY3Rpb24odGhpcy5fY29uZmlnLnN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUodGhpcy5fY29uZmlnLnN0b3JlTmFtZSkucHV0KHJlY29yZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuX2NvbmZpZy5lbmFibGVDaGFuZ2VUcmFja2luZykgdGhpcy5fY2hhbmdlcy5uZXh0KHtcblx0XHRcdFx0XHR0eXBlOiBleGlzdGluZyA/IFwicHV0XCIgOiBcImFkZFwiLFxuXHRcdFx0XHRcdGtleTogaWQsXG5cdFx0XHRcdFx0cmVjb3JkLFxuXHRcdFx0XHRcdHByZXZpb3VzUmVjb3JkOiBleGlzdGluZyA/PyB2b2lkIDAsXG5cdFx0XHRcdFx0dGltZXN0YW1wOiBub3dcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJlc29sdmUocmVjb3JkKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgUHV0IGZhaWxlZDogJHtyZXF1ZXN0LmVycm9yPy5tZXNzYWdlfWApKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBwdXRCdWZmZXIoaWQsIGJ1ZmZlciwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0cmV0dXJuIHRoaXMucHV0KGlkLCBidWZmZXIsIHtcblx0XHRcdGJ1ZmZlcnM6IFtidWZmZXJdLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIHB1dFR5cGVkQXJyYXkoaWQsIGFycmF5LCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCBkYXRhID0ge1xuXHRcdFx0dHlwZTogYXJyYXkuY29uc3RydWN0b3IubmFtZSxcblx0XHRcdGRhdGE6IEFycmF5LmZyb20oYXJyYXkpXG5cdFx0fTtcblx0XHRyZXR1cm4gdGhpcy5wdXQoaWQsIGRhdGEsIHtcblx0XHRcdGJ1ZmZlcnM6IG9wdGlvbnMudHJhbnNmZXIgPyBbYXJyYXkuYnVmZmVyXSA6IHZvaWQgMCxcblx0XHRcdC4uLm9wdGlvbnNcblx0XHR9KTtcblx0fVxuXHRhc3luYyBnZXQoaWQpIHtcblx0XHRhd2FpdCB0aGlzLl9lbnN1cmVPcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9kYi50cmFuc2FjdGlvbih0aGlzLl9jb25maWcuc3RvcmVOYW1lLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUpLmdldChpZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChyZWNvcmQ/LmV4cGlyZXNBdCAmJiByZWNvcmQuZXhwaXJlc0F0IDwgRGF0ZS5ub3coKSkge1xuXHRcdFx0XHRcdHRoaXMuZGVsZXRlKGlkKTtcblx0XHRcdFx0XHRyZXNvbHZlKG51bGwpO1xuXHRcdFx0XHR9IGVsc2UgcmVzb2x2ZShyZWNvcmQgPz8gbnVsbCk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYEdldCBmYWlsZWQ6ICR7cmVxdWVzdC5lcnJvcj8ubWVzc2FnZX1gKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgZ2V0QnVmZmVyKGlkLCB0cmFuc2Zlcikge1xuXHRcdGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuZ2V0KGlkKTtcblx0XHRpZiAoIXJlY29yZCkgcmV0dXJuIG51bGw7XG5cdFx0bGV0IGJ1ZmZlciA9IHJlY29yZC5idWZmZXJzPy5bMF0gPz8gKHJlY29yZC5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyByZWNvcmQuZGF0YSA6IG51bGwpO1xuXHRcdGlmIChidWZmZXIgJiYgdHJhbnNmZXIpIHtcblx0XHRcdGlmIChcInRyYW5zZmVyXCIgaW4gYnVmZmVyICYmIHR5cGVvZiBidWZmZXIudHJhbnNmZXIgPT09IFwiZnVuY3Rpb25cIikgYnVmZmVyID0gYnVmZmVyLnRyYW5zZmVyKCk7XG5cdFx0fVxuXHRcdHJldHVybiBidWZmZXI7XG5cdH1cblx0YXN5bmMgZ2V0VHlwZWRBcnJheShpZCkge1xuXHRcdGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuZ2V0KGlkKTtcblx0XHRpZiAoIXJlY29yZCB8fCAhcmVjb3JkLmRhdGEgfHwgdHlwZW9mIHJlY29yZC5kYXRhICE9PSBcIm9iamVjdFwiKSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCB7IHR5cGUsIGRhdGEgfSA9IHJlY29yZC5kYXRhO1xuXHRcdGNvbnN0IFR5cGVkQXJyYXlDdG9yID0gZ2xvYmFsVGhpc1t0eXBlXTtcblx0XHRpZiAoIVR5cGVkQXJyYXlDdG9yKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gbmV3IFR5cGVkQXJyYXlDdG9yKGRhdGEpO1xuXHR9XG5cdGFzeW5jIGRlbGV0ZShpZCkge1xuXHRcdGF3YWl0IHRoaXMuX2Vuc3VyZU9wZW4oKTtcblx0XHRjb25zdCBleGlzdGluZyA9IHRoaXMuX2NvbmZpZy5lbmFibGVDaGFuZ2VUcmFja2luZyA/IGF3YWl0IHRoaXMuZ2V0KGlkKSA6IG51bGw7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9kYi50cmFuc2FjdGlvbih0aGlzLl9jb25maWcuc3RvcmVOYW1lLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZSh0aGlzLl9jb25maWcuc3RvcmVOYW1lKS5kZWxldGUoaWQpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLl9jb25maWcuZW5hYmxlQ2hhbmdlVHJhY2tpbmcgJiYgZXhpc3RpbmcpIHRoaXMuX2NoYW5nZXMubmV4dCh7XG5cdFx0XHRcdFx0dHlwZTogXCJkZWxldGVcIixcblx0XHRcdFx0XHRrZXk6IGlkLFxuXHRcdFx0XHRcdHByZXZpb3VzUmVjb3JkOiBleGlzdGluZyxcblx0XHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYERlbGV0ZSBmYWlsZWQ6ICR7cmVxdWVzdC5lcnJvcj8ubWVzc2FnZX1gKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgcXVlcnkocXVlcnkgPSB7fSkge1xuXHRcdGF3YWl0IHRoaXMuX2Vuc3VyZU9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSB0aGlzLl9kYi50cmFuc2FjdGlvbih0aGlzLl9jb25maWcuc3RvcmVOYW1lLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUpO1xuXHRcdFx0Y29uc3Qgc291cmNlID0gcXVlcnkuaW5kZXggPyBzdG9yZS5pbmRleChxdWVyeS5pbmRleCkgOiBzdG9yZTtcblx0XHRcdGNvbnN0IHJlc3VsdHMgPSBbXTtcblx0XHRcdGxldCBza2lwcGVkID0gMDtcblx0XHRcdGNvbnN0IG9mZnNldCA9IHF1ZXJ5Lm9mZnNldCA/PyAwO1xuXHRcdFx0Y29uc3QgbGltaXQgPSBxdWVyeS5saW1pdCA/PyBJbmZpbml0eTtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBzb3VyY2Uub3BlbkN1cnNvcihxdWVyeS5yYW5nZSwgcXVlcnkuZGlyZWN0aW9uKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjdXJzb3IgPSByZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0aWYgKCFjdXJzb3IgfHwgcmVzdWx0cy5sZW5ndGggPj0gbGltaXQpIHtcblx0XHRcdFx0XHRyZXNvbHZlKHJlc3VsdHMpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZWNvcmQgPSBjdXJzb3IudmFsdWU7XG5cdFx0XHRcdGlmIChyZWNvcmQuZXhwaXJlc0F0ICYmIHJlY29yZC5leHBpcmVzQXQgPCBEYXRlLm5vdygpKSB7XG5cdFx0XHRcdFx0Y3Vyc29yLmNvbnRpbnVlKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChxdWVyeS5maWx0ZXIgJiYgIXF1ZXJ5LmZpbHRlcihyZWNvcmQpKSB7XG5cdFx0XHRcdFx0Y3Vyc29yLmNvbnRpbnVlKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChza2lwcGVkIDwgb2Zmc2V0KSB7XG5cdFx0XHRcdFx0c2tpcHBlZCsrO1xuXHRcdFx0XHRcdGN1cnNvci5jb250aW51ZSgpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXN1bHRzLnB1c2gocmVjb3JkKTtcblx0XHRcdFx0Y3Vyc29yLmNvbnRpbnVlKCk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYFF1ZXJ5IGZhaWxlZDogJHtyZXF1ZXN0LmVycm9yPy5tZXNzYWdlfWApKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBiYXRjaChvcGVyYXRpb25zKSB7XG5cdFx0YXdhaXQgdGhpcy5fZW5zdXJlT3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IHRoaXMuX2RiLnRyYW5zYWN0aW9uKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUsIFwicmVhZHdyaXRlXCIpO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSB0eC5vYmplY3RTdG9yZSh0aGlzLl9jb25maWcuc3RvcmVOYW1lKTtcblx0XHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0XHRmb3IgKGNvbnN0IG9wIG9mIG9wZXJhdGlvbnMpIGlmIChvcC50eXBlID09PSBcInB1dFwiKSB7XG5cdFx0XHRcdGNvbnN0IHJlY29yZCA9IHtcblx0XHRcdFx0XHRpZDogb3AuaWQsXG5cdFx0XHRcdFx0ZGF0YTogb3AuZGF0YSxcblx0XHRcdFx0XHRtZXRhZGF0YTogb3Aub3B0aW9ucz8ubWV0YWRhdGEsXG5cdFx0XHRcdFx0Y3JlYXRlZEF0OiBub3csXG5cdFx0XHRcdFx0dXBkYXRlZEF0OiBub3csXG5cdFx0XHRcdFx0ZXhwaXJlc0F0OiBvcC5vcHRpb25zPy5leHBpcmVzSW4gPyBub3cgKyBvcC5vcHRpb25zLmV4cGlyZXNJbiA6IHZvaWQgMFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRzdG9yZS5wdXQocmVjb3JkKTtcblx0XHRcdH0gZWxzZSBpZiAob3AudHlwZSA9PT0gXCJkZWxldGVcIikgc3RvcmUuZGVsZXRlKG9wLmlkKTtcblx0XHRcdHR4Lm9uY29tcGxldGUgPSAoKSA9PiByZXNvbHZlKCk7XG5cdFx0XHR0eC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYEJhdGNoIGZhaWxlZDogJHt0eC5lcnJvcj8ubWVzc2FnZX1gKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgY2xlYXIoKSB7XG5cdFx0YXdhaXQgdGhpcy5fZW5zdXJlT3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gdGhpcy5fZGIudHJhbnNhY3Rpb24odGhpcy5fY29uZmlnLnN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUodGhpcy5fY29uZmlnLnN0b3JlTmFtZSkuY2xlYXIoKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5fY29uZmlnLmVuYWJsZUNoYW5nZVRyYWNraW5nKSB0aGlzLl9jaGFuZ2VzLm5leHQoe1xuXHRcdFx0XHRcdHR5cGU6IFwiY2xlYXJcIixcblx0XHRcdFx0XHRrZXk6IFwiKlwiLFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBDbGVhciBmYWlsZWQ6ICR7cmVxdWVzdC5lcnJvcj8ubWVzc2FnZX1gKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgY291bnQocXVlcnkpIHtcblx0XHRhd2FpdCB0aGlzLl9lbnN1cmVPcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHN0b3JlID0gdGhpcy5fZGIudHJhbnNhY3Rpb24odGhpcy5fY29uZmlnLnN0b3JlTmFtZSwgXCJyZWFkb25seVwiKS5vYmplY3RTdG9yZSh0aGlzLl9jb25maWcuc3RvcmVOYW1lKTtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSAocXVlcnk/LmluZGV4ID8gc3RvcmUuaW5kZXgocXVlcnkuaW5kZXgpIDogc3RvcmUpLmNvdW50KHF1ZXJ5Py5yYW5nZSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYENvdW50IGZhaWxlZDogJHtyZXF1ZXN0LmVycm9yPy5tZXNzYWdlfWApKTtcblx0XHR9KTtcblx0fVxuXHRvbkNoYW5nZXMoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9jaGFuZ2VzLnN1YnNjcmliZSh7IG5leHQ6IGhhbmRsZXIgfSk7XG5cdH1cblx0b25TdGF0ZShoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlLnN1YnNjcmliZSh7IG5leHQ6IGhhbmRsZXIgfSk7XG5cdH1cblx0YXN5bmMgY2xlYW51cEV4cGlyZWQoKSB7XG5cdFx0YXdhaXQgdGhpcy5fZW5zdXJlT3BlbigpO1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0Y29uc3QgZXhwaXJlZCA9IGF3YWl0IHRoaXMucXVlcnkoe1xuXHRcdFx0aW5kZXg6IFwiZXhwaXJlc0F0XCIsXG5cdFx0XHRyYW5nZTogSURCS2V5UmFuZ2UudXBwZXJCb3VuZChub3cpXG5cdFx0fSk7XG5cdFx0Zm9yIChjb25zdCByZWNvcmQgb2YgZXhwaXJlZCkgYXdhaXQgdGhpcy5kZWxldGUocmVjb3JkLmlkKTtcblx0XHRyZXR1cm4gZXhwaXJlZC5sZW5ndGg7XG5cdH1cblx0YXN5bmMgX2Vuc3VyZU9wZW4oKSB7XG5cdFx0aWYgKCF0aGlzLl9kYikgYXdhaXQgdGhpcy5vcGVuKCk7XG5cdH1cblx0X3N0YXJ0Q2xlYW51cFRpbWVyKCkge1xuXHRcdHRoaXMuX2NsZWFudXBUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdHRoaXMuY2xlYW51cEV4cGlyZWQoKS5jYXRjaChjb25zb2xlLmVycm9yKTtcblx0XHR9LCB0aGlzLl9jb25maWcuY2xlYW51cEludGVydmFsKTtcblx0fVxuXHRnZXQgaXNPcGVuKCkge1xuXHRcdHJldHVybiB0aGlzLl9kYiAhPT0gbnVsbDtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCBjaGFuZ2VzKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFuZ2VzO1xuXHR9XG59O1xudmFyIE1lc3NhZ2VRdWV1ZVN0b3JhZ2UgPSBjbGFzcyBleHRlbmRzIFRyYW5zZmVyYWJsZVN0b3JhZ2Uge1xuXHRjb25zdHJ1Y3RvcihkYk5hbWUgPSBcInVuaWZvcm0tbWVzc2FnZS1xdWV1ZVwiKSB7XG5cdFx0c3VwZXIoe1xuXHRcdFx0ZGJOYW1lLFxuXHRcdFx0c3RvcmVOYW1lOiBcIm1lc3NhZ2VzXCIsXG5cdFx0XHRpbmRleGVzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcImNoYW5uZWxcIixcblx0XHRcdFx0XHRrZXlQYXRoOiBcImNoYW5uZWxcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogXCJzdGF0dXNcIixcblx0XHRcdFx0XHRrZXlQYXRoOiBcInN0YXR1c1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcInByaW9yaXR5XCIsXG5cdFx0XHRcdFx0a2V5UGF0aDogXCJwcmlvcml0eVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcInNjaGVkdWxlZEZvclwiLFxuXHRcdFx0XHRcdGtleVBhdGg6IFwic2NoZWR1bGVkRm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFwiY2hhbm5lbC1zdGF0dXNcIixcblx0XHRcdFx0XHRrZXlQYXRoOiBbXCJjaGFubmVsXCIsIFwic3RhdHVzXCJdXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9KTtcblx0fVxuXHRhc3luYyBlbnF1ZXVlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGNvbnN0IGlkID0gVVVJRHY0KCk7XG5cdFx0Y29uc3QgcXVldWVkTWVzc2FnZSA9IHtcblx0XHRcdGlkLFxuXHRcdFx0Y2hhbm5lbDogbWVzc2FnZS5jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBtZXNzYWdlLnNlbmRlcixcblx0XHRcdHR5cGU6IG1lc3NhZ2UudHlwZSxcblx0XHRcdHBheWxvYWQ6IG1lc3NhZ2UucGF5bG9hZCxcblx0XHRcdHByaW9yaXR5OiBtZXNzYWdlLnByaW9yaXR5ID8/IDAsXG5cdFx0XHRhdHRlbXB0czogMCxcblx0XHRcdG1heEF0dGVtcHRzOiBtZXNzYWdlLm1heEF0dGVtcHRzID8/IDMsXG5cdFx0XHRzdGF0dXM6IFwicGVuZGluZ1wiLFxuXHRcdFx0Y3JlYXRlZEF0OiBub3csXG5cdFx0XHRzY2hlZHVsZWRGb3I6IG5vdyArIChtZXNzYWdlLmRlbGF5ID8/IDApLFxuXHRcdFx0ZXhwaXJlc0F0OiBtZXNzYWdlLmV4cGlyZXNJbiA/IG5vdyArIG1lc3NhZ2UuZXhwaXJlc0luIDogdm9pZCAwXG5cdFx0fTtcblx0XHRhd2FpdCB0aGlzLnB1dChpZCwgcXVldWVkTWVzc2FnZSk7XG5cdFx0cmV0dXJuIHF1ZXVlZE1lc3NhZ2U7XG5cdH1cblx0YXN5bmMgZGVxdWV1ZShjaGFubmVsKSB7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMucXVlcnkoe1xuXHRcdFx0ZmlsdGVyOiAocikgPT4gci5kYXRhLmNoYW5uZWwgPT09IGNoYW5uZWwgJiYgci5kYXRhLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCIgJiYgci5kYXRhLnNjaGVkdWxlZEZvciA8PSBub3cgJiYgKCFyLmRhdGEuZXhwaXJlc0F0IHx8IHIuZGF0YS5leHBpcmVzQXQgPiBub3cpLFxuXHRcdFx0bGltaXQ6IDFcblx0XHR9KTtcblx0XHRpZiAobWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNbMF0uZGF0YTtcblx0XHRtZXNzYWdlLnN0YXR1cyA9IFwicHJvY2Vzc2luZ1wiO1xuXHRcdG1lc3NhZ2UuYXR0ZW1wdHMrKztcblx0XHRtZXNzYWdlLmxhc3RBdHRlbXB0QXQgPSBub3c7XG5cdFx0YXdhaXQgdGhpcy5wdXQobWVzc2FnZS5pZCwgbWVzc2FnZSk7XG5cdFx0cmV0dXJuIG1lc3NhZ2U7XG5cdH1cblx0YXN5bmMgY29tcGxldGUoaWQpIHtcblx0XHRjb25zdCByZWNvcmQgPSBhd2FpdCB0aGlzLmdldChpZCk7XG5cdFx0aWYgKCFyZWNvcmQpIHJldHVybjtcblx0XHRyZWNvcmQuZGF0YS5zdGF0dXMgPSBcImNvbXBsZXRlZFwiO1xuXHRcdGF3YWl0IHRoaXMucHV0KGlkLCByZWNvcmQuZGF0YSk7XG5cdH1cblx0YXN5bmMgZmFpbChpZCwgZXJyb3IpIHtcblx0XHRjb25zdCByZWNvcmQgPSBhd2FpdCB0aGlzLmdldChpZCk7XG5cdFx0aWYgKCFyZWNvcmQpIHJldHVybjtcblx0XHRpZiAocmVjb3JkLmRhdGEuYXR0ZW1wdHMgPj0gcmVjb3JkLmRhdGEubWF4QXR0ZW1wdHMpIHJlY29yZC5kYXRhLnN0YXR1cyA9IFwiZmFpbGVkXCI7XG5cdFx0ZWxzZSByZWNvcmQuZGF0YS5zdGF0dXMgPSBcInBlbmRpbmdcIjtcblx0XHRyZWNvcmQuZGF0YS5lcnJvciA9IGVycm9yO1xuXHRcdGF3YWl0IHRoaXMucHV0KGlkLCByZWNvcmQuZGF0YSk7XG5cdH1cblx0YXN5bmMgZ2V0UGVuZGluZ0NvdW50KGNoYW5uZWwpIHtcblx0XHRyZXR1cm4gKGF3YWl0IHRoaXMucXVlcnkoeyBmaWx0ZXI6IChyKSA9PiByLmRhdGEuY2hhbm5lbCA9PT0gY2hhbm5lbCAmJiByLmRhdGEuc3RhdHVzID09PSBcInBlbmRpbmdcIiB9KSkubGVuZ3RoO1xuXHR9XG59O1xudmFyIFRyYW5zZmVyYWJsZVN0b3JhZ2VGYWN0b3J5ID0ge1xuXHRjcmVhdGU6IChjb25maWcpID0+IG5ldyBUcmFuc2ZlcmFibGVTdG9yYWdlKGNvbmZpZyksXG5cdGNyZWF0ZU1lc3NhZ2VRdWV1ZTogKGRiTmFtZSkgPT4gbmV3IE1lc3NhZ2VRdWV1ZVN0b3JhZ2UoZGJOYW1lKVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdHJhbnNwb3J0L1NlcnZpY2VXb3JrZXJIb3N0LnRzXG52YXIgU2VydmljZVdvcmtlckhvc3QgPSBjbGFzcyB7XG5cdF9jb25uZWN0aW9uO1xuXHRfc3RvcmFnZTtcblx0X2NsaWVudHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfY2hhbm5lbFN1YnNjcmliZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3N1YnNjcmlwdGlvbnMgPSBbXTtcblx0X2NsZWFudXBJbnRlcnZhbCA9IG51bGw7XG5cdF9jbGllbnRFdmVudHMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0X2NvbmZpZztcblx0Y29uc3RydWN0b3IoY29uZmlnKSB7XG5cdFx0dGhpcy5fY29uZmlnID0ge1xuXHRcdFx0ZW5hYmxlT2ZmbGluZVF1ZXVlOiB0cnVlLFxuXHRcdFx0bWF4T2ZmbGluZVF1ZXVlU2l6ZTogMTAwLFxuXHRcdFx0bWVzc2FnZVRUTDogODY0ZTUsXG5cdFx0XHRhdXRvQ2xlYW51cDogdHJ1ZSxcblx0XHRcdGNsZWFudXBJbnRlcnZhbDogNmU0LFxuXHRcdFx0Li4uY29uZmlnXG5cdFx0fTtcblx0XHR0aGlzLl9jb25uZWN0aW9uID0gZ2V0Q29ubmVjdGlvblBvb2woKS5nZXRPckNyZWF0ZSh0aGlzLl9jb25maWcuY2hhbm5lbE5hbWUsIFwic2VydmljZS13b3JrZXJcIiwgeyBtZXRhZGF0YTogeyBpc0hvc3Q6IHRydWUgfSB9KTtcblx0XHR0aGlzLl9zdG9yYWdlID0gZ2V0Q2hhbm5lbFN0b3JhZ2UodGhpcy5fY29uZmlnLmNoYW5uZWxOYW1lKTtcblx0XHR0aGlzLl9zZXR1cE1lc3NhZ2VIYW5kbGVycygpO1xuXHRcdGlmICh0aGlzLl9jb25maWcuYXV0b0NsZWFudXApIHRoaXMuX3N0YXJ0Q2xlYW51cEludGVydmFsKCk7XG5cdH1cblx0YXN5bmMgcmVnaXN0ZXJDbGllbnQoY2xpZW50SWQsIGNsaWVudEluZm8gPSB7fSkge1xuXHRcdGNvbnN0IGluZm8gPSB7XG5cdFx0XHRpZDogY2xpZW50SWQsXG5cdFx0XHR0eXBlOiBjbGllbnRJbmZvLnR5cGUgPz8gXCJ3aW5kb3dcIixcblx0XHRcdHVybDogY2xpZW50SW5mby51cmwgPz8gXCJcIixcblx0XHRcdHZpc2liaWxpdHlTdGF0ZTogY2xpZW50SW5mby52aXNpYmlsaXR5U3RhdGUgPz8gXCJ2aXNpYmxlXCIsXG5cdFx0XHRmb2N1c2VkOiBjbGllbnRJbmZvLmZvY3VzZWQgPz8gZmFsc2UsXG5cdFx0XHRjb25uZWN0ZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdGxhc3RTZWVuOiBEYXRlLm5vdygpLFxuXHRcdFx0Y2hhbm5lbHM6IG5ldyBTZXQoY2xpZW50SW5mby5jaGFubmVscyA/PyBbXSlcblx0XHR9O1xuXHRcdHRoaXMuX2NsaWVudHMuc2V0KGNsaWVudElkLCBpbmZvKTtcblx0XHR0aGlzLl9jbGllbnRFdmVudHMubmV4dCh7XG5cdFx0XHR0eXBlOiBcImNvbm5lY3RlZFwiLFxuXHRcdFx0Y2xpZW50OiBpbmZvXG5cdFx0fSk7XG5cdFx0YXdhaXQgdGhpcy5fZGVsaXZlclF1ZXVlZE1lc3NhZ2VzKGNsaWVudElkKTtcblx0fVxuXHR1bnJlZ2lzdGVyQ2xpZW50KGNsaWVudElkKSB7XG5cdFx0Y29uc3QgY2xpZW50ID0gdGhpcy5fY2xpZW50cy5nZXQoY2xpZW50SWQpO1xuXHRcdGlmIChjbGllbnQpIHtcblx0XHRcdGZvciAoY29uc3Qgc3Vic2NyaWJlcnMgb2YgdGhpcy5fY2hhbm5lbFN1YnNjcmliZXJzLnZhbHVlcygpKSBzdWJzY3JpYmVycy5kZWxldGUoY2xpZW50SWQpO1xuXHRcdFx0dGhpcy5fY2xpZW50cy5kZWxldGUoY2xpZW50SWQpO1xuXHRcdFx0dGhpcy5fY2xpZW50RXZlbnRzLm5leHQoe1xuXHRcdFx0XHR0eXBlOiBcImRpc2Nvbm5lY3RlZFwiLFxuXHRcdFx0XHRjbGllbnRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHR1cGRhdGVDbGllbnQoY2xpZW50SWQsIHVwZGF0ZXMpIHtcblx0XHRjb25zdCBjbGllbnQgPSB0aGlzLl9jbGllbnRzLmdldChjbGllbnRJZCk7XG5cdFx0aWYgKGNsaWVudCkge1xuXHRcdFx0T2JqZWN0LmFzc2lnbihjbGllbnQsIHVwZGF0ZXMsIHsgbGFzdFNlZW46IERhdGUubm93KCkgfSk7XG5cdFx0XHR0aGlzLl9jbGllbnRFdmVudHMubmV4dCh7XG5cdFx0XHRcdHR5cGU6IFwidXBkYXRlZFwiLFxuXHRcdFx0XHRjbGllbnRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRzdWJzY3JpYmVDbGllbnRUb0NoYW5uZWwoY2xpZW50SWQsIGNoYW5uZWwpIHtcblx0XHRjb25zdCBjbGllbnQgPSB0aGlzLl9jbGllbnRzLmdldChjbGllbnRJZCk7XG5cdFx0aWYgKGNsaWVudCkgY2xpZW50LmNoYW5uZWxzLmFkZChjaGFubmVsKTtcblx0XHRpZiAoIXRoaXMuX2NoYW5uZWxTdWJzY3JpYmVycy5oYXMoY2hhbm5lbCkpIHRoaXMuX2NoYW5uZWxTdWJzY3JpYmVycy5zZXQoY2hhbm5lbCwgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG5cdFx0dGhpcy5fY2hhbm5lbFN1YnNjcmliZXJzLmdldChjaGFubmVsKS5hZGQoY2xpZW50SWQpO1xuXHR9XG5cdHVuc3Vic2NyaWJlQ2xpZW50RnJvbUNoYW5uZWwoY2xpZW50SWQsIGNoYW5uZWwpIHtcblx0XHRjb25zdCBjbGllbnQgPSB0aGlzLl9jbGllbnRzLmdldChjbGllbnRJZCk7XG5cdFx0aWYgKGNsaWVudCkgY2xpZW50LmNoYW5uZWxzLmRlbGV0ZShjaGFubmVsKTtcblx0XHR0aGlzLl9jaGFubmVsU3Vic2NyaWJlcnMuZ2V0KGNoYW5uZWwpPy5kZWxldGUoY2xpZW50SWQpO1xuXHR9XG5cdGdldENsaWVudHMoKSB7XG5cdFx0cmV0dXJuIG5ldyBNYXAodGhpcy5fY2xpZW50cyk7XG5cdH1cblx0Z2V0Q2hhbm5lbFN1YnNjcmliZXJzKGNoYW5uZWwpIHtcblx0XHRyZXR1cm4gbmV3IFNldCh0aGlzLl9jaGFubmVsU3Vic2NyaWJlcnMuZ2V0KGNoYW5uZWwpID8/IFtdKTtcblx0fVxuXHRhc3luYyBzZW5kVG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpIHtcblx0XHRpZiAoIXRoaXMuX2NsaWVudHMuZ2V0KGNsaWVudElkKSkge1xuXHRcdFx0aWYgKHRoaXMuX2NvbmZpZy5lbmFibGVPZmZsaW5lUXVldWUpIGF3YWl0IHRoaXMuX3F1ZXVlTWVzc2FnZShjbGllbnRJZCwgbWVzc2FnZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9wb3N0VG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpO1xuXHR9XG5cdGFzeW5jIGJyb2FkY2FzdFRvQ2hhbm5lbChjaGFubmVsLCBtZXNzYWdlKSB7XG5cdFx0Y29uc3Qgc3Vic2NyaWJlcnMgPSB0aGlzLl9jaGFubmVsU3Vic2NyaWJlcnMuZ2V0KGNoYW5uZWwpO1xuXHRcdGlmICghc3Vic2NyaWJlcnMgfHwgc3Vic2NyaWJlcnMuc2l6ZSA9PT0gMCkgcmV0dXJuIDA7XG5cdFx0bGV0IGRlbGl2ZXJlZENvdW50ID0gMDtcblx0XHRmb3IgKGNvbnN0IGNsaWVudElkIG9mIHN1YnNjcmliZXJzKSBpZiAoYXdhaXQgdGhpcy5zZW5kVG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpKSBkZWxpdmVyZWRDb3VudCsrO1xuXHRcdHJldHVybiBkZWxpdmVyZWRDb3VudDtcblx0fVxuXHRhc3luYyBicm9hZGNhc3RUb0FsbChtZXNzYWdlKSB7XG5cdFx0bGV0IGRlbGl2ZXJlZENvdW50ID0gMDtcblx0XHRmb3IgKGNvbnN0IGNsaWVudElkIG9mIHRoaXMuX2NsaWVudHMua2V5cygpKSBpZiAoYXdhaXQgdGhpcy5zZW5kVG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpKSBkZWxpdmVyZWRDb3VudCsrO1xuXHRcdHJldHVybiBkZWxpdmVyZWRDb3VudDtcblx0fVxuXHRhc3luYyBoYW5kbGVDbGllbnRNZXNzYWdlKGNsaWVudElkLCBkYXRhKSB7XG5cdFx0dGhpcy51cGRhdGVDbGllbnQoY2xpZW50SWQsIHsgbGFzdFNlZW46IERhdGUubm93KCkgfSk7XG5cdFx0aWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKSByZXR1cm47XG5cdFx0c3dpdGNoIChkYXRhLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb25uZWN0XCI6XG5cdFx0XHRcdGF3YWl0IHRoaXMucmVnaXN0ZXJDbGllbnQoY2xpZW50SWQsIGRhdGEucGF5bG9hZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImRpc2Nvbm5lY3RcIjpcblx0XHRcdFx0dGhpcy51bnJlZ2lzdGVyQ2xpZW50KGNsaWVudElkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic3Vic2NyaWJlXCI6XG5cdFx0XHRcdHRoaXMuc3Vic2NyaWJlQ2xpZW50VG9DaGFubmVsKGNsaWVudElkLCBkYXRhLnBheWxvYWQ/LmNoYW5uZWwpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ1bnN1YnNjcmliZVwiOlxuXHRcdFx0XHR0aGlzLnVuc3Vic2NyaWJlQ2xpZW50RnJvbUNoYW5uZWwoY2xpZW50SWQsIGRhdGEucGF5bG9hZD8uY2hhbm5lbCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInJlcXVlc3RcIjpcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9oYW5kbGVSZXF1ZXN0KGRhdGEpO1xuXHRcdFx0XHRpZiAocmVzcG9uc2UpIGF3YWl0IHRoaXMuc2VuZFRvQ2xpZW50KGNsaWVudElkLCByZXNwb25zZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImV2ZW50XCI6XG5cdFx0XHRcdGlmIChkYXRhLmNoYW5uZWwpIGF3YWl0IHRoaXMuYnJvYWRjYXN0VG9DaGFubmVsKGRhdGEuY2hhbm5lbCwgZGF0YSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogdGhpcy5fY29ubmVjdGlvbi5wdXNoSW5ib3VuZCh7XG5cdFx0XHRcdC4uLmRhdGEsXG5cdFx0XHRcdF9jbGllbnRJZDogY2xpZW50SWRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRvbkNsaWVudEV2ZW50KGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2xpZW50RXZlbnRzLnN1YnNjcmliZSh7IG5leHQ6IGhhbmRsZXIgfSk7XG5cdH1cblx0b25NZXNzYWdlKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5zdWJzY3JpYmUoaGFuZGxlcik7XG5cdH1cblx0b25NZXNzYWdlVHlwZSh0eXBlLCBoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24uc3Vic2NyaWJlKChtc2cpID0+IHtcblx0XHRcdGlmIChtc2cudHlwZSA9PT0gdHlwZSkgaGFuZGxlcihtc2cpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIF9xdWV1ZU1lc3NhZ2UoY2xpZW50SWQsIG1lc3NhZ2UpIHtcblx0XHRhd2FpdCB0aGlzLl9zdG9yYWdlLmRlZmVyKHtcblx0XHRcdGNoYW5uZWw6IG1lc3NhZ2UuY2hhbm5lbCxcblx0XHRcdHNlbmRlcjogbWVzc2FnZS5zZW5kZXIsXG5cdFx0XHR0eXBlOiBtZXNzYWdlLnR5cGUsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdC4uLm1lc3NhZ2UucGF5bG9hZCxcblx0XHRcdFx0X3RhcmdldENsaWVudDogY2xpZW50SWRcblx0XHRcdH1cblx0XHR9LCB7XG5cdFx0XHRleHBpcmVzSW46IHRoaXMuX2NvbmZpZy5tZXNzYWdlVFRMLFxuXHRcdFx0cHJpb3JpdHk6IDAsXG5cdFx0XHRtZXRhZGF0YTogeyB0YXJnZXRDbGllbnQ6IGNsaWVudElkIH1cblx0XHR9KTtcblx0fVxuXHRhc3luYyBfZGVsaXZlclF1ZXVlZE1lc3NhZ2VzKGNsaWVudElkKSB7XG5cdFx0aWYgKCF0aGlzLl9jb25maWcuZW5hYmxlT2ZmbGluZVF1ZXVlKSByZXR1cm47XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBhd2FpdCB0aGlzLl9zdG9yYWdlLmdldERlZmVycmVkTWVzc2FnZXMoY2xpZW50SWQsIHsgc3RhdHVzOiBcInBlbmRpbmdcIiB9KTtcblx0XHRmb3IgKGNvbnN0IHN0b3JlZCBvZiBtZXNzYWdlcykge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IHtcblx0XHRcdFx0aWQ6IHN0b3JlZC5pZCxcblx0XHRcdFx0Y2hhbm5lbDogc3RvcmVkLmNoYW5uZWwsXG5cdFx0XHRcdHNlbmRlcjogc3RvcmVkLnNlbmRlcixcblx0XHRcdFx0dHlwZTogc3RvcmVkLnR5cGUsXG5cdFx0XHRcdHBheWxvYWQ6IHN0b3JlZC5wYXlsb2FkLFxuXHRcdFx0XHR0aW1lc3RhbXA6IHN0b3JlZC5jcmVhdGVkQXRcblx0XHRcdH07XG5cdFx0XHRpZiAoYXdhaXQgdGhpcy5fcG9zdFRvQ2xpZW50KGNsaWVudElkLCBtZXNzYWdlKSkgYXdhaXQgdGhpcy5fc3RvcmFnZS5tYXJrRGVsaXZlcmVkKHN0b3JlZC5pZCk7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIHN0YXJ0KCkge1xuXHRcdGF3YWl0IHRoaXMuX3N0b3JhZ2Uub3BlbigpO1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb24ubWFya0Nvbm5lY3RlZCgpO1xuXHRcdGF3YWl0IHRoaXMuX3N0b3JhZ2UuY2xlYW51cEV4cGlyZWQoKTtcblx0fVxuXHRzdG9wKCkge1xuXHRcdGlmICh0aGlzLl9jbGVhbnVwSW50ZXJ2YWwpIHtcblx0XHRcdGNsZWFySW50ZXJ2YWwodGhpcy5fY2xlYW51cEludGVydmFsKTtcblx0XHRcdHRoaXMuX2NsZWFudXBJbnRlcnZhbCA9IG51bGw7XG5cdFx0fVxuXHRcdGZvciAoY29uc3Qgc3ViIG9mIHRoaXMuX3N1YnNjcmlwdGlvbnMpIHN1Yi51bnN1YnNjcmliZSgpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMgPSBbXTtcblx0XHR0aGlzLl9jb25uZWN0aW9uLmNsb3NlKCk7XG5cdFx0dGhpcy5fc3RvcmFnZS5jbG9zZSgpO1xuXHR9XG5cdF9zZXR1cE1lc3NhZ2VIYW5kbGVycygpIHtcblx0XHRjb25zdCBtZXNzYWdlU3ViID0gdGhpcy5fY29ubmVjdGlvbi5zdWJzY3JpYmUoeyBuZXh0OiAobXNnKSA9PiB7XG5cdFx0XHRpZiAobXNnLnR5cGUgPT09IFwicmVxdWVzdFwiKSB0aGlzLl9oYW5kbGVSZXF1ZXN0KG1zZyk7XG5cdFx0fSB9KTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2gobWVzc2FnZVN1Yik7XG5cdH1cblx0YXN5bmMgX2hhbmRsZVJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVzcG9uc2UgPSB7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBtc2cuc2VuZGVyLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jb25maWcuY2hhbm5lbE5hbWUsXG5cdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRyZXFJZDogbXNnLnJlcUlkLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRyZXN1bHQ6IG51bGwsXG5cdFx0XHRcdGVycm9yOiBudWxsXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHR0cnkge1xuXHRcdFx0c3dpdGNoIChtc2cucGF5bG9hZD8uYWN0aW9uKSB7XG5cdFx0XHRcdGNhc2UgXCJnZXRDbGllbnRzXCI6XG5cdFx0XHRcdFx0cmVzcG9uc2UucGF5bG9hZC5yZXN1bHQgPSBBcnJheS5mcm9tKHRoaXMuX2NsaWVudHMudmFsdWVzKCkpLm1hcCgoYykgPT4gKHtcblx0XHRcdFx0XHRcdC4uLmMsXG5cdFx0XHRcdFx0XHRjaGFubmVsczogQXJyYXkuZnJvbShjLmNoYW5uZWxzKVxuXHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImdldENoYW5uZWxJbmZvXCI6XG5cdFx0XHRcdFx0Y29uc3QgY2hhbm5lbCA9IG1zZy5wYXlsb2FkPy5jaGFubmVsO1xuXHRcdFx0XHRcdHJlc3BvbnNlLnBheWxvYWQucmVzdWx0ID0ge1xuXHRcdFx0XHRcdFx0Y2hhbm5lbCxcblx0XHRcdFx0XHRcdHN1YnNjcmliZXJDb3VudDogdGhpcy5fY2hhbm5lbFN1YnNjcmliZXJzLmdldChjaGFubmVsKT8uc2l6ZSA/PyAwXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInBpbmdcIjpcblx0XHRcdFx0XHRyZXNwb25zZS5wYXlsb2FkLnJlc3VsdCA9IFwicG9uZ1wiO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRoaXMuX2Nvbm5lY3Rpb24ucHVzaEluYm91bmQobXNnKTtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0cmVzcG9uc2UucGF5bG9hZC5lcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlO1xuXHR9XG5cdGFzeW5jIF9wb3N0VG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpIHtcblx0XHRpZiAodHlwZW9mIGNsaWVudHMgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY2xpZW50ID0gYXdhaXQgY2xpZW50cy5nZXQoY2xpZW50SWQpO1xuXHRcdFx0aWYgKGNsaWVudCkge1xuXHRcdFx0XHRjbGllbnQucG9zdE1lc3NhZ2UobWVzc2FnZSk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJbU1dIb3N0XSBGYWlsZWQgdG8gcG9zdCB0byBjbGllbnQ6XCIsIGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0X3N0YXJ0Q2xlYW51cEludGVydmFsKCkge1xuXHRcdHRoaXMuX2NsZWFudXBJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdHRoaXMuX2NsZWFudXBTdGFsZUNsaWVudHMoKTtcblx0XHRcdHRoaXMuX3N0b3JhZ2UuY2xlYW51cEV4cGlyZWQoKTtcblx0XHR9LCB0aGlzLl9jb25maWcuY2xlYW51cEludGVydmFsKTtcblx0fVxuXHRhc3luYyBfY2xlYW51cFN0YWxlQ2xpZW50cygpIHtcblx0XHRpZiAodHlwZW9mIGNsaWVudHMgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcblx0XHRjb25zdCBhbGxDbGllbnRzID0gYXdhaXQgY2xpZW50cy5tYXRjaEFsbCh7IGluY2x1ZGVVbmNvbnRyb2xsZWQ6IHRydWUgfSk7XG5cdFx0Y29uc3QgYWN0aXZlSWRzID0gbmV3IFNldChhbGxDbGllbnRzLm1hcCgoYykgPT4gYy5pZCkpO1xuXHRcdGZvciAoY29uc3QgY2xpZW50SWQgb2YgdGhpcy5fY2xpZW50cy5rZXlzKCkpIGlmICghYWN0aXZlSWRzLmhhcyhjbGllbnRJZCkpIHRoaXMudW5yZWdpc3RlckNsaWVudChjbGllbnRJZCk7XG5cdH1cbn07XG52YXIgU2VydmljZVdvcmtlckNsaWVudCA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfcmVnaXN0cmF0aW9uID0gbnVsbDtcblx0X21lc3NhZ2VIYW5kbGVyID0gbnVsbDtcblx0X3N1YmplY3QgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0X3BlbmRpbmdSZXF1ZXN0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuXHRjb25zdHJ1Y3RvcihfY2hhbm5lbE5hbWUpIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0fVxuXHRhc3luYyBjb25uZWN0KCkge1xuXHRcdGlmICghKFwic2VydmljZVdvcmtlclwiIGluIG5hdmlnYXRvcikpIHRocm93IG5ldyBFcnJvcihcIlNlcnZpY2UgV29ya2VyIG5vdCBzdXBwb3J0ZWRcIik7XG5cdFx0dGhpcy5fcmVnaXN0cmF0aW9uID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHk7XG5cdFx0dGhpcy5fbWVzc2FnZUhhbmRsZXIgPSAoZXZlbnQpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSBldmVudC5kYXRhO1xuXHRcdFx0aWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKSByZXR1cm47XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIgJiYgZGF0YS5yZXFJZCkge1xuXHRcdFx0XHRjb25zdCByZXNvbHZlcnMgPSB0aGlzLl9wZW5kaW5nUmVxdWVzdHMuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocmVzb2x2ZXJzKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGVuZGluZ1JlcXVlc3RzLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0XHRpZiAoZGF0YS5wYXlsb2FkPy5lcnJvcikgcmVzb2x2ZXJzLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRcdFx0ZWxzZSByZXNvbHZlcnMucmVzb2x2ZShkYXRhLnBheWxvYWQ/LnJlc3VsdCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9zdWJqZWN0Lm5leHQoZGF0YSk7XG5cdFx0fTtcblx0XHRuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9tZXNzYWdlSGFuZGxlcik7XG5cdFx0dGhpcy5fc2VuZFRvU1coe1xuXHRcdFx0dHlwZTogXCJjb25uZWN0XCIsXG5cdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdFx0XHR2aXNpYmlsaXR5U3RhdGU6IGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSxcblx0XHRcdFx0Zm9jdXNlZDogZG9jdW1lbnQuaGFzRm9jdXMoKVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuX2lzQ29ubmVjdGVkID0gdHJ1ZTtcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCB0aGlzLl9vblZpc2liaWxpdHlDaGFuZ2UpO1xuXHR9XG5cdGRpc2Nvbm5lY3QoKSB7XG5cdFx0aWYgKHRoaXMuX21lc3NhZ2VIYW5kbGVyKSB7XG5cdFx0XHRuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9tZXNzYWdlSGFuZGxlcik7XG5cdFx0XHR0aGlzLl9tZXNzYWdlSGFuZGxlciA9IG51bGw7XG5cdFx0fVxuXHRcdHRoaXMuX3NlbmRUb1NXKHtcblx0XHRcdHR5cGU6IFwiZGlzY29ubmVjdFwiLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWVcblx0XHR9KTtcblx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCB0aGlzLl9vblZpc2liaWxpdHlDaGFuZ2UpO1xuXHRcdHRoaXMuX2lzQ29ubmVjdGVkID0gZmFsc2U7XG5cdH1cblx0c3Vic2NyaWJlVG9DaGFubmVsKGNoYW5uZWwpIHtcblx0XHR0aGlzLl9zZW5kVG9TVyh7XG5cdFx0XHR0eXBlOiBcInN1YnNjcmliZVwiLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRwYXlsb2FkOiB7IGNoYW5uZWwgfVxuXHRcdH0pO1xuXHR9XG5cdHVuc3Vic2NyaWJlRnJvbUNoYW5uZWwoY2hhbm5lbCkge1xuXHRcdHRoaXMuX3NlbmRUb1NXKHtcblx0XHRcdHR5cGU6IFwidW5zdWJzY3JpYmVcIixcblx0XHRcdGNoYW5uZWw6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0cGF5bG9hZDogeyBjaGFubmVsIH1cblx0XHR9KTtcblx0fVxuXHRhc3luYyByZXF1ZXN0KGFjdGlvbiwgcGF5bG9hZCA9IHt9KSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBVVUlEdjQoKTtcblx0XHRjb25zdCByZXNvbHZlcnMgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTtcblx0XHR0aGlzLl9wZW5kaW5nUmVxdWVzdHMuc2V0KHJlcUlkLCByZXNvbHZlcnMpO1xuXHRcdHRoaXMuX3NlbmRUb1NXKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwicmVxdWVzdFwiLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRzZW5kZXI6IFwiY2xpZW50XCIsXG5cdFx0XHRyZXFJZCxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHQuLi5wYXlsb2FkXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fcGVuZGluZ1JlcXVlc3RzLmhhcyhyZXFJZCkpIHtcblx0XHRcdFx0dGhpcy5fcGVuZGluZ1JlcXVlc3RzLmRlbGV0ZShyZXFJZCk7XG5cdFx0XHRcdHJlc29sdmVycy5yZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIlJlcXVlc3QgdGltZW91dFwiKSk7XG5cdFx0XHR9XG5cdFx0fSwgM2U0KTtcblx0XHRyZXR1cm4gcmVzb2x2ZXJzLnByb21pc2U7XG5cdH1cblx0ZW1pdChldmVudFR5cGUsIGRhdGEsIHRhcmdldENoYW5uZWwpIHtcblx0XHR0aGlzLl9zZW5kVG9TVyh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHR0eXBlOiBcImV2ZW50XCIsXG5cdFx0XHRjaGFubmVsOiB0YXJnZXRDaGFubmVsID8/IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0c2VuZGVyOiBcImNsaWVudFwiLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHR0eXBlOiBldmVudFR5cGUsXG5cdFx0XHRcdGRhdGFcblx0XHRcdH0sXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KTtcblx0fVxuXHRzdWJzY3JpYmUoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7IG5leHQ6IGhhbmRsZXIgfSk7XG5cdH1cblx0b24oZXZlbnRUeXBlLCBoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIGZpbHRlcigobSkgPT4gbS50eXBlID09PSBcImV2ZW50XCIgJiYgbS5wYXlsb2FkPy50eXBlID09PSBldmVudFR5cGUpKHRoaXMuX3N1YmplY3QpLnN1YnNjcmliZSh7IG5leHQ6IChtc2cpID0+IGhhbmRsZXIobXNnLnBheWxvYWQ/LmRhdGEpIH0pO1xuXHR9XG5cdGdldCBpc0Nvbm5lY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5faXNDb25uZWN0ZWQ7XG5cdH1cblx0X3NlbmRUb1NXKG1lc3NhZ2UpIHtcblx0XHRpZiAoIXRoaXMuX3JlZ2lzdHJhdGlvbj8uYWN0aXZlKSByZXR1cm47XG5cdFx0dGhpcy5fcmVnaXN0cmF0aW9uLmFjdGl2ZS5wb3N0TWVzc2FnZShtZXNzYWdlKTtcblx0fVxuXHRfb25WaXNpYmlsaXR5Q2hhbmdlID0gKCkgPT4ge1xuXHRcdGlmICghdGhpcy5faXNDb25uZWN0ZWQpIHJldHVybjtcblx0XHR0aGlzLl9zZW5kVG9TVyh7XG5cdFx0XHR0eXBlOiBcImV2ZW50XCIsXG5cdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0dHlwZTogXCJ2aXNpYmlsaXR5Q2hhbmdlXCIsXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHR2aXNpYmlsaXR5U3RhdGU6IGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSxcblx0XHRcdFx0XHRmb2N1c2VkOiBkb2N1bWVudC5oYXNGb2N1cygpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fTtcbn07XG5mdW5jdGlvbiBjcmVhdGVTZXJ2aWNlV29ya2VySG9zdChjb25maWcpIHtcblx0cmV0dXJuIG5ldyBTZXJ2aWNlV29ya2VySG9zdChjb25maWcpO1xufVxuZnVuY3Rpb24gY3JlYXRlU2VydmljZVdvcmtlckNsaWVudChjaGFubmVsTmFtZSkge1xuXHRyZXR1cm4gbmV3IFNlcnZpY2VXb3JrZXJDbGllbnQoY2hhbm5lbE5hbWUpO1xufVxuZnVuY3Rpb24gYmluZFNlcnZpY2VXb3JrZXJIb3N0QnJpZGdlKGhvc3QsIHNjb3BlID0gc2VsZikge1xuXHRjb25zdCBvbk1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBjbGllbnRJZCA9IFN0cmluZyhldmVudC5zb3VyY2U/LmlkIHx8IFwiXCIpLnRyaW0oKTtcblx0XHRpZiAoIWNsaWVudElkKSByZXR1cm47XG5cdFx0aG9zdC5oYW5kbGVDbGllbnRNZXNzYWdlKGNsaWVudElkLCBldmVudC5kYXRhKTtcblx0fTtcblx0c2NvcGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25NZXNzYWdlKTtcblx0aG9zdC5zdGFydCgpLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdGNvbnNvbGUud2FybihcIltTZXJ2aWNlV29ya2VySG9zdF0gRmFpbGVkIHRvIHN0YXJ0IGJvdW5kIGhvc3Q6XCIsIGVycm9yKTtcblx0fSk7XG5cdHJldHVybiB7IHN0b3AoKSB7XG5cdFx0c2NvcGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25NZXNzYWdlKTtcblx0XHRob3N0LnN0b3AoKTtcblx0fSB9O1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvVW5pZmllZFRyYW5zcG9ydC50c1xudmFyIEFic3RyYWN0VHJhbnNwb3J0ID0gY2xhc3Mge1xuXHRfdHlwZTtcblx0X2NoYW5uZWxOYW1lO1xuXHRfY29uZmlnO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9yZWFkeSA9IGZhbHNlO1xuXHRjb25zdHJ1Y3RvcihfdHlwZSwgX2NoYW5uZWxOYW1lLCBfY29uZmlnKSB7XG5cdFx0dGhpcy5fdHlwZSA9IF90eXBlO1xuXHRcdHRoaXMuX2NoYW5uZWxOYW1lID0gX2NoYW5uZWxOYW1lO1xuXHRcdHRoaXMuX2NvbmZpZyA9IF9jb25maWc7XG5cdH1cblx0cmVxdWVzdChtc2cpIHtcblx0XHRjb25zdCByZXFJZCA9IG1zZy5yZXFJZCA/PyBVVUlEdjQoKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShyZXFJZCk7XG5cdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUmVxdWVzdCB0aW1lb3V0XCIpKTtcblx0XHRcdH0sIHRoaXMuX2NvbmZpZy50aW1lb3V0ID8/IDNlNCk7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLnNldChyZXFJZCwge1xuXHRcdFx0XHRyZXNvbHZlOiAodikgPT4ge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRyZXNvbHZlKHYpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZWplY3Q6IChlKSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuc2VuZCh7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWQsXG5cdFx0XHRcdHR5cGU6IFwicmVxdWVzdFwiXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0X2hhbmRsZU1lc3NhZ2UoZGF0YSkge1xuXHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRpZiAocCkge1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0aWYgKGRhdGEucGF5bG9hZD8uZXJyb3IpIHAucmVqZWN0KG5ldyBFcnJvcihkYXRhLnBheWxvYWQuZXJyb3IpKTtcblx0XHRcdFx0ZWxzZSBwLnJlc29sdmUoZGF0YS5wYXlsb2FkPy5yZXN1bHQgPz8gZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdHMubmV4dD8uKGRhdGEpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHR9XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdHRoaXMuX3JlYWR5ID0gZmFsc2U7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImRpc2Nvbm5lY3RlZFwiKTtcblx0fVxuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdHlwZTtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxOYW1lO1xuXHR9XG5cdGdldCBpc1JlYWR5KCkge1xuXHRcdHJldHVybiB0aGlzLl9yZWFkeTtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG59O1xudmFyIE5hdGl2ZVRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgQWJzdHJhY3RUcmFuc3BvcnQge1xuXHRfdGFyZ2V0O1xuXHRfc2VuZEZuO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKF90YXJnZXQsIGNvbmZpZykge1xuXHRcdHN1cGVyKGRldGVjdFRyYW5zcG9ydFR5cGUkMShfdGFyZ2V0KSwgY29uZmlnLmNoYW5uZWxOYW1lLCBjb25maWcpO1xuXHRcdHRoaXMuX3RhcmdldCA9IF90YXJnZXQ7XG5cdFx0dGhpcy5fc2VuZEZuID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKF90YXJnZXQpO1xuXHRcdHRoaXMuX3NldHVwTGlzdGVuZXIoKTtcblx0fVxuXHRfc2V0dXBMaXN0ZW5lcigpIHtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fdGFyZ2V0LCAoZGF0YSkgPT4gdGhpcy5faGFuZGxlTWVzc2FnZShkYXRhKSwgKGVycikgPT4gdGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmVycm9yPy4oZXJyKSksICgpID0+IHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpKTtcblx0XHR0aGlzLl9yZWFkeSA9IHRydWU7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImNvbm5lY3RlZFwiKTtcblx0fVxuXHRzZW5kKG1zZywgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kRm4obXNnLCB0cmFuc2Zlcik7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0c3VwZXIuY2xvc2UoKTtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zcG9ydChjaGFubmVsTmFtZSwgb3B0aW9ucyA9IHt9LCBjb25maWcgPSB7fSkge1xuXHRjb25zdCBiYXNlQ29uZmlnID0ge1xuXHRcdGNoYW5uZWxOYW1lLFxuXHRcdHRpbWVvdXQ6IDNlNCxcblx0XHRhdXRvQ29ubmVjdDogdHJ1ZSxcblx0XHQuLi5jb25maWdcblx0fTtcblx0aWYgKG9wdGlvbnMud29ya2VyKSB7XG5cdFx0Y29uc3Qgd29ya2VyID0gb3B0aW9ucy53b3JrZXIuZXhpc3RpbmcgPz8gbmV3IFdvcmtlcihvcHRpb25zLndvcmtlci5zY3JpcHRVcmwsIG9wdGlvbnMud29ya2VyLm9wdGlvbnMpO1xuXHRcdHJldHVybiBuZXcgTmF0aXZlVHJhbnNwb3J0KHdvcmtlciwgYmFzZUNvbmZpZyk7XG5cdH1cblx0aWYgKG9wdGlvbnMuc2hhcmVkV29ya2VyKSB7XG5cdFx0Y29uc3QgY2xpZW50ID0gbmV3IFNoYXJlZFdvcmtlckNsaWVudChvcHRpb25zLnNoYXJlZFdvcmtlci5zY3JpcHRVcmwsIGNoYW5uZWxOYW1lLCBvcHRpb25zLnNoYXJlZFdvcmtlci5vcHRpb25zKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogKG1zZywgdHJhbnNmZXIpID0+IGNsaWVudC5zZW5kKG1zZywgdHJhbnNmZXIpLFxuXHRcdFx0cmVxdWVzdDogKG1zZykgPT4gY2xpZW50LnJlcXVlc3QobXNnKSxcblx0XHRcdHN1YnNjcmliZTogKG9icykgPT4gY2xpZW50LnN1YnNjcmliZShvYnMpLFxuXHRcdFx0Y2xvc2U6ICgpID0+IGNsaWVudC5jbG9zZSgpLFxuXHRcdFx0dHlwZTogXCJzaGFyZWQtd29ya2VyXCIsXG5cdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdGlzUmVhZHk6IHRydWVcblx0XHR9O1xuXHR9XG5cdGlmIChvcHRpb25zLndlYnNvY2tldCkge1xuXHRcdGNvbnN0IHdzID0gY3JlYXRlV2ViU29ja2V0VHJhbnNwb3J0KG9wdGlvbnMud2Vic29ja2V0LnVybCwge1xuXHRcdFx0cHJvdG9jb2xzOiBvcHRpb25zLndlYnNvY2tldC5wcm90b2NvbHMsXG5cdFx0XHRyZWNvbm5lY3Q6IG9wdGlvbnMud2Vic29ja2V0LnJlY29ubmVjdFxuXHRcdH0pO1xuXHRcdGNvbnN0IHN1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRcdGNvbnN0IHBlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdHdzLmxpc3RlbigoZGF0YSkgPT4ge1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIGRhdGEucmVxSWQpIHtcblx0XHRcdFx0Y29uc3QgcCA9IHBlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdHBlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmVycm9yKSBwLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRcdFx0ZWxzZSBwLnJlc29sdmUoZGF0YS5wYXlsb2FkPy5yZXN1bHQgPz8gZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3QgcyBvZiBzdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/LihkYXRhKTtcblx0XHRcdH0gY2F0Y2gge31cblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogKG1zZywgdHJhbnNmZXIpID0+IHdzLnNlbmQobXNnLCB0cmFuc2ZlciksXG5cdFx0XHRyZXF1ZXN0OiAobXNnKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlcUlkID0gbXNnLnJlcUlkID8/IFVVSUR2NCgpO1xuXHRcdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0cGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUmVxdWVzdCB0aW1lb3V0XCIpKTtcblx0XHRcdFx0fSwgYmFzZUNvbmZpZy50aW1lb3V0KTtcblx0XHRcdFx0cGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdFx0XHRyZXNvbHZlOiAodikgPT4ge1xuXHRcdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh2KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlamVjdDogKGUpID0+IHtcblx0XHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d3Muc2VuZCh7XG5cdFx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRcdHJlcUlkLFxuXHRcdFx0XHRcdHR5cGU6IFwicmVxdWVzdFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSksXG5cdFx0XHRzdWJzY3JpYmU6IChvYnMpID0+IHtcblx0XHRcdFx0Y29uc3QgbyA9IHR5cGVvZiBvYnMgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzIH0gOiBvYnM7XG5cdFx0XHRcdHN1YnMuYWRkKG8pO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHN1YnMuZGVsZXRlKG8pXG5cdFx0XHRcdH07XG5cdFx0XHR9LFxuXHRcdFx0Y2xvc2U6ICgpID0+IHtcblx0XHRcdFx0c3Vicy5jbGVhcigpO1xuXHRcdFx0XHR3cy5jbG9zZSgpO1xuXHRcdFx0fSxcblx0XHRcdHR5cGU6IFwid2Vic29ja2V0XCIsXG5cdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdGlzUmVhZHk6IHdzLnNvY2tldC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTlxuXHRcdH07XG5cdH1cblx0aWYgKG9wdGlvbnMuYnJvYWRjYXN0KSB7XG5cdFx0Y29uc3QgYmMgPSBjcmVhdGVCcm9hZGNhc3RUcmFuc3BvcnQob3B0aW9ucy5icm9hZGNhc3QubmFtZSA/PyBjaGFubmVsTmFtZSk7XG5cdFx0cmV0dXJuIG5ldyBOYXRpdmVUcmFuc3BvcnQoYmMuY2hhbm5lbCwgYmFzZUNvbmZpZyk7XG5cdH1cblx0aWYgKG9wdGlvbnMucG9ydD8ucG9ydCkge1xuXHRcdGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBQb3J0VHJhbnNwb3J0KG9wdGlvbnMucG9ydC5wb3J0LCBjaGFubmVsTmFtZSwgb3B0aW9ucy5wb3J0LmNvbmZpZyk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IChtc2csIHRyYW5zZmVyKSA9PiB0cmFuc3BvcnQuc2VuZChtc2csIHRyYW5zZmVyKSxcblx0XHRcdHJlcXVlc3Q6IChtc2cpID0+IHRyYW5zcG9ydC5yZXF1ZXN0KG1zZyksXG5cdFx0XHRzdWJzY3JpYmU6IChvYnMpID0+IHRyYW5zcG9ydC5zdWJzY3JpYmUob2JzKSxcblx0XHRcdGNsb3NlOiAoKSA9PiB0cmFuc3BvcnQuY2xvc2UoKSxcblx0XHRcdHR5cGU6IFwibWVzc2FnZS1wb3J0XCIsXG5cdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdGlzUmVhZHk6IHRyYW5zcG9ydC5pc0xpc3RlbmluZ1xuXHRcdH07XG5cdH1cblx0aWYgKG9wdGlvbnMuY2hyb21lKSB7XG5cdFx0aWYgKG9wdGlvbnMuY2hyb21lLm1vZGUgPT09IFwicnVudGltZVwiKSB7XG5cdFx0XHRjb25zdCBvYnMgPSBuZXcgQ2hyb21lUnVudGltZU9ic2VydmFibGUodm9pZCAwLCBvcHRpb25zLmNocm9tZS5vcHRpb25zKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbmQ6IChtc2cpID0+IG9icy5zZW5kKG1zZyksXG5cdFx0XHRcdHJlcXVlc3Q6IChtc2cpID0+IG9icy5yZXF1ZXN0KG1zZyksXG5cdFx0XHRcdHN1YnNjcmliZTogKG8pID0+IG9icy5zdWJzY3JpYmUobyksXG5cdFx0XHRcdGNsb3NlOiAoKSA9PiBvYnMuY2xvc2UoKSxcblx0XHRcdFx0dHlwZTogXCJjaHJvbWUtcnVudGltZVwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKG9wdGlvbnMuY2hyb21lLm1vZGUgPT09IFwidGFic1wiKSB7XG5cdFx0XHRjb25zdCBvYnMgPSBuZXcgQ2hyb21lVGFic09ic2VydmFibGUob3B0aW9ucy5jaHJvbWUudGFiSWQsIG9wdGlvbnMuY2hyb21lLm9wdGlvbnMpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VuZDogKG1zZykgPT4gb2JzLnNlbmQobXNnKSxcblx0XHRcdFx0cmVxdWVzdDogKCkgPT4gUHJvbWlzZS5yZWplY3QoXCJOb3Qgc3VwcG9ydGVkXCIpLFxuXHRcdFx0XHRzdWJzY3JpYmU6IChvKSA9PiBvYnMuc3Vic2NyaWJlKG8pLFxuXHRcdFx0XHRjbG9zZTogKCkgPT4gb2JzLmNsb3NlKCksXG5cdFx0XHRcdHR5cGU6IFwiY2hyb21lLXRhYnNcIixcblx0XHRcdFx0Y2hhbm5lbE5hbWUsXG5cdFx0XHRcdGlzUmVhZHk6IHRydWVcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChvcHRpb25zLmNocm9tZS5tb2RlID09PSBcInBvcnRcIikge1xuXHRcdFx0Y29uc3Qgb2JzID0gbmV3IENocm9tZVBvcnRPYnNlcnZhYmxlKG9wdGlvbnMuY2hyb21lLnBvcnROYW1lID8/IGNoYW5uZWxOYW1lLCBvcHRpb25zLmNocm9tZS50YWJJZCk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZW5kOiAobXNnKSA9PiBvYnMuc2VuZChtc2cpLFxuXHRcdFx0XHRyZXF1ZXN0OiAoKSA9PiBQcm9taXNlLnJlamVjdChcIk5vdCBzdXBwb3J0ZWRcIiksXG5cdFx0XHRcdHN1YnNjcmliZTogKG8pID0+IG9icy5zdWJzY3JpYmUobyksXG5cdFx0XHRcdGNsb3NlOiAoKSA9PiBvYnMuY2xvc2UoKSxcblx0XHRcdFx0dHlwZTogXCJjaHJvbWUtcG9ydFwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogb2JzLmlzQ29ubmVjdGVkXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5jaHJvbWUubW9kZSA9PT0gXCJleHRlcm5hbFwiKSB7XG5cdFx0XHRjb25zdCBvYnMgPSBuZXcgQ2hyb21lRXh0ZXJuYWxPYnNlcnZhYmxlKG9wdGlvbnMuY2hyb21lLm9wdGlvbnM/LmV4dGVuc2lvbklkKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbmQ6IChtc2cpID0+IG9icy5zZW5kKG1zZyksXG5cdFx0XHRcdHJlcXVlc3Q6ICgpID0+IFByb21pc2UucmVqZWN0KFwiTm90IHN1cHBvcnRlZFwiKSxcblx0XHRcdFx0c3Vic2NyaWJlOiAobykgPT4gb2JzLnN1YnNjcmliZShvKSxcblx0XHRcdFx0Y2xvc2U6ICgpID0+IG9icy5jbG9zZSgpLFxuXHRcdFx0XHR0eXBlOiBcImNocm9tZS1leHRlcm5hbFwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0aWYgKG9wdGlvbnMuc29ja2V0aW8pIHtcblx0XHRjb25zdCBvYnMgPSBuZXcgU29ja2V0SU9PYnNlcnZhYmxlKG9wdGlvbnMuc29ja2V0aW8uc29ja2V0LCBjaGFubmVsTmFtZSwgb3B0aW9ucy5zb2NrZXRpby5vcHRpb25zKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogKG1zZykgPT4gb2JzLnNlbmQobXNnKSxcblx0XHRcdHJlcXVlc3Q6IChtc2cpID0+IG9icy5yZXF1ZXN0KG1zZyksXG5cdFx0XHRzdWJzY3JpYmU6IChvKSA9PiBvYnMuc3Vic2NyaWJlKG8pLFxuXHRcdFx0Y2xvc2U6ICgpID0+IG9icy5jbG9zZSgpLFxuXHRcdFx0dHlwZTogXCJzb2NrZXQtaW9cIixcblx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0aXNSZWFkeTogb2JzLmlzQ29ubmVjdGVkXG5cdFx0fTtcblx0fVxuXHRpZiAob3B0aW9ucy5zZXJ2aWNlV29ya2VyKSB7XG5cdFx0aWYgKG9wdGlvbnMuc2VydmljZVdvcmtlci5tb2RlID09PSBcImhvc3RcIikge1xuXHRcdFx0Y29uc3QgaG9zdCA9IG5ldyBTZXJ2aWNlV29ya2VySG9zdCh7XG5cdFx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0XHQuLi5vcHRpb25zLnNlcnZpY2VXb3JrZXIuY29uZmlnID8/IHt9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGJyaWRnZSA9IGJpbmRTZXJ2aWNlV29ya2VySG9zdEJyaWRnZShob3N0KTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbmQ6IChtc2cpID0+IHtcblx0XHRcdFx0XHRob3N0LmJyb2FkY2FzdFRvQWxsKG1zZyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlcXVlc3Q6ICgpID0+IFByb21pc2UucmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJTZXJ2aWNlV29ya2VySG9zdCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCByZXF1ZXN0KCk7IHVzZSBob3N0IEFQSXMgZGlyZWN0bHkuXCIpKSxcblx0XHRcdFx0c3Vic2NyaWJlOiAobykgPT4gaG9zdC5vbk1lc3NhZ2UodHlwZW9mIG8gPT09IFwiZnVuY3Rpb25cIiA/IG8gOiAobSkgPT4gby5uZXh0Py4obSkpLFxuXHRcdFx0XHRjbG9zZTogKCkgPT4gYnJpZGdlLnN0b3AoKSxcblx0XHRcdFx0dHlwZTogXCJzZXJ2aWNlLXdvcmtlclwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKG9wdGlvbnMuc2VydmljZVdvcmtlci5tb2RlID09PSBcImNsaWVudFwiKSB7XG5cdFx0XHRjb25zdCBjbGllbnQgPSBuZXcgU2VydmljZVdvcmtlckNsaWVudChjaGFubmVsTmFtZSk7XG5cdFx0XHRjbGllbnQuY29ubmVjdCgpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VuZDogKG1zZykgPT4gY2xpZW50LmVtaXQobXNnLnR5cGUsIG1zZy5wYXlsb2FkLCBtc2cuY2hhbm5lbCksXG5cdFx0XHRcdHJlcXVlc3Q6IChtc2cpID0+IGNsaWVudC5yZXF1ZXN0KG1zZy5wYXlsb2FkPy5hY3Rpb24gPz8gXCJ1bmtub3duXCIsIG1zZy5wYXlsb2FkKSxcblx0XHRcdFx0c3Vic2NyaWJlOiAobykgPT4gY2xpZW50LnN1YnNjcmliZSh0eXBlb2YgbyA9PT0gXCJmdW5jdGlvblwiID8gbyA6IChtKSA9PiBvLm5leHQ/LihtKSksXG5cdFx0XHRcdGNsb3NlOiAoKSA9PiBjbGllbnQuZGlzY29ubmVjdCgpLFxuXHRcdFx0XHR0eXBlOiBcInNlcnZpY2Utd29ya2VyXCIsXG5cdFx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRpc1JlYWR5OiBjbGllbnQuaXNDb25uZWN0ZWRcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdGlmIChvcHRpb25zLmF0b21pY3MpIHtcblx0XHRjb25zdCB0cmFuc3BvcnQgPSBuZXcgQXRvbWljc1RyYW5zcG9ydChjaGFubmVsTmFtZSwgb3B0aW9ucy5hdG9taWNzLnNlbmRCdWZmZXIsIG9wdGlvbnMuYXRvbWljcy5yZWN2QnVmZmVyLCBvcHRpb25zLmF0b21pY3MuY29uZmlnKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogKG1zZywgdHJhbnNmZXIpID0+IHRyYW5zcG9ydC5zZW5kKG1zZyksXG5cdFx0XHRyZXF1ZXN0OiAobXNnKSA9PiB0cmFuc3BvcnQucmVxdWVzdChtc2cpLFxuXHRcdFx0c3Vic2NyaWJlOiAobykgPT4gdHJhbnNwb3J0LnN1YnNjcmliZShvKSxcblx0XHRcdGNsb3NlOiAoKSA9PiB0cmFuc3BvcnQuY2xvc2UoKSxcblx0XHRcdHR5cGU6IFwiYXRvbWljc1wiLFxuXHRcdFx0Y2hhbm5lbE5hbWUsXG5cdFx0XHRpc1JlYWR5OiB0cnVlXG5cdFx0fTtcblx0fVxuXHRpZiAob3B0aW9ucy5ydGMpIHtcblx0XHRpZiAob3B0aW9ucy5ydGMubW9kZSA9PT0gXCJwZWVyXCIpIHtcblx0XHRcdGNvbnN0IHBlZXIgPSBuZXcgUlRDUGVlclRyYW5zcG9ydChjaGFubmVsTmFtZSwgb3B0aW9ucy5ydGMuY29uZmlnKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbmQ6IChtc2cpID0+IHBlZXIuc2VuZChtc2cpLFxuXHRcdFx0XHRyZXF1ZXN0OiAobXNnKSA9PiBwZWVyLnJlcXVlc3QobXNnKSxcblx0XHRcdFx0c3Vic2NyaWJlOiAobykgPT4gcGVlci5zdWJzY3JpYmUobyksXG5cdFx0XHRcdGNsb3NlOiAoKSA9PiBwZWVyLmNsb3NlKCksXG5cdFx0XHRcdHR5cGU6IFwicnRjLWRhdGFcIixcblx0XHRcdFx0Y2hhbm5lbE5hbWUsXG5cdFx0XHRcdGlzUmVhZHk6IHBlZXIuY29ubmVjdGlvblN0YXRlID09PSBcImNvbm5lY3RlZFwiXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5ydGMubW9kZSA9PT0gXCJtYW5hZ2VyXCIpIHtcblx0XHRcdGNvbnN0IG1hbmFnZXIgPSBuZXcgUlRDUGVlck1hbmFnZXIoY2hhbm5lbE5hbWUsIG9wdGlvbnMucnRjLmNvbmZpZyk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZW5kOiAobXNnKSA9PiBtYW5hZ2VyLmJyb2FkY2FzdChtc2cpLFxuXHRcdFx0XHRyZXF1ZXN0OiAoKSA9PiBQcm9taXNlLnJlamVjdChcIlVzZSBtYW5hZ2VyLnJlcXVlc3QocGVlcklkLCBtc2cpIGRpcmVjdGx5XCIpLFxuXHRcdFx0XHRzdWJzY3JpYmU6IChvKSA9PiBtYW5hZ2VyLnN1YnNjcmliZShvKSxcblx0XHRcdFx0Y2xvc2U6ICgpID0+IG1hbmFnZXIuY2xvc2UoKSxcblx0XHRcdFx0dHlwZTogXCJydGMtZGF0YVwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgc3ViamVjdCA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRyZXR1cm4ge1xuXHRcdHNlbmQ6IChtc2cpID0+IHN1YmplY3QubmV4dChtc2cpLFxuXHRcdHJlcXVlc3Q6ICgpID0+IFByb21pc2UucmVqZWN0KFwiSW50ZXJuYWwgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgcmVxdWVzdFwiKSxcblx0XHRzdWJzY3JpYmU6IChvKSA9PiBzdWJqZWN0LnN1YnNjcmliZShvKSxcblx0XHRjbG9zZTogKCkgPT4gc3ViamVjdC5jb21wbGV0ZSgpLFxuXHRcdHR5cGU6IFwiaW50ZXJuYWxcIixcblx0XHRjaGFubmVsTmFtZSxcblx0XHRpc1JlYWR5OiB0cnVlXG5cdH07XG59XG52YXIgVHJhbnNwb3J0UmVnaXN0cnkgPSBjbGFzcyB7XG5cdF90cmFuc3BvcnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cmVnaXN0ZXIobmFtZSwgdHJhbnNwb3J0KSB7XG5cdFx0dGhpcy5fdHJhbnNwb3J0cy5zZXQobmFtZSwgdHJhbnNwb3J0KTtcblx0fVxuXHRnZXQobmFtZSkge1xuXHRcdHJldHVybiB0aGlzLl90cmFuc3BvcnRzLmdldChuYW1lKTtcblx0fVxuXHRnZXRPckNyZWF0ZShuYW1lLCBvcHRpb25zID0ge30sIGNvbmZpZyA9IHt9KSB7XG5cdFx0bGV0IHRyYW5zcG9ydCA9IHRoaXMuX3RyYW5zcG9ydHMuZ2V0KG5hbWUpO1xuXHRcdGlmICghdHJhbnNwb3J0KSB7XG5cdFx0XHR0cmFuc3BvcnQgPSBjcmVhdGVUcmFuc3BvcnQobmFtZSwgb3B0aW9ucywgY29uZmlnKTtcblx0XHRcdHRoaXMuX3RyYW5zcG9ydHMuc2V0KG5hbWUsIHRyYW5zcG9ydCk7XG5cdFx0fVxuXHRcdHJldHVybiB0cmFuc3BvcnQ7XG5cdH1cblx0cmVtb3ZlKG5hbWUpIHtcblx0XHRjb25zdCB0cmFuc3BvcnQgPSB0aGlzLl90cmFuc3BvcnRzLmdldChuYW1lKTtcblx0XHRpZiAodHJhbnNwb3J0KSB7XG5cdFx0XHR0cmFuc3BvcnQuY2xvc2UoKTtcblx0XHRcdHRoaXMuX3RyYW5zcG9ydHMuZGVsZXRlKG5hbWUpO1xuXHRcdH1cblx0fVxuXHRjbG9zZUFsbCgpIHtcblx0XHRmb3IgKGNvbnN0IHRyYW5zcG9ydCBvZiB0aGlzLl90cmFuc3BvcnRzLnZhbHVlcygpKSB0cmFuc3BvcnQuY2xvc2UoKTtcblx0XHR0aGlzLl90cmFuc3BvcnRzLmNsZWFyKCk7XG5cdH1cblx0bGlzdCgpIHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl90cmFuc3BvcnRzLmtleXMoKSk7XG5cdH1cblx0Z2V0IHNpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3RyYW5zcG9ydHMuc2l6ZTtcblx0fVxufTtcbnZhciBfcmVnaXN0cnkgPSBudWxsO1xuZnVuY3Rpb24gZ2V0VHJhbnNwb3J0UmVnaXN0cnkoKSB7XG5cdGlmICghX3JlZ2lzdHJ5KSBfcmVnaXN0cnkgPSBuZXcgVHJhbnNwb3J0UmVnaXN0cnkoKTtcblx0cmV0dXJuIF9yZWdpc3RyeTtcbn1cbnZhciBVbmlmaWVkVHJhbnNwb3J0RmFjdG9yeSA9IHtcblx0Y3JlYXRlOiBjcmVhdGVUcmFuc3BvcnQsXG5cdHJlZ2lzdHJ5OiBnZXRUcmFuc3BvcnRSZWdpc3RyeSxcblx0ZnJvbVdvcmtlcjogKHdvcmtlciwgbmFtZSwgY29uZmlnKSA9PiBjcmVhdGVUcmFuc3BvcnQobmFtZSwgeyB3b3JrZXI6IHsgZXhpc3Rpbmc6IHdvcmtlciB9IH0sIGNvbmZpZyksXG5cdGZyb21Qb3J0OiAocG9ydCwgbmFtZSwgY29uZmlnKSA9PiBjcmVhdGVUcmFuc3BvcnQobmFtZSwgeyBwb3J0OiB7IHBvcnQgfSB9LCBjb25maWcpLFxuXHRmcm9tV2ViU29ja2V0OiAodXJsLCBuYW1lLCBjb25maWcpID0+IGNyZWF0ZVRyYW5zcG9ydChuYW1lLCB7IHdlYnNvY2tldDogeyB1cmwgfSB9LCBjb25maWcpLFxuXHRmcm9tQnJvYWRjYXN0OiAobmFtZSwgY29uZmlnKSA9PiBjcmVhdGVUcmFuc3BvcnQobmFtZSwgeyBicm9hZGNhc3Q6IHt9IH0sIGNvbmZpZyksXG5cdHNoYXJlZFdvcmtlcjoge1xuXHRcdGNsaWVudDogKHVybCwgbmFtZSwgb3B0cykgPT4gbmV3IFNoYXJlZFdvcmtlckNsaWVudCh1cmwsIG5hbWUsIG9wdHMpLFxuXHRcdGhvc3Q6IChuYW1lKSA9PiBuZXcgU2hhcmVkV29ya2VySG9zdChuYW1lKVxuXHR9LFxuXHRhdG9taWNzOiB7XG5cdFx0Y3JlYXRlOiAobmFtZSwgc2VuZCwgcmVjdiwgY29uZmlnKSA9PiBuZXcgQXRvbWljc1RyYW5zcG9ydChuYW1lLCBzZW5kLCByZWN2LCBjb25maWcpLFxuXHRcdGNyZWF0ZVBhaXI6IGNyZWF0ZUF0b21pY3NDaGFubmVsUGFpcixcblx0XHRidWZmZXI6IChzaXplKSA9PiBuZXcgQXRvbWljc0J1ZmZlcihzaXplKSxcblx0XHRyaW5nQnVmZmVyOiAoKSA9PiBuZXcgQXRvbWljc1JpbmdCdWZmZXIoKVxuXHR9LFxuXHRydGM6IHtcblx0XHRwZWVyOiAobmFtZSwgY29uZmlnKSA9PiBuZXcgUlRDUGVlclRyYW5zcG9ydChuYW1lLCBjb25maWcpLFxuXHRcdG1hbmFnZXI6IChuYW1lLCBjb25maWcpID0+IG5ldyBSVENQZWVyTWFuYWdlcihuYW1lLCBjb25maWcpLFxuXHRcdHNpZ25hbGluZzogY3JlYXRlQnJvYWRjYXN0U2lnbmFsaW5nXG5cdH0sXG5cdHBvcnQ6IHtcblx0XHRjcmVhdGU6IChwb3J0LCBuYW1lLCBjb25maWcpID0+IG5ldyBQb3J0VHJhbnNwb3J0KHBvcnQsIG5hbWUsIGNvbmZpZyksXG5cdFx0Y3JlYXRlUGFpcjogY3JlYXRlQ2hhbm5lbFBhaXIsXG5cdFx0cG9vbDogKGNvbmZpZykgPT4gbmV3IFBvcnRQb29sKGNvbmZpZyksXG5cdFx0d2luZG93Q29ubmVjdG9yOiAodGFyZ2V0LCBuYW1lKSA9PiBuZXcgV2luZG93UG9ydENvbm5lY3Rvcih0YXJnZXQsIG5hbWUpXG5cdH0sXG5cdHN0b3JhZ2U6IHtcblx0XHRjcmVhdGU6IChjb25maWcpID0+IG5ldyBUcmFuc2ZlcmFibGVTdG9yYWdlKGNvbmZpZyksXG5cdFx0bWVzc2FnZVF1ZXVlOiAoZGJOYW1lKSA9PiBuZXcgTWVzc2FnZVF1ZXVlU3RvcmFnZShkYk5hbWUpXG5cdH0sXG5cdHNlcnZpY2VXb3JrZXI6IHtcblx0XHRob3N0OiAoY29uZmlnKSA9PiBuZXcgU2VydmljZVdvcmtlckhvc3QoY29uZmlnKSxcblx0XHRjbGllbnQ6IChuYW1lKSA9PiBuZXcgU2VydmljZVdvcmtlckNsaWVudChuYW1lKVxuXHR9LFxuXHRzb2NrZXRpbzogKHNvY2tldCwgbmFtZSwgb3B0cykgPT4gbmV3IFNvY2tldElPT2JzZXJ2YWJsZShzb2NrZXQsIG5hbWUsIG9wdHMpLFxuXHRjaHJvbWU6IHtcblx0XHRydW50aW1lOiAob3B0cykgPT4gbmV3IENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlKHZvaWQgMCwgb3B0cyksXG5cdFx0dGFiczogKHRhYklkLCBvcHRzKSA9PiBuZXcgQ2hyb21lVGFic09ic2VydmFibGUodGFiSWQsIG9wdHMpLFxuXHRcdHBvcnQ6IChuYW1lLCB0YWJJZCkgPT4gbmV3IENocm9tZVBvcnRPYnNlcnZhYmxlKG5hbWUsIHRhYklkKVxuXHR9LFxuXHRkZXRlY3Q6IGRldGVjdFRyYW5zcG9ydFR5cGUkMSxcblx0bWV0YTogZ2V0VHJhbnNwb3J0TWV0YVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvc3RvcmFnZS9RdWV1ZWQudHNcbnZhciBRdWV1ZWRXb3JrZXJDaGFubmVsID0gY2xhc3Mge1xuXHRjb25maWc7XG5cdG9uQ2hhbm5lbFJlYWR5O1xuXHR1bmRlcmx5aW5nQ2hhbm5lbCA9IG51bGw7XG5cdGlzQ29ubmVjdGVkID0gZmFsc2U7XG5cdHJlcXVlc3RRdWV1ZSA9IFtdO1xuXHRjb25uZWN0aW9uUHJvbWlzZSA9IG51bGw7XG5cdGNvbm5lY3Rpb25SZXNvbHZlciA9IG51bGw7XG5cdGNvbnRleHQ7XG5cdGNvbnN0cnVjdG9yKGNvbmZpZywgb25DaGFubmVsUmVhZHkpIHtcblx0XHR0aGlzLmNvbmZpZyA9IGNvbmZpZztcblx0XHR0aGlzLm9uQ2hhbm5lbFJlYWR5ID0gb25DaGFubmVsUmVhZHk7XG5cdFx0dGhpcy5jb250ZXh0ID0gY29uZmlnLmNvbnRleHQgPz8gXCJ1bmtub3duXCI7XG5cdH1cblx0YXN5bmMgY29ubmVjdCh1bmRlcmx5aW5nQ2hhbm5lbCA9IG51bGwpIHtcblx0XHR0aGlzLnVuZGVybHlpbmdDaGFubmVsID0gdW5kZXJseWluZ0NoYW5uZWw7XG5cdH1cblx0YXN5bmMgcmVxdWVzdChtZXRob2QsIGFyZ3MgPSBbXSkge1xuXHRcdGlmICh0aGlzLmlzQ29ubmVjdGVkICYmIHRoaXMudW5kZXJseWluZ0NoYW5uZWwpIHJldHVybiB0aGlzLnVuZGVybHlpbmdDaGFubmVsLnJlcXVlc3QobWV0aG9kLCBhcmdzKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcXVldWVkUmVxdWVzdCA9IHtcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHRtZXRob2QsXG5cdFx0XHRcdGFyZ3MsXG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdCxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9O1xuXHRcdFx0dGhpcy5yZXF1ZXN0UXVldWUucHVzaChxdWV1ZWRSZXF1ZXN0KTtcblx0XHRcdGlmICghdGhpcy5jb25uZWN0aW9uUHJvbWlzZSkgdGhpcy5jb25uZWN0KCkuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVqZWN0QWxsUXVldWVkKGVycm9yKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGZsdXNoUXVldWUoKSB7XG5cdFx0aWYgKCF0aGlzLnVuZGVybHlpbmdDaGFubmVsKSByZXR1cm47XG5cdFx0Y29uc3QgcXVldWVDb3B5ID0gWy4uLnRoaXMucmVxdWVzdFF1ZXVlXTtcblx0XHR0aGlzLnJlcXVlc3RRdWV1ZSA9IFtdO1xuXHRcdGZvciAoY29uc3QgcXVldWVkUmVxdWVzdCBvZiBxdWV1ZUNvcHkpIHRyeSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnVuZGVybHlpbmdDaGFubmVsLnJlcXVlc3QocXVldWVkUmVxdWVzdC5tZXRob2QsIHF1ZXVlZFJlcXVlc3QuYXJncyk7XG5cdFx0XHRxdWV1ZWRSZXF1ZXN0LnJlc29sdmUocmVzdWx0KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0cXVldWVkUmVxdWVzdC5yZWplY3QoZXJyb3IpO1xuXHRcdH1cblx0fVxuXHRyZWplY3RBbGxRdWV1ZWQoZXJyb3IpIHtcblx0XHRjb25zdCBxdWV1ZUNvcHkgPSBbLi4udGhpcy5yZXF1ZXN0UXVldWVdO1xuXHRcdHRoaXMucmVxdWVzdFF1ZXVlID0gW107XG5cdFx0Zm9yIChjb25zdCBxdWV1ZWRSZXF1ZXN0IG9mIHF1ZXVlQ29weSkgcXVldWVkUmVxdWVzdC5yZWplY3QoZXJyb3IpO1xuXHR9XG5cdGdldFF1ZXVlU3RhdHVzKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpc0Nvbm5lY3RlZDogdGhpcy5pc0Nvbm5lY3RlZCxcblx0XHRcdHF1ZXVlZFJlcXVlc3RzOiB0aGlzLnJlcXVlc3RRdWV1ZS5sZW5ndGgsXG5cdFx0XHRpc0Nvbm5lY3Rpbmc6ICEhdGhpcy5jb25uZWN0aW9uUHJvbWlzZSAmJiAhdGhpcy5pc0Nvbm5lY3RlZFxuXHRcdH07XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5yZWplY3RBbGxRdWV1ZWQoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkNoYW5uZWwgY2xvc2VkXCIpKTtcblx0XHR0aGlzLnVuZGVybHlpbmdDaGFubmVsPy5jbG9zZSgpO1xuXHRcdHRoaXMudW5kZXJseWluZ0NoYW5uZWwgPSBudWxsO1xuXHRcdHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcblx0XHR0aGlzLmNvbm5lY3Rpb25Qcm9taXNlID0gbnVsbDtcblx0fVxufTtcbnZhciBnZXRDdXJyZW50VGFiSWQgPSBhc3luYyAoKSA9PiB7XG5cdGNvbnN0IHRhYnMgPSBhd2FpdCBjaHJvbWUudGFicy5xdWVyeSh7XG5cdFx0YWN0aXZlOiB0cnVlLFxuXHRcdGN1cnJlbnRXaW5kb3c6IHRydWVcblx0fSk7XG5cdGlmICh0YWJzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gYWN0aXZlIHRhYiBmb3VuZFwiKTtcblx0aWYgKCF0YWJzWzBdLmlkKSB0aHJvdyBuZXcgRXJyb3IoXCJBY3RpdmUgdGFiIGhhcyBubyBJRFwiKTtcblx0cmV0dXJuIHRhYnNbMF0uaWQ7XG59O1xudmFyIGdldFZpc2libGVUYWJJZCA9IGFzeW5jICgpID0+IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gYXdhaXQgZ2V0Q3VycmVudFRhYklkKCk7XG5cdH0gY2F0Y2gge1xuXHRcdGNvbnN0IHZpc2libGVUYWIgPSAoYXdhaXQgY2hyb21lLnRhYnMucXVlcnkoeyBjdXJyZW50V2luZG93OiB0cnVlIH0pKS5maW5kKCh0YWIpID0+IHRhYi5hY3RpdmUpO1xuXHRcdGlmICghdmlzaWJsZVRhYj8uaWQpIHRocm93IG5ldyBFcnJvcihcIk5vIHZpc2libGUgdGFiIGZvdW5kXCIpO1xuXHRcdHJldHVybiB2aXNpYmxlVGFiLmlkO1xuXHR9XG59O1xudmFyIHJlZ2lzdGVyV29ya2VyQVBJID0gKGFwaSwgY2hhbm5lbE5hbWUgPSBcIndvcmtlclwiKSA9PiB7XG5cdGNvbnN0IGNoYW5uZWxIYW5kbGVyID0gaW5pdENoYW5uZWxIYW5kbGVyKGNoYW5uZWxOYW1lID8/IFwid29ya2VyXCIpO1xuXHRPYmplY3Qua2V5cyhhcGkpLmZvckVhY2goKG1ldGhvZE5hbWUpID0+IHtcblx0XHRpZiAodHlwZW9mIGFwaVttZXRob2ROYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7fVxuXHR9KTtcblx0cmV0dXJuIGNoYW5uZWxIYW5kbGVyO1xufTtcbnZhciBPcHRpbWl6ZWRXb3JrZXJDaGFubmVsID0gY2xhc3Mge1xuXHRjaGFubmVsID0gbnVsbDtcblx0aXNDaGFubmVsUmVhZHkgPSBmYWxzZTtcblx0cGVuZGluZ1JlcXVlc3RzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0bWVzc2FnZVF1ZXVlID0gW107XG5cdHF1ZXVlZFJlcXVlc3RzID0gW107XG5cdGJhdGNoVGltZXI7XG5cdG9wdGlvbnM7XG5cdG9uQ2hhbm5lbFJlYWR5O1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsID0gbnVsbCwgb3B0aW9ucyA9IHt9LCBvbkNoYW5uZWxSZWFkeSkge1xuXHRcdHRoaXMuY2hhbm5lbCA9IGNoYW5uZWw7XG5cdFx0dGhpcy5pc0NoYW5uZWxSZWFkeSA9ICEhY2hhbm5lbDtcblx0XHR0aGlzLm9uQ2hhbm5lbFJlYWR5ID0gb25DaGFubmVsUmVhZHk7XG5cdFx0dGhpcy5vcHRpb25zID0ge1xuXHRcdFx0dGltZW91dDogM2U0LFxuXHRcdFx0cmV0cmllczogMyxcblx0XHRcdGNvbXByZXNzaW9uOiBmYWxzZSxcblx0XHRcdGJhdGNoaW5nOiB0cnVlLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH07XG5cdH1cblx0c2V0Q2hhbm5lbChjaGFubmVsKSB7XG5cdFx0dGhpcy5jaGFubmVsID0gY2hhbm5lbDtcblx0XHR0aGlzLmlzQ2hhbm5lbFJlYWR5ID0gdHJ1ZTtcblx0XHR0aGlzLm9uQ2hhbm5lbFJlYWR5Py4oY2hhbm5lbCk7XG5cdFx0dGhpcy5mbHVzaFF1ZXVlZFJlcXVlc3RzKCk7XG5cdH1cblx0YXN5bmMgcmVxdWVzdCh0eXBlLCBwYXlsb2FkLCBvcHRpb25zKSB7XG5cdFx0aWYgKCF0aGlzLmlzQ2hhbm5lbFJlYWR5IHx8ICF0aGlzLmNoYW5uZWwpIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBxdWV1ZWRSZXF1ZXN0ID0ge1xuXHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdG1ldGhvZDogdHlwZSxcblx0XHRcdFx0YXJnczogW3BheWxvYWRdLFxuXHRcdFx0XHRyZXNvbHZlLFxuXHRcdFx0XHRyZWplY3QsXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fTtcblx0XHRcdHRoaXMucXVldWVkUmVxdWVzdHMucHVzaChxdWV1ZWRSZXF1ZXN0KTtcblx0XHR9KTtcblx0XHRjb25zdCBvcHRzID0ge1xuXHRcdFx0Li4udGhpcy5vcHRpb25zLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH07XG5cdFx0Y29uc3QgbWVzc2FnZUlkID0gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKG1lc3NhZ2VJZCk7XG5cdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBSZXF1ZXN0IHRpbWVvdXQ6ICR7dHlwZX1gKSk7XG5cdFx0XHR9LCBvcHRzLnRpbWVvdXQpO1xuXHRcdFx0dGhpcy5wZW5kaW5nUmVxdWVzdHMuc2V0KG1lc3NhZ2VJZCwge1xuXHRcdFx0XHRyZXNvbHZlLFxuXHRcdFx0XHRyZWplY3QsXG5cdFx0XHRcdHRpbWVvdXRcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgZW52ZWxvcGUgPSB7XG5cdFx0XHRcdGlkOiBtZXNzYWdlSWQsXG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdHBheWxvYWQsXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fTtcblx0XHRcdGlmIChvcHRzLmJhdGNoaW5nKSB0aGlzLnF1ZXVlTWVzc2FnZShlbnZlbG9wZSk7XG5cdFx0XHRlbHNlIHRoaXMuc2VuZE1lc3NhZ2UoZW52ZWxvcGUpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGZsdXNoUXVldWVkUmVxdWVzdHMoKSB7XG5cdFx0aWYgKCF0aGlzLmNoYW5uZWwgfHwgdGhpcy5xdWV1ZWRSZXF1ZXN0cy5sZW5ndGggPT09IDApIHJldHVybjtcblx0XHRjb25zdCBxdWV1ZUNvcHkgPSBbLi4udGhpcy5xdWV1ZWRSZXF1ZXN0c107XG5cdFx0dGhpcy5xdWV1ZWRSZXF1ZXN0cyA9IFtdO1xuXHRcdGZvciAoY29uc3QgcXVldWVkUmVxdWVzdCBvZiBxdWV1ZUNvcHkpIHRyeSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QocXVldWVkUmVxdWVzdC5tZXRob2QsIC4uLnF1ZXVlZFJlcXVlc3Q/LmFyZ3MgPz8gW10pO1xuXHRcdFx0cXVldWVkUmVxdWVzdC5yZXNvbHZlKHJlc3VsdCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHF1ZXVlZFJlcXVlc3QucmVqZWN0KGVycm9yKTtcblx0XHR9XG5cdH1cblx0bm90aWZ5KHR5cGUsIHBheWxvYWQpIHtcblx0XHRjb25zdCBlbnZlbG9wZSA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGUsXG5cdFx0XHRwYXlsb2FkLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHRpZiAodGhpcy5vcHRpb25zLmJhdGNoaW5nKSB0aGlzLnF1ZXVlTWVzc2FnZShlbnZlbG9wZSk7XG5cdFx0ZWxzZSB0aGlzLnNlbmRNZXNzYWdlKGVudmVsb3BlKTtcblx0fVxuXHRhc3luYyAqc3RyZWFtKHR5cGUsIGRhdGEpIHtcblx0XHRmb3IgKGNvbnN0IGNodW5rIG9mIGRhdGEpIHlpZWxkIGF3YWl0IHRoaXMucmVxdWVzdChgJHt0eXBlfTpjaHVua2AsIGNodW5rKTtcblx0fVxuXHRxdWV1ZU1lc3NhZ2UoZW52ZWxvcGUpIHtcblx0XHR0aGlzLm1lc3NhZ2VRdWV1ZS5wdXNoKGVudmVsb3BlKTtcblx0XHRpZiAoIXRoaXMuYmF0Y2hUaW1lcikgdGhpcy5iYXRjaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmZsdXNoQmF0Y2goKTtcblx0XHR9LCAxNik7XG5cdH1cblx0Zmx1c2hCYXRjaCgpIHtcblx0XHRpZiAodGhpcy5tZXNzYWdlUXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG5cdFx0Y29uc3QgYmF0Y2hFbnZlbG9wZSA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwiYmF0Y2hcIixcblx0XHRcdHBheWxvYWQ6IHRoaXMubWVzc2FnZVF1ZXVlLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHR0aGlzLnNlbmRNZXNzYWdlKGJhdGNoRW52ZWxvcGUpO1xuXHRcdHRoaXMubWVzc2FnZVF1ZXVlID0gW107XG5cdFx0dGhpcy5iYXRjaFRpbWVyID0gdm9pZCAwO1xuXHR9XG5cdGFzeW5jIHNlbmRNZXNzYWdlKGVudmVsb3BlKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2hhbm5lbD8ucmVxdWVzdD8uKFwicHJvY2Vzc01lc3NhZ2VcIiwgW2VudmVsb3BlXSk7XG5cdFx0XHRpZiAoZW52ZWxvcGUucmVwbHlUbyAmJiB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5oYXMoZW52ZWxvcGUucmVwbHlUbykpIHtcblx0XHRcdFx0Y29uc3QgeyByZXNvbHZlLCB0aW1lb3V0IH0gPSB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5nZXQoZW52ZWxvcGUucmVwbHlUbyk7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0dGhpcy5wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKGVudmVsb3BlLnJlcGx5VG8pO1xuXHRcdFx0XHRyZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGlmICh0aGlzLnBlbmRpbmdSZXF1ZXN0cy5oYXMoZW52ZWxvcGUuaWQpKSB7XG5cdFx0XHRcdGNvbnN0IHsgcmVqZWN0LCB0aW1lb3V0IH0gPSB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5nZXQoZW52ZWxvcGUuaWQpO1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdHRoaXMucGVuZGluZ1JlcXVlc3RzLmRlbGV0ZShlbnZlbG9wZS5pZCk7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNsb3NlKCkge1xuXHRcdGlmICh0aGlzLmJhdGNoVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZXIpO1xuXHRcdGZvciAoY29uc3QgW2lkLCB7IHJlamVjdCwgdGltZW91dCB9XSBvZiB0aGlzLnBlbmRpbmdSZXF1ZXN0cykge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0cmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJDaGFubmVsIGNsb3NlZFwiKSk7XG5cdFx0fVxuXHRcdHRoaXMucGVuZGluZ1JlcXVlc3RzLmNsZWFyKCk7XG5cdFx0dGhpcy5jaGFubmVsPy5jbG9zZT8uKCk7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9tZXNzYWdpbmcvTWVzc2FnZVF1ZXVlLnRzXG52YXIgTWVzc2FnZVF1ZXVlID0gY2xhc3MgTWVzc2FnZVF1ZXVlIHtcblx0ZGIgPSBudWxsO1xuXHRkYlByb21pc2UgPSBudWxsO1xuXHRvcHRpb25zO1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcblx0XHR0aGlzLm9wdGlvbnMgPSB7XG5cdFx0XHRkYk5hbWU6IG9wdGlvbnMuZGJOYW1lID8/IFwiVW5pZm9ybU1lc3NhZ2VRdWV1ZVwiLFxuXHRcdFx0c3RvcmVOYW1lOiBvcHRpb25zLnN0b3JlTmFtZSA/PyBcIm1lc3NhZ2VzXCIsXG5cdFx0XHRtYXhSZXRyaWVzOiBvcHRpb25zLm1heFJldHJpZXMgPz8gMyxcblx0XHRcdGRlZmF1bHRFeHBpcmF0aW9uTXM6IG9wdGlvbnMuZGVmYXVsdEV4cGlyYXRpb25NcyA/PyA4NjRlNSxcblx0XHRcdGZhbGxiYWNrU3RvcmFnZUtleTogb3B0aW9ucy5mYWxsYmFja1N0b3JhZ2VLZXkgPz8gXCJ1bmlmb3JtX21lc3NhZ2VfcXVldWVcIlxuXHRcdH07XG5cdH1cblx0YXN5bmMgaW5pdERCKCkge1xuXHRcdGlmICh0aGlzLmRiKSByZXR1cm4gdGhpcy5kYjtcblx0XHRpZiAodGhpcy5kYlByb21pc2UpIHJldHVybiB0aGlzLmRiUHJvbWlzZTtcblx0XHRpZiAoIU1lc3NhZ2VRdWV1ZS5pc0luZGV4ZWREQkF2YWlsYWJsZSgpKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oXCJbTWVzc2FnZVF1ZXVlXSBJbmRleGVkREIgbm90IGF2YWlsYWJsZSwgdXNpbmcgc2Vzc2lvblN0b3JhZ2UgZmFsbGJhY2tcIik7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0dGhpcy5kYlByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4odGhpcy5vcHRpb25zLmRiTmFtZSwgMSk7XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUud2FybihcIltNZXNzYWdlUXVldWVdIEluZGV4ZWREQiBvcGVuIGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIHNlc3Npb25TdG9yYWdlXCIpO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkluZGV4ZWREQiBub3QgYXZhaWxhYmxlXCIpKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy5kYiA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRyZXNvbHZlKHRoaXMuZGIpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcblx0XHRcdFx0aWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lLCB7IGtleVBhdGg6IFwiaWRcIiB9KTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcInRpbWVzdGFtcFwiLCBcInRpbWVzdGFtcFwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRcdFx0c3RvcmUuY3JlYXRlSW5kZXgoXCJ0eXBlXCIsIFwidHlwZVwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRcdFx0c3RvcmUuY3JlYXRlSW5kZXgoXCJwcmlvcml0eVwiLCBcInByaW9yaXR5XCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcImRlc3RpbmF0aW9uXCIsIFwiZGVzdGluYXRpb25cIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH0pO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLmRiID0gYXdhaXQgdGhpcy5kYlByb21pc2U7XG5cdFx0XHRyZXR1cm4gdGhpcy5kYjtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0fVxuXHRnZW5lcmF0ZUlkKCkge1xuXHRcdHJldHVybiBgbXNnXyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTEpfWA7XG5cdH1cblx0YXN5bmMgcXVldWVNZXNzYWdlKHR5cGUsIGRhdGEsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IG1lc3NhZ2UgPSB7XG5cdFx0XHRpZDogdGhpcy5nZW5lcmF0ZUlkKCksXG5cdFx0XHR0eXBlLFxuXHRcdFx0ZGF0YSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcblx0XHRcdHByaW9yaXR5OiBvcHRpb25zLnByaW9yaXR5ID8/IFwibm9ybWFsXCIsXG5cdFx0XHRyZXRyeUNvdW50OiAwLFxuXHRcdFx0bWF4UmV0cmllczogb3B0aW9ucy5tYXhSZXRyaWVzID8/IHRoaXMub3B0aW9ucy5tYXhSZXRyaWVzLFxuXHRcdFx0ZXhwaXJlc0F0OiBvcHRpb25zLmV4cGlyZXNBdCA/PyBEYXRlLm5vdygpICsgdGhpcy5vcHRpb25zLmRlZmF1bHRFeHBpcmF0aW9uTXMsXG5cdFx0XHRkZXN0aW5hdGlvbjogb3B0aW9ucy5kZXN0aW5hdGlvbixcblx0XHRcdG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhXG5cdFx0fTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLmluaXREQigpO1xuXHRcdFx0aWYgKGRiKSBhd2FpdCB0aGlzLmFkZFRvSW5kZXhlZERCKGRiLCBtZXNzYWdlKTtcblx0XHRcdGVsc2UgdGhpcy5hZGRUb1Nlc3Npb25TdG9yYWdlKG1lc3NhZ2UpO1xuXHRcdFx0Y29uc29sZS5sb2coYFtNZXNzYWdlUXVldWVdIFF1ZXVlZCBtZXNzYWdlOiAke3R5cGV9YCwgbWVzc2FnZS5pZCk7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5pZDtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIltNZXNzYWdlUXVldWVdIEZhaWxlZCB0byBxdWV1ZSBtZXNzYWdlOlwiLCBlcnJvcik7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cdH1cblx0YXN5bmMgZ2V0UXVldWVkTWVzc2FnZXMoZGVzdGluYXRpb24pIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLmluaXREQigpO1xuXHRcdFx0bGV0IG1lc3NhZ2VzO1xuXHRcdFx0aWYgKGRiKSBtZXNzYWdlcyA9IGF3YWl0IHRoaXMuZ2V0QWxsRnJvbUluZGV4ZWREQihkYik7XG5cdFx0XHRlbHNlIG1lc3NhZ2VzID0gdGhpcy5nZXRBbGxGcm9tU2Vzc2lvblN0b3JhZ2UoKTtcblx0XHRcdGlmIChkZXN0aW5hdGlvbikgbWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoKG1zZykgPT4gbXNnLmRlc3RpbmF0aW9uID09PSBkZXN0aW5hdGlvbik7XG5cdFx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VzLmZpbHRlcigobXNnKSA9PiAhbXNnLmV4cGlyZXNBdCB8fCBtc2cuZXhwaXJlc0F0ID4gbm93KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIltNZXNzYWdlUXVldWVdIEZhaWxlZCB0byBnZXQgcXVldWVkIG1lc3NhZ2VzOlwiLCBlcnJvcik7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRBbGxGcm9tU2Vzc2lvblN0b3JhZ2UoKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgcmVtb3ZlTWVzc2FnZShtZXNzYWdlSWQpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLmluaXREQigpO1xuXHRcdFx0aWYgKGRiKSBhd2FpdCB0aGlzLmRlbGV0ZUZyb21JbmRleGVkREIoZGIsIG1lc3NhZ2VJZCk7XG5cdFx0XHRlbHNlIHRoaXMuZGVsZXRlRnJvbVNlc3Npb25TdG9yYWdlKG1lc3NhZ2VJZCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJbTWVzc2FnZVF1ZXVlXSBGYWlsZWQgdG8gcmVtb3ZlIG1lc3NhZ2U6XCIsIGVycm9yKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgdXBkYXRlTWVzc2FnZVJldHJ5KG1lc3NhZ2VJZCwgcmV0cnlDb3VudCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMuaW5pdERCKCk7XG5cdFx0XHRpZiAoZGIpIGF3YWl0IHRoaXMudXBkYXRlSW5JbmRleGVkREIoZGIsIG1lc3NhZ2VJZCwgeyByZXRyeUNvdW50IH0pO1xuXHRcdFx0ZWxzZSB0aGlzLnVwZGF0ZUluU2Vzc2lvblN0b3JhZ2UobWVzc2FnZUlkLCB7IHJldHJ5Q291bnQgfSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJbTWVzc2FnZVF1ZXVlXSBGYWlsZWQgdG8gdXBkYXRlIG1lc3NhZ2UgcmV0cnk6XCIsIGVycm9yKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgY2xlYXJFeHBpcmVkTWVzc2FnZXMoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgdGhpcy5nZXRRdWV1ZWRNZXNzYWdlcygpO1xuXHRcdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRcdGNvbnN0IGV4cGlyZWRJZHMgPSBtZXNzYWdlcy5maWx0ZXIoKG1zZykgPT4gbXNnLmV4cGlyZXNBdCAmJiBtc2cuZXhwaXJlc0F0IDw9IG5vdykubWFwKChtc2cpID0+IG1zZy5pZCk7XG5cdFx0XHRmb3IgKGNvbnN0IGlkIG9mIGV4cGlyZWRJZHMpIGF3YWl0IHRoaXMucmVtb3ZlTWVzc2FnZShpZCk7XG5cdFx0XHRpZiAoZXhwaXJlZElkcy5sZW5ndGggPiAwKSBjb25zb2xlLmxvZyhgW01lc3NhZ2VRdWV1ZV0gQ2xlYXJlZCAke2V4cGlyZWRJZHMubGVuZ3RofSBleHBpcmVkIG1lc3NhZ2VzYCk7XG5cdFx0XHRyZXR1cm4gZXhwaXJlZElkcy5sZW5ndGg7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJbTWVzc2FnZVF1ZXVlXSBGYWlsZWQgdG8gY2xlYXIgZXhwaXJlZCBtZXNzYWdlczpcIiwgZXJyb3IpO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIGNsZWFyQWxsKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMuaW5pdERCKCk7XG5cdFx0XHRpZiAoZGIpIGF3YWl0IHRoaXMuY2xlYXJJbmRleGVkREIoZGIpO1xuXHRcdFx0ZWxzZSBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMub3B0aW9ucy5mYWxsYmFja1N0b3JhZ2VLZXkpO1xuXHRcdFx0Y29uc29sZS5sb2coXCJbTWVzc2FnZVF1ZXVlXSBDbGVhcmVkIGFsbCBtZXNzYWdlc1wiKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIltNZXNzYWdlUXVldWVdIEZhaWxlZCB0byBjbGVhciBhbGwgbWVzc2FnZXM6XCIsIGVycm9yKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgZ2V0U3RhdHMoKSB7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBhd2FpdCB0aGlzLmdldFF1ZXVlZE1lc3NhZ2VzKCk7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRjb25zdCBieVByaW9yaXR5ID0ge1xuXHRcdFx0bG93OiAwLFxuXHRcdFx0bm9ybWFsOiAwLFxuXHRcdFx0aGlnaDogMFxuXHRcdH07XG5cdFx0Y29uc3QgYnlEZXN0aW5hdGlvbiA9IHt9O1xuXHRcdGxldCBleHBpcmVkID0gMDtcblx0XHRmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykge1xuXHRcdFx0YnlQcmlvcml0eVttc2cucHJpb3JpdHldKys7XG5cdFx0XHRpZiAobXNnLmRlc3RpbmF0aW9uKSBieURlc3RpbmF0aW9uW21zZy5kZXN0aW5hdGlvbl0gPSAoYnlEZXN0aW5hdGlvblttc2cuZGVzdGluYXRpb25dIHx8IDApICsgMTtcblx0XHRcdGlmIChtc2cuZXhwaXJlc0F0ICYmIG1zZy5leHBpcmVzQXQgPD0gbm93KSBleHBpcmVkKys7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR0b3RhbDogbWVzc2FnZXMubGVuZ3RoLFxuXHRcdFx0YnlQcmlvcml0eSxcblx0XHRcdGJ5RGVzdGluYXRpb24sXG5cdFx0XHRleHBpcmVkXG5cdFx0fTtcblx0fVxuXHRhc3luYyBhZGRUb0luZGV4ZWREQihkYiwgbWVzc2FnZSkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gZGIudHJhbnNhY3Rpb24oW3RoaXMub3B0aW9ucy5zdG9yZU5hbWVdLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKS5hZGQobWVzc2FnZSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUoKTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBnZXRBbGxGcm9tSW5kZXhlZERCKGRiKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbihbdGhpcy5vcHRpb25zLnN0b3JlTmFtZV0sIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUodGhpcy5vcHRpb25zLnN0b3JlTmFtZSkuZ2V0QWxsKCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGRlbGV0ZUZyb21JbmRleGVkREIoZGIsIGlkKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbihbdGhpcy5vcHRpb25zLnN0b3JlTmFtZV0sIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpLmRlbGV0ZShpZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUoKTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyB1cGRhdGVJbkluZGV4ZWREQihkYiwgaWQsIHVwZGF0ZXMpIHtcblx0XHRjb25zdCBzdG9yZSA9IGRiLnRyYW5zYWN0aW9uKFt0aGlzLm9wdGlvbnMuc3RvcmVOYW1lXSwgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUodGhpcy5vcHRpb25zLnN0b3JlTmFtZSk7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBzdG9yZS5nZXQoaWQpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKHJlcXVlc3QucmVzdWx0KTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHR9KTtcblx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0T2JqZWN0LmFzc2lnbihtZXNzYWdlLCB1cGRhdGVzKTtcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdCA9IHN0b3JlLnB1dChtZXNzYWdlKTtcblx0XHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKCk7XG5cdFx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRhc3luYyBjbGVhckluZGV4ZWREQihkYikge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gZGIudHJhbnNhY3Rpb24oW3RoaXMub3B0aW9ucy5zdG9yZU5hbWVdLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKS5jbGVhcigpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKCk7XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7XG5cdFx0fSk7XG5cdH1cblx0Z2V0QWxsRnJvbVNlc3Npb25TdG9yYWdlKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBzdG9yZWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMub3B0aW9ucy5mYWxsYmFja1N0b3JhZ2VLZXkpO1xuXHRcdFx0cmV0dXJuIHN0b3JlZCA/IEpTT04ucGFyc2Uoc3RvcmVkKSA6IFtdO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0fVxuXHRhZGRUb1Nlc3Npb25TdG9yYWdlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBleGlzdGluZyA9IHRoaXMuZ2V0QWxsRnJvbVNlc3Npb25TdG9yYWdlKCk7XG5cdFx0ZXhpc3RpbmcucHVzaChtZXNzYWdlKTtcblx0XHRzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMub3B0aW9ucy5mYWxsYmFja1N0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KGV4aXN0aW5nKSk7XG5cdH1cblx0ZGVsZXRlRnJvbVNlc3Npb25TdG9yYWdlKGlkKSB7XG5cdFx0Y29uc3QgZmlsdGVyZWQgPSB0aGlzLmdldEFsbEZyb21TZXNzaW9uU3RvcmFnZSgpLmZpbHRlcigobXNnKSA9PiBtc2cuaWQgIT09IGlkKTtcblx0XHRzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMub3B0aW9ucy5mYWxsYmFja1N0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KGZpbHRlcmVkKSk7XG5cdH1cblx0dXBkYXRlSW5TZXNzaW9uU3RvcmFnZShpZCwgdXBkYXRlcykge1xuXHRcdGNvbnN0IGV4aXN0aW5nID0gdGhpcy5nZXRBbGxGcm9tU2Vzc2lvblN0b3JhZ2UoKTtcblx0XHRjb25zdCBtZXNzYWdlID0gZXhpc3RpbmcuZmluZCgobXNnKSA9PiBtc2cuaWQgPT09IGlkKTtcblx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0T2JqZWN0LmFzc2lnbihtZXNzYWdlLCB1cGRhdGVzKTtcblx0XHRcdHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5vcHRpb25zLmZhbGxiYWNrU3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkoZXhpc3RpbmcpKTtcblx0XHR9XG5cdH1cblx0c3RhdGljIGlzSW5kZXhlZERCQXZhaWxhYmxlKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdHlwZW9mIGluZGV4ZWREQiAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgSURCVHJhbnNhY3Rpb24gIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIElEQktleVJhbmdlICE9PSBcInVuZGVmaW5lZFwiO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxufTtcbnZhciBpbnN0YW5jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuZnVuY3Rpb24gZ2V0TWVzc2FnZVF1ZXVlKG9wdGlvbnMpIHtcblx0Y29uc3Qga2V5ID0gb3B0aW9ucz8uZGJOYW1lID8/IFwiZGVmYXVsdFwiO1xuXHRpZiAoIWluc3RhbmNlcy5oYXMoa2V5KSkgaW5zdGFuY2VzLnNldChrZXksIG5ldyBNZXNzYWdlUXVldWUob3B0aW9ucykpO1xuXHRyZXR1cm4gaW5zdGFuY2VzLmdldChrZXkpO1xufVxuZnVuY3Rpb24gY3JlYXRlTWVzc2FnZVF1ZXVlKG9wdGlvbnMpIHtcblx0cmV0dXJuIG5ldyBNZXNzYWdlUXVldWUob3B0aW9ucyk7XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3V0aWxzL1dyYXBwZXJzLnRzXG52YXIgcnVudGltZUxpc3RlbmVyUmVnaXN0cnkgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIHJ1bnRpbWVMaXN0ZW5lckluc3RhbGxlZCA9IGZhbHNlO1xudmFyIGVuc3VyZVJ1bnRpbWVMaXN0ZW5lciA9ICgpID0+IHtcblx0aWYgKHJ1bnRpbWVMaXN0ZW5lckluc3RhbGxlZCkgcmV0dXJuO1xuXHRydW50aW1lTGlzdGVuZXJJbnN0YWxsZWQgPSB0cnVlO1xuXHRjaHJvbWU/LnJ1bnRpbWU/Lm9uTWVzc2FnZT8uYWRkTGlzdGVuZXI/LigobWVzc2FnZSwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpID0+IHtcblx0XHRjb25zdCBjaGFubmVsTmFtZSA9IG1lc3NhZ2U/LmNoYW5uZWxOYW1lID8/IG1lc3NhZ2U/LnRhcmdldDtcblx0XHRpZiAoIWNoYW5uZWxOYW1lKSByZXR1cm47XG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gcnVudGltZUxpc3RlbmVyUmVnaXN0cnkuZ2V0KGNoYW5uZWxOYW1lKTtcblx0XHRpZiAoIWxpc3RlbmVycyB8fCBsaXN0ZW5lcnMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuXHRcdGNvbnN0IGV2ZW50ID0ge1xuXHRcdFx0ZGF0YTogbWVzc2FnZSxcblx0XHRcdG9yaWdpbjogc2VuZGVyPy51cmwgfHwgXCJjaHJvbWUtZXh0ZW5zaW9uXCIsXG5cdFx0XHRzb3VyY2U6IHNlbmRlclxuXHRcdH07XG5cdFx0Zm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHRyeSB7XG5cdFx0XHRjb25zdCBvdXQgPSBsaXN0ZW5lcihldmVudCwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpO1xuXHRcdFx0aWYgKG91dCAmJiB0eXBlb2Ygb3V0Py5jYXRjaCA9PT0gXCJmdW5jdGlvblwiKSBvdXQuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKFwiW0Nocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWxdIExpc3RlbmVyIGVycm9yOlwiLCBlcnJvcikpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiW0Nocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWxdIExpc3RlbmVyIGVycm9yOlwiLCBlcnJvcik7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9KTtcbn07XG52YXIgQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbCA9IGNsYXNzIHtcblx0Y2hhbm5lbE5hbWU7XG5cdGxpc3RlbmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lKSB7XG5cdFx0dGhpcy5jaGFubmVsTmFtZSA9IGNoYW5uZWxOYW1lO1xuXHRcdGVuc3VyZVJ1bnRpbWVMaXN0ZW5lcigpO1xuXHR9XG5cdGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcblx0XHRpZiAodHlwZSAhPT0gXCJtZXNzYWdlXCIpIHJldHVybjtcblx0XHR0aGlzLmxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuXHRcdGxldCBzZXQgPSBydW50aW1lTGlzdGVuZXJSZWdpc3RyeS5nZXQodGhpcy5jaGFubmVsTmFtZSk7XG5cdFx0aWYgKCFzZXQpIHtcblx0XHRcdHNldCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdFx0XHRydW50aW1lTGlzdGVuZXJSZWdpc3RyeS5zZXQodGhpcy5jaGFubmVsTmFtZSwgc2V0KTtcblx0XHR9XG5cdFx0c2V0LmFkZChsaXN0ZW5lcik7XG5cdH1cblx0cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuXHRcdGlmICh0eXBlICE9PSBcIm1lc3NhZ2VcIikgcmV0dXJuO1xuXHRcdHRoaXMubGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG5cdFx0cnVudGltZUxpc3RlbmVyUmVnaXN0cnkuZ2V0KHRoaXMuY2hhbm5lbE5hbWUpPy5kZWxldGUobGlzdGVuZXIpO1xuXHR9XG5cdHBvc3RNZXNzYWdlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBtZXNzYWdlV2l0aENoYW5uZWwgPSB7XG5cdFx0XHQuLi5tZXNzYWdlLFxuXHRcdFx0Y2hhbm5lbE5hbWU6IHRoaXMuY2hhbm5lbE5hbWUsXG5cdFx0XHRzb3VyY2U6IFwiYnJvYWRjYXN0LWNoYW5uZWxcIlxuXHRcdH07XG5cdFx0Y2hyb21lPy5ydW50aW1lPy5zZW5kTWVzc2FnZT8uKG1lc3NhZ2VXaXRoQ2hhbm5lbCwgKCkgPT4gdm9pZCAwKTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHRmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSBydW50aW1lTGlzdGVuZXJSZWdpc3RyeS5nZXQodGhpcy5jaGFubmVsTmFtZSk/LmRlbGV0ZShsaXN0ZW5lcik7XG5cdFx0dGhpcy5saXN0ZW5lcnMuY2xlYXIoKTtcblx0fVxufTtcbnZhciBDaHJvbWVFeHRlbnNpb25UYWJzQ2hhbm5lbCA9IGNsYXNzIHtcblx0d3JhcHBlZEJ5T3JpZ2luYWwgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHR3cmFwcGVkTGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0Y2hhbm5lbE5hbWU7XG5cdG1vZGUgPSBcImJyb2FkY2FzdFwiO1xuXHR0YWJGaWx0ZXI7XG5cdHRhYklkR2V0dGVyO1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsTmFtZSwgb3B0aW9ucykge1xuXHRcdHRoaXMuY2hhbm5lbE5hbWUgPSBjaGFubmVsTmFtZTtcblx0XHR0aGlzLm1vZGUgPSBvcHRpb25zPy5tb2RlIHx8IFwiYnJvYWRjYXN0XCI7XG5cdFx0dGhpcy50YWJGaWx0ZXIgPSBvcHRpb25zPy50YWJGaWx0ZXI7XG5cdFx0dGhpcy50YWJJZEdldHRlciA9IG9wdGlvbnM/LnRhYklkR2V0dGVyIHx8IHRoaXMuZ2V0Q3VycmVudFRhYklkO1xuXHRcdHRoaXMuc3RhcnRMaXN0ZW5pbmcoKTtcblx0fVxuXHRzdGFydExpc3RlbmluZygpIHtcblx0XHRlbnN1cmVSdW50aW1lTGlzdGVuZXIoKTtcblx0fVxuXHRhZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKHR5cGUgIT09IFwibWVzc2FnZVwiKSByZXR1cm47XG5cdFx0aWYgKHRoaXMud3JhcHBlZEJ5T3JpZ2luYWwuZ2V0KGxpc3RlbmVyKSkgcmV0dXJuO1xuXHRcdGNvbnN0IHdyYXBwZWQgPSBhc3luYyAoZXZlbnQsIHNlbmRlciwgc2VuZFJlc3BvbnNlKSA9PiB7XG5cdFx0XHRldmVudD8uZGF0YTtcblx0XHRcdGlmICghc2VuZGVyPy50YWIpIHJldHVybjtcblx0XHRcdGlmICh0aGlzLm1vZGUgPT09IFwiY3VycmVudC10YWJcIikge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRUYWJJZCA9IGF3YWl0IHRoaXMudGFiSWRHZXR0ZXI/LigpO1xuXHRcdFx0XHRpZiAodHlwZW9mIHRhcmdldFRhYklkID09PSBcIm51bWJlclwiICYmIHNlbmRlci50YWIuaWQgIT09IHRhcmdldFRhYklkKSByZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5tb2RlID09PSBcImJyb2FkY2FzdFwiICYmIHRoaXMudGFiRmlsdGVyICYmICF0aGlzLnRhYkZpbHRlcihzZW5kZXIudGFiKSkgcmV0dXJuO1xuXHRcdFx0cmV0dXJuIGxpc3RlbmVyKHtcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdG9yaWdpbjogc2VuZGVyLnVybCB8fCBcImNocm9tZS1leHRlbnNpb24tdGFiXCIsXG5cdFx0XHRcdHRhYjogc2VuZGVyLnRhYlxuXHRcdFx0fSwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpO1xuXHRcdH07XG5cdFx0dGhpcy53cmFwcGVkQnlPcmlnaW5hbC5zZXQobGlzdGVuZXIsIHdyYXBwZWQpO1xuXHRcdHRoaXMud3JhcHBlZExpc3RlbmVycy5hZGQod3JhcHBlZCk7XG5cdFx0bGV0IHNldCA9IHJ1bnRpbWVMaXN0ZW5lclJlZ2lzdHJ5LmdldCh0aGlzLmNoYW5uZWxOYW1lKTtcblx0XHRpZiAoIXNldCkge1xuXHRcdFx0c2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0XHRcdHJ1bnRpbWVMaXN0ZW5lclJlZ2lzdHJ5LnNldCh0aGlzLmNoYW5uZWxOYW1lLCBzZXQpO1xuXHRcdH1cblx0XHRzZXQuYWRkKHdyYXBwZWQpO1xuXHR9XG5cdHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcblx0XHRpZiAodHlwZSAhPT0gXCJtZXNzYWdlXCIpIHJldHVybjtcblx0XHRjb25zdCB3cmFwcGVkID0gdGhpcy53cmFwcGVkQnlPcmlnaW5hbC5nZXQobGlzdGVuZXIpO1xuXHRcdGlmICghd3JhcHBlZCkgcmV0dXJuO1xuXHRcdHRoaXMud3JhcHBlZEJ5T3JpZ2luYWwuZGVsZXRlKGxpc3RlbmVyKTtcblx0XHR0aGlzLndyYXBwZWRMaXN0ZW5lcnMuZGVsZXRlKHdyYXBwZWQpO1xuXHRcdHJ1bnRpbWVMaXN0ZW5lclJlZ2lzdHJ5LmdldCh0aGlzLmNoYW5uZWxOYW1lKT8uZGVsZXRlKHdyYXBwZWQpO1xuXHR9XG5cdHNlbmRUb1RhYih0YWJJZCwgbWVzc2FnZSkge1xuXHRcdGNvbnN0IG1lc3NhZ2VXaXRoQ2hhbm5lbCA9IHtcblx0XHRcdGNoYW5uZWxOYW1lOiB0aGlzLmNoYW5uZWxOYW1lLFxuXHRcdFx0c291cmNlOiBcInRhYnMtY2hhbm5lbFwiLFxuXHRcdFx0Li4ubWVzc2FnZVxuXHRcdH07XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNocm9tZT8udGFicz8uc2VuZE1lc3NhZ2U/Lih0YWJJZCwgbWVzc2FnZVdpdGhDaGFubmVsLCAocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0aWYgKGNocm9tZT8ucnVudGltZT8ubGFzdEVycm9yKSByZWplY3QobmV3IEVycm9yKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvci5tZXNzYWdlKSk7XG5cdFx0XHRcdGVsc2UgcmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBzZW5kVG9BY3RpdmVUYWIobWVzc2FnZSkge1xuXHRcdGlmICh0aGlzLm1vZGUgPT09IFwiY3VycmVudC10YWJcIiAmJiB0aGlzLnRhYklkR2V0dGVyKSB7XG5cdFx0XHRjb25zdCB0YWJJZCA9IGF3YWl0IHRoaXMudGFiSWRHZXR0ZXIoKTtcblx0XHRcdHJldHVybiB0aGlzLnNlbmRUb1RhYih0YWJJZCwgbWVzc2FnZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHRhYnMgPSBhd2FpdCBjaHJvbWUudGFicy5xdWVyeSh7XG5cdFx0XHRcdGFjdGl2ZTogdHJ1ZSxcblx0XHRcdFx0Y3VycmVudFdpbmRvdzogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0XHRpZiAodGFicy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihcIk5vIGFjdGl2ZSB0YWIgZm91bmRcIik7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZW5kVG9UYWIodGFic1swXS5pZCwgbWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIGJyb2FkY2FzdFRvVGFicyhtZXNzYWdlLCBvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMubW9kZSA9PT0gXCJjdXJyZW50LXRhYlwiKSB0cnkge1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRUb0FjdGl2ZVRhYihtZXNzYWdlKTtcblx0XHRcdHJldHVybiBbe1xuXHRcdFx0XHR0YWJJZDogYXdhaXQgdGhpcy50YWJJZEdldHRlcigpLFxuXHRcdFx0XHRyZXNwb25zZVxuXHRcdFx0fV07XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHJldHVybiBbeyBlcnJvciB9XTtcblx0XHR9XG5cdFx0Y29uc3QgcXVlcnkgPSB7IHN0YXR1czogXCJjb21wbGV0ZVwiIH07XG5cdFx0aWYgKCFvcHRpb25zPy5hbGxXaW5kb3dzKSBxdWVyeS5jdXJyZW50V2luZG93ID0gdHJ1ZTtcblx0XHRjb25zdCB0YXJnZXRUYWJzID0gKGF3YWl0IGNocm9tZS50YWJzLnF1ZXJ5KHF1ZXJ5KSkuZmlsdGVyKCh0YWIpID0+IHtcblx0XHRcdGlmIChvcHRpb25zPy50YWJGaWx0ZXIgJiYgIW9wdGlvbnMudGFiRmlsdGVyKHRhYikpIHJldHVybiBmYWxzZTtcblx0XHRcdGlmICh0aGlzLnRhYkZpbHRlciAmJiAhdGhpcy50YWJGaWx0ZXIodGFiKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cdFx0Y29uc3QgbWVzc2FnZVdpdGhDaGFubmVsID0ge1xuXHRcdFx0Y2hhbm5lbE5hbWU6IHRoaXMuY2hhbm5lbE5hbWUsXG5cdFx0XHRzb3VyY2U6IFwidGFicy1jaGFubmVsXCIsXG5cdFx0XHQuLi5tZXNzYWdlXG5cdFx0fTtcblx0XHRjb25zdCBwcm9taXNlcyA9IHRhcmdldFRhYnMubWFwKCh0YWIpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNocm9tZT8udGFicz8uc2VuZE1lc3NhZ2U/Lih0YWIuaWQsIG1lc3NhZ2VXaXRoQ2hhbm5lbCwgKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdGlmIChjaHJvbWU/LnJ1bnRpbWU/Lmxhc3RFcnJvcikgcmVqZWN0KG5ldyBFcnJvcihjaHJvbWUucnVudGltZS5sYXN0RXJyb3IubWVzc2FnZSkpO1xuXHRcdFx0XHRlbHNlIHJlc29sdmUoe1xuXHRcdFx0XHRcdHRhYklkOiB0YWIuaWQsXG5cdFx0XHRcdFx0cmVzcG9uc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KSk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cdH1cblx0YXN5bmMgcG9zdE1lc3NhZ2UobWVzc2FnZSkge1xuXHRcdGNvbnN0IHRhYklkID0gYXdhaXQgdGhpcy50YWJJZEdldHRlcigpO1xuXHRcdGNvbnN0IG1lc3NhZ2VXaXRoQ2hhbm5lbCA9IHtcblx0XHRcdGNoYW5uZWxOYW1lOiB0aGlzLmNoYW5uZWxOYW1lLFxuXHRcdFx0c291cmNlOiBcInRhYnMtY2hhbm5lbFwiLFxuXHRcdFx0Li4ubWVzc2FnZVxuXHRcdH07XG5cdFx0cmV0dXJuIGNocm9tZT8udGFicz8uc2VuZE1lc3NhZ2U/Lih0YWJJZCwgbWVzc2FnZVdpdGhDaGFubmVsLCAoKSA9PiB2b2lkIDApO1xuXHR9XG5cdGFzeW5jIGdldEN1cnJlbnRUYWJJZCgpIHtcblx0XHRpZiAodGhpcy50YWJJZEdldHRlcikgcmV0dXJuIGF3YWl0IHRoaXMudGFiSWRHZXR0ZXIoKTtcblx0XHRyZXR1cm4gMDtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHRmb3IgKGNvbnN0IHdyYXBwZWQgb2YgdGhpcy53cmFwcGVkTGlzdGVuZXJzKSBydW50aW1lTGlzdGVuZXJSZWdpc3RyeS5nZXQodGhpcy5jaGFubmVsTmFtZSk/LmRlbGV0ZSh3cmFwcGVkKTtcblx0XHR0aGlzLndyYXBwZWRMaXN0ZW5lcnMuY2xlYXIoKTtcblx0XHR0aGlzLndyYXBwZWRCeU9yaWdpbmFsLmNsZWFyKCk7XG5cdH1cbn07XG52YXIgQ2hyb21lRXh0ZW5zaW9uUG9ydENoYW5uZWwgPSBjbGFzcyB7XG5cdHBvcnQ7XG5cdGNoYW5uZWxOYW1lO1xuXHRsaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRjb25zdHJ1Y3Rvcihwb3J0LCBjaGFubmVsTmFtZSkge1xuXHRcdHRoaXMucG9ydCA9IHBvcnQ7XG5cdFx0dGhpcy5jaGFubmVsTmFtZSA9IGNoYW5uZWxOYW1lO1xuXHRcdHRoaXMucG9ydD8ub25NZXNzYWdlPy5hZGRMaXN0ZW5lcj8uKChtZXNzYWdlKSA9PiB7XG5cdFx0XHRpZiAoKG1lc3NhZ2U/LmNoYW5uZWxOYW1lID8/IG1lc3NhZ2U/LnRhcmdldCkgIT09IHRoaXMuY2hhbm5lbE5hbWUpIHJldHVybjtcblx0XHRcdGNvbnN0IGV2ZW50ID0ge1xuXHRcdFx0XHRkYXRhOiBtZXNzYWdlLFxuXHRcdFx0XHRvcmlnaW46IFwiY2hyb21lLWV4dGVuc2lvbi1wb3J0XCIsXG5cdFx0XHRcdHNvdXJjZTogdGhpcy5wb3J0XG5cdFx0XHR9O1xuXHRcdFx0Zm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycykgdHJ5IHtcblx0XHRcdFx0bGlzdGVuZXIoZXZlbnQpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihcIltDaHJvbWVFeHRlbnNpb25Qb3J0Q2hhbm5lbF0gTGlzdGVuZXIgZXJyb3I6XCIsIGVycm9yKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRhZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKHR5cGUgIT09IFwibWVzc2FnZVwiKSByZXR1cm47XG5cdFx0dGhpcy5saXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcblx0fVxuXHRyZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKHR5cGUgIT09IFwibWVzc2FnZVwiKSByZXR1cm47XG5cdFx0dGhpcy5saXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcblx0fVxuXHRwb3N0TWVzc2FnZShtZXNzYWdlKSB7XG5cdFx0dGhpcy5wb3J0Py5wb3N0TWVzc2FnZT8uKHtcblx0XHRcdC4uLm1lc3NhZ2UsXG5cdFx0XHRjaGFubmVsTmFtZTogdGhpcy5jaGFubmVsTmFtZSxcblx0XHRcdHNvdXJjZTogXCJwb3J0LWNoYW5uZWxcIlxuXHRcdH0pO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMubGlzdGVuZXJzLmNsZWFyKCk7XG5cdFx0dGhpcy5wb3J0Py5kaXNjb25uZWN0Py4oKTtcblx0fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdXRpbHMvVXRpbHMudHNcbnZhciBjcmVhdGVDaHJvbWVFeHRlbnNpb25DaGFubmVsID0gYXN5bmMgKGNvbmZpZykgPT4ge1xuXHRsZXQgd29ya2VyO1xuXHR0cnkge1xuXHRcdGlmICh0eXBlb2YgY29uZmlnLnNjcmlwdCAhPT0gXCJzdHJpbmdcIikgdGhyb3cgbmV3IEVycm9yKFwiQ2hyb21lIGV4dGVuc2lvbiB3b3JrZXIgY2hhbm5lbCByZXF1aXJlcyBjb25maWcuc2NyaXB0IHRvIGJlIGEgc3RyaW5nIHBhdGhcIik7XG5cdFx0d29ya2VyID0gbmV3IFdvcmtlcihjaHJvbWUucnVudGltZS5nZXRVUkwoY29uZmlnLnNjcmlwdCksIGNvbmZpZy5vcHRpb25zKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRpZiAodHlwZW9mIGNvbmZpZy5zY3JpcHQgPT09IFwic3RyaW5nXCIpIHdvcmtlciA9IG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYoY29uZmlnLnNjcmlwdCksIGNvbmZpZy5vcHRpb25zKTtcblx0XHRlbHNlIGlmICh0eXBlb2YgY29uZmlnLnNjcmlwdCA9PT0gXCJmdW5jdGlvblwiKSB3b3JrZXIgPSBjb25maWcuc2NyaXB0KCk7XG5cdFx0ZWxzZSB3b3JrZXIgPSBjb25maWcuc2NyaXB0O1xuXHR9XG5cdGNvbnN0IGNoYW5uZWwgPSBhd2FpdCBjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbChjb25maWcubmFtZSwge30sIHdvcmtlcik7XG5cdHJldHVybiBjaGFubmVsPy5yZW1vdGUgPz8gY2hhbm5lbDtcbn07XG52YXIgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0ID0gKGNoYW5uZWxOYW1lKSA9PiB7XG5cdHJldHVybiBuZXcgQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbChjaGFubmVsTmFtZSk7XG59O1xudmFyIGNyZWF0ZUNocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWwgPSAoY2hhbm5lbE5hbWUpID0+IHtcblx0Y29uc3Qgd29ya2VyID0gbmV3IENocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWwoY2hhbm5lbE5hbWUpO1xuXHRjb25zdCBjaGFubmVsID0gY3JlYXRlT3JVc2VFeGlzdGluZ0NoYW5uZWwoY2hhbm5lbE5hbWUsIHt9LCB3b3JrZXIpO1xuXHRyZXR1cm4gY2hhbm5lbD8ucmVtb3RlID8/IGNoYW5uZWw7XG59O1xudmFyIGNyZWF0ZUNocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsID0gKGNoYW5uZWxOYW1lLCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHdvcmtlciA9IG5ldyBDaHJvbWVFeHRlbnNpb25UYWJzQ2hhbm5lbChjaGFubmVsTmFtZSwgb3B0aW9ucyk7XG5cdGNvbnN0IGNoYW5uZWwgPSBjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbChjaGFubmVsTmFtZSwge30sIHdvcmtlcik7XG5cdHJldHVybiBjaGFubmVsPy5yZW1vdGUgPz8gY2hhbm5lbDtcbn07XG52YXIgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uVGFic01lc3NhZ2luZ0NoYW5uZWwgPSAoY2hhbm5lbE5hbWUsIG9wdGlvbnMpID0+IHtcblx0cmV0dXJuIGNyZWF0ZUNocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsKGNoYW5uZWxOYW1lLCBvcHRpb25zKTtcbn07XG52YXIgaW5pdE1haW5DaGFubmVsID0gKG5hbWUgPSBcIiRob3N0JFwiKSA9PiB7XG5cdHJldHVybiBpbml0Q2hhbm5lbEhhbmRsZXIobmFtZSA/PyBcIiRob3N0JFwiKTtcbn07XG52YXIgY3JlYXRlUXVldWVkV29ya2VyQ2hhbm5lbCA9IChjb25maWcsIG9uQ2hhbm5lbFJlYWR5KSA9PiB7XG5cdHJldHVybiBuZXcgUXVldWVkV29ya2VyQ2hhbm5lbChjb25maWcsIG9uQ2hhbm5lbFJlYWR5KTtcbn07XG52YXIgY3JlYXRlU2VydmljZVdvcmtlckNoYW5uZWwgPSBhc3luYyAoY29uZmlnKSA9PiB7XG5cdHJldHVybiB7XG5cdFx0YXN5bmMgcmVxdWVzdChtZXRob2QsIGFyZ3MgPSBbXSkge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0Y29uc3QgY2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKGAke2NvbmZpZy5uYW1lfS1zdy1jaGFubmVsYCk7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VJZCA9IFVVSUR2NCgpO1xuXHRcdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0Y2hhbm5lbC5jbG9zZSgpO1xuXHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBTZXJ2aWNlIHdvcmtlciByZXF1ZXN0IHRpbWVvdXQ6ICR7bWV0aG9kfWApKTtcblx0XHRcdFx0fSwgMWU0KTtcblx0XHRcdFx0Y2hhbm5lbC5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCB7IGlkLCByZXN1bHQsIGVycm9yIH0gPSBldmVudC5kYXRhO1xuXHRcdFx0XHRcdGlmIChpZCA9PT0gbWVzc2FnZUlkKSB7XG5cdFx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0XHRjaGFubmVsLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRpZiAoZXJyb3IpIHJlamVjdChuZXcgRXJyb3IoZXJyb3IpKTtcblx0XHRcdFx0XHRcdGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0Y2hhbm5lbC5wb3N0TWVzc2FnZSh7XG5cdFx0XHRcdFx0aWQ6IG1lc3NhZ2VJZCxcblx0XHRcdFx0XHR0eXBlOiBcInJlcXVlc3RcIixcblx0XHRcdFx0XHRtZXRob2QsXG5cdFx0XHRcdFx0YXJnc1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Y2xvc2UoKSB7fVxuXHR9O1xufTtcbnZhciBjcmVhdGVXb3JrZXJDaGFubmVsID0gYXN5bmMgKGNvbmZpZykgPT4ge1xuXHRjb25zdCBjb250ZXh0ID0gY29uZmlnLmNvbnRleHQ7XG5cdGlmIChjb250ZXh0ID09PSBcInNlcnZpY2Utd29ya2VyXCIpIHJldHVybiBjcmVhdGVTZXJ2aWNlV29ya2VyQ2hhbm5lbChjb25maWcpO1xuXHRsZXQgd29ya2VyO1xuXHRpZiAodHlwZW9mIGNvbmZpZy5zY3JpcHQgPT09IFwiZnVuY3Rpb25cIikgd29ya2VyID0gY29uZmlnLnNjcmlwdCgpO1xuXHRlbHNlIGlmIChjb25maWcuc2NyaXB0IGluc3RhbmNlb2YgV29ya2VyKSB3b3JrZXIgPSBjb25maWcuc2NyaXB0O1xuXHRlbHNlIGlmIChjb250ZXh0ID09PSBcImNocm9tZS1leHRlbnNpb25cIikgdHJ5IHtcblx0XHR3b3JrZXIgPSBuZXcgV29ya2VyKGNocm9tZS5ydW50aW1lLmdldFVSTChjb25maWcuc2NyaXB0KSwgY29uZmlnLm9wdGlvbnMpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHdvcmtlciA9IG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYoY29uZmlnLnNjcmlwdCksIGNvbmZpZy5vcHRpb25zKTtcblx0fVxuXHRlbHNlIHdvcmtlciA9IG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYoY29uZmlnLnNjcmlwdCksIGNvbmZpZy5vcHRpb25zKTtcblx0cmV0dXJuIGF3YWl0IGNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsKGNvbmZpZy5uYW1lLCB7fSwgd29ya2VyKTtcbn07XG52YXIgY3JlYXRlT3B0aW1pemVkV29ya2VyQ2hhbm5lbCA9IGFzeW5jIChjb25maWcsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgYmFzZUNoYW5uZWwgPSBhd2FpdCBjcmVhdGVXb3JrZXJDaGFubmVsKGNvbmZpZyk7XG5cdHJldHVybiBuZXcgT3B0aW1pemVkV29ya2VyQ2hhbm5lbChiYXNlQ2hhbm5lbCwgb3B0aW9ucyk7XG59O1xudmFyIGNyZWF0ZVF1ZXVlZE9wdGltaXplZFdvcmtlckNoYW5uZWwgPSAoY29uZmlnLCBvcHRpb25zLCBvbkNoYW5uZWxSZWFkeSkgPT4ge1xuXHRjb25zdCBvcHRpbWl6ZWRDaGFubmVsID0gbmV3IE9wdGltaXplZFdvcmtlckNoYW5uZWwobnVsbCwgb3B0aW9ucywgb25DaGFubmVsUmVhZHkpO1xuXHRjcmVhdGVXb3JrZXJDaGFubmVsKGNvbmZpZykudGhlbigoYmFzZUNoYW5uZWwpID0+IHtcblx0XHRvcHRpbWl6ZWRDaGFubmVsLnNldENoYW5uZWwoYmFzZUNoYW5uZWwpO1xuXHR9KS5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRjb25zb2xlLmVycm9yKFwiW2NyZWF0ZVF1ZXVlZE9wdGltaXplZFdvcmtlckNoYW5uZWxdIEZhaWxlZCB0byBjcmVhdGUgYmFzZSBjaGFubmVsOlwiLCBlcnJvcik7XG5cdFx0b3B0aW1pemVkQ2hhbm5lbC5jbG9zZSgpO1xuXHR9KTtcblx0cmV0dXJuIG9wdGltaXplZENoYW5uZWw7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbWVzc2FnaW5nL1Byb3RvY29sLnRzXG52YXIgUFVSUE9TRVMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbXG5cdFwiaW52b2tlXCIsXG5cdFwibWFpbFwiLFxuXHRcImF0dGFjaFwiLFxuXHRcImRlbGl2ZXJcIixcblx0XCJkZWZlclwiXG5dKTtcbnZhciBERUZBVUxUX1BVUlBPU0UgPSBcIm1haWxcIjtcbnZhciBhc1N0cmluZyA9ICh2YWx1ZSkgPT4gU3RyaW5nKHZhbHVlID8/IFwiXCIpLnRyaW0oKTtcbnZhciBub3JtYWxpemVQYXRoID0gKHBhdGgpID0+IHtcblx0aWYgKCFwYXRoKSByZXR1cm4gdm9pZCAwO1xuXHRjb25zdCBub3JtYWxpemVkID0gKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogW3BhdGhdKS5tYXAoYXNTdHJpbmcpLmZpbHRlcihCb29sZWFuKTtcblx0cmV0dXJuIG5vcm1hbGl6ZWQubGVuZ3RoID4gMCA/IG5vcm1hbGl6ZWQgOiB2b2lkIDA7XG59O1xudmFyIG5vcm1hbGl6ZUFyZ3MgPSAoYXJncykgPT4ge1xuXHRpZiAoYXJncyA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuXHRyZXR1cm4gQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbYXJnc107XG59O1xudmFyIG5vcm1hbGl6ZVRyYW5zZmVyID0gKHRyYW5zZmVyKSA9PiB7XG5cdGlmICh0cmFuc2ZlciA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuXHRyZXR1cm4gQXJyYXkuaXNBcnJheSh0cmFuc2ZlcikgPyB0cmFuc2ZlciA6IFt0cmFuc2Zlcl07XG59O1xudmFyIG5vcm1hbGl6ZVB1cnBvc2UgPSAocHVycG9zZSkgPT4ge1xuXHRjb25zdCBpbnB1dCA9IEFycmF5LmlzQXJyYXkocHVycG9zZSkgPyBwdXJwb3NlIDogcHVycG9zZSA/IFtwdXJwb3NlXSA6IFtERUZBVUxUX1BVUlBPU0VdO1xuXHRjb25zdCBkZWR1cGVkID0gW107XG5cdGZvciAoY29uc3QgZW50cnkgb2YgaW5wdXQpIGlmIChQVVJQT1NFUy5oYXMoZW50cnkpICYmICFkZWR1cGVkLmluY2x1ZGVzKGVudHJ5KSkgZGVkdXBlZC5wdXNoKGVudHJ5KTtcblx0cmV0dXJuIGRlZHVwZWQubGVuZ3RoID4gMCA/IGRlZHVwZWQgOiBbREVGQVVMVF9QVVJQT1NFXTtcbn07XG52YXIgaW5mZXJUeXBlID0gKGlucHV0KSA9PiB7XG5cdGNvbnN0IGV4cGxpY2l0ID0gYXNTdHJpbmcoaW5wdXQudHlwZSk7XG5cdGlmIChleHBsaWNpdCkgcmV0dXJuIGV4cGxpY2l0O1xuXHRjb25zdCBvcCA9IGFzU3RyaW5nKGlucHV0Lm9wKTtcblx0aWYgKG9wID09PSBcImdldFwiIHx8IG9wID09PSBcInNldFwiIHx8IG9wID09PSBcImFwcGx5XCIgfHwgb3AgPT09IFwiaW1wb3J0XCIpIHJldHVybiBcImludm9rZVwiO1xuXHRpZiAoaW5wdXQuZXJyb3IpIHJldHVybiBcInJlc3BvbnNlXCI7XG5cdHJldHVybiBcInJlcXVlc3RcIjtcbn07XG52YXIgaW5mZXJPcGVyYXRpb24gPSAoaW5wdXQsIHJlc29sdmVkVHlwZSkgPT4ge1xuXHRpZiAoaW5wdXQub3ApIHJldHVybiBpbnB1dC5vcDtcblx0aWYgKHJlc29sdmVkVHlwZSA9PT0gXCJpbnZva2VcIikgcmV0dXJuIFwiaW52b2tlXCI7XG5cdGlmIChyZXNvbHZlZFR5cGUgPT09IFwiYWN0XCIpIHJldHVybiBcImRlbGl2ZXJcIjtcblx0cmV0dXJuIFwibWFpbFwiO1xufTtcbnZhciBpbmZlclByb3RvY29sID0gKHByb3RvY29sKSA9PiB7XG5cdGNvbnN0IHZhbHVlID0gYXNTdHJpbmcocHJvdG9jb2wpLnRvTG93ZXJDYXNlKCk7XG5cdGlmICghdmFsdWUpIHJldHVybiBcInVua25vd25cIjtcblx0cmV0dXJuIHZhbHVlO1xufTtcbnZhciByYW5kb21JZCA9ICgpID0+IHtcblx0aWYgKHR5cGVvZiBjcnlwdG8gIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGNyeXB0by5yYW5kb21VVUlEID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuXHRyZXR1cm4gYHVuaWZvcm1fJHtEYXRlLm5vdygpfV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX1gO1xufTtcbnZhciBjcmVhdGVQcm90b2NvbEVudmVsb3BlID0gKGlucHV0KSA9PiB7XG5cdGNvbnN0IHRpbWVzdGFtcCA9IE51bWJlci5pc0Zpbml0ZShpbnB1dC50aW1lc3RhbXApID8gTnVtYmVyKGlucHV0LnRpbWVzdGFtcCkgOiBEYXRlLm5vdygpO1xuXHRjb25zdCBzb3VyY2UgPSBhc1N0cmluZyhpbnB1dC5zcmNDaGFubmVsID8/IGlucHV0LnNvdXJjZSkgfHwgXCJ1bmlmb3JtXCI7XG5cdGNvbnN0IGRlc3RpbmF0aW9uID0gYXNTdHJpbmcoaW5wdXQuZGVzdGluYXRpb24pO1xuXHRjb25zdCBkc3RDaGFubmVsID0gaW5wdXQuZHN0Q2hhbm5lbCA/PyAoZGVzdGluYXRpb24gPyBkZXN0aW5hdGlvbiA6IHZvaWQgMCk7XG5cdGNvbnN0IHV1aWQgPSBhc1N0cmluZyhpbnB1dC51dWlkID8/IGlucHV0LmlkKSB8fCByYW5kb21JZCgpO1xuXHRjb25zdCB0eXBlID0gaW5mZXJUeXBlKGlucHV0KTtcblx0Y29uc3QgcGF5bG9hZCA9IGlucHV0LnBheWxvYWQgPz8gaW5wdXQuZGF0YTtcblx0Y29uc3QgbWV0YWRhdGEgPSB7IC4uLmlucHV0Lm1ldGFkYXRhID8/IHt9IH07XG5cdHJldHVybiB7XG5cdFx0cHVycG9zZTogbm9ybWFsaXplUHVycG9zZShpbnB1dC5wdXJwb3NlKSxcblx0XHRwcm90b2NvbDogaW5mZXJQcm90b2NvbChpbnB1dC5wcm90b2NvbCksXG5cdFx0cmVkaXJlY3Q6IEJvb2xlYW4oaW5wdXQucmVkaXJlY3QpLFxuXHRcdGZsYWdzOiB7IC4uLmlucHV0LmZsYWdzID8/IHt9IH0sXG5cdFx0dHlwZSxcblx0XHRwYXRoOiBub3JtYWxpemVQYXRoKGlucHV0LnBhdGgpLFxuXHRcdHJlc3VsdDogaW5wdXQucmVzdWx0LFxuXHRcdGFyZ3M6IG5vcm1hbGl6ZUFyZ3MoaW5wdXQuYXJncyksXG5cdFx0b3A6IGluZmVyT3BlcmF0aW9uKGlucHV0LCB0eXBlKSxcblx0XHRlcnJvcjogaW5wdXQuZXJyb3IgPyBTdHJpbmcoaW5wdXQuZXJyb3IpIDogdm9pZCAwLFxuXHRcdHRpbWVzdGFtcCxcblx0XHR3aGVyZTogYXNTdHJpbmcoaW5wdXQud2hlcmUpIHx8IHZvaWQgMCxcblx0XHR1dWlkLFxuXHRcdGJyaWRnZXM6IEFycmF5LmlzQXJyYXkoaW5wdXQuYnJpZGdlcykgPyBpbnB1dC5icmlkZ2VzLm1hcChhc1N0cmluZykuZmlsdGVyKEJvb2xlYW4pIDogW10sXG5cdFx0cGF5bG9hZCxcblx0XHR0cmFuc2Zlcjogbm9ybWFsaXplVHJhbnNmZXIoaW5wdXQudHJhbnNmZXIpLFxuXHRcdGV4dGVuc2lvbjogaW5wdXQuZXh0ZW5zaW9uLFxuXHRcdGRlZmVyOiBpbnB1dC5kZWZlcixcblx0XHRzcmNDaGFubmVsOiBzb3VyY2UsXG5cdFx0ZHN0Q2hhbm5lbCxcblx0XHRpZDogdXVpZCxcblx0XHRzb3VyY2UsXG5cdFx0ZGVzdGluYXRpb246IGRlc3RpbmF0aW9uIHx8IHZvaWQgMCxcblx0XHRkYXRhOiBwYXlsb2FkLFxuXHRcdGNvbnRlbnRUeXBlOiBhc1N0cmluZyhpbnB1dC5jb250ZW50VHlwZSkgfHwgdm9pZCAwLFxuXHRcdG1ldGFkYXRhXG5cdH07XG59O1xudmFyIGlzUHJvdG9jb2xFbnZlbG9wZSA9ICh2YWx1ZSkgPT4ge1xuXHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuXHRjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcblx0cmV0dXJuIHR5cGVvZiBjYW5kaWRhdGUudXVpZCA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgY2FuZGlkYXRlLnNyY0NoYW5uZWwgPT09IFwic3RyaW5nXCIgJiYgQXJyYXkuaXNBcnJheShjYW5kaWRhdGUucHVycG9zZSkgJiYgdHlwZW9mIGNhbmRpZGF0ZS50eXBlID09PSBcInN0cmluZ1wiO1xufTtcbnZhciBub3JtYWxpemVQcm90b2NvbEVudmVsb3BlID0gKHZhbHVlKSA9PiBpc1Byb3RvY29sRW52ZWxvcGUodmFsdWUpID8gY3JlYXRlUHJvdG9jb2xFbnZlbG9wZSh2YWx1ZSkgOiBjcmVhdGVQcm90b2NvbEVudmVsb3BlKHZhbHVlKTtcbnZhciBQcm90b2NvbFJlcGxheUd1YXJkID0gY2xhc3Mge1xuXHRzZWVuID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0d2luZG93TXM7XG5cdGNvbnN0cnVjdG9yKHdpbmRvd01zID0gMzAwKSB7XG5cdFx0dGhpcy53aW5kb3dNcyA9IE1hdGgubWF4KDEwLCB3aW5kb3dNcyk7XG5cdH1cblx0YWNjZXB0KGVudmVsb3BlKSB7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRjb25zdCBrZXkgPSBlbnZlbG9wZS51dWlkO1xuXHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5zZWVuLmdldChrZXkpO1xuXHRcdHRoaXMucHJ1bmUobm93KTtcblx0XHRpZiAocHJldmlvdXMgJiYgbm93IC0gcHJldmlvdXMgPD0gdGhpcy53aW5kb3dNcykgcmV0dXJuIGZhbHNlO1xuXHRcdHRoaXMuc2Vlbi5zZXQoa2V5LCBub3cpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHBydW5lKG5vdykge1xuXHRcdGZvciAoY29uc3QgW2lkLCB0c10gb2YgdGhpcy5zZWVuLmVudHJpZXMoKSkgaWYgKG5vdyAtIHRzID4gdGhpcy53aW5kb3dNcykgdGhpcy5zZWVuLmRlbGV0ZShpZCk7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9tZXNzYWdpbmcvVW5pZmllZE1lc3NhZ2luZy50c1xudmFyIFBlbmRpbmdNZXNzYWdlU3RvcmUgPSBjbGFzcyB7XG5cdHN0b3JhZ2VLZXk7XG5cdG1heE1lc3NhZ2VzO1xuXHRkZWZhdWx0VFRMTXM7XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHR0aGlzLnN0b3JhZ2VLZXkgPSBvcHRpb25zPy5zdG9yYWdlS2V5ID8/IFwidW5pZm9ybS1tZXNzYWdpbmctcGVuZGluZ1wiO1xuXHRcdHRoaXMubWF4TWVzc2FnZXMgPSBvcHRpb25zPy5tYXhNZXNzYWdlcyA/PyAyMDA7XG5cdFx0dGhpcy5kZWZhdWx0VFRMTXMgPSBvcHRpb25zPy5kZWZhdWx0VFRMTXMgPz8gODY0ZTU7XG5cdH1cblx0cmVhZCgpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YgbG9jYWxTdG9yYWdlID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gW107XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSk7XG5cdFx0XHRpZiAoIXJhdykgcmV0dXJuIFtdO1xuXHRcdFx0Y29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpO1xuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKSA/IHBhcnNlZCA6IFtdO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0fVxuXHR3cml0ZShlbnRyaWVzKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIGxvY2FsU3RvcmFnZSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuXHRcdHRyeSB7XG5cdFx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KGVudHJpZXMpKTtcblx0XHR9IGNhdGNoIHt9XG5cdH1cblx0ZW5xdWV1ZShkZXN0aW5hdGlvbiwgbWVzc2FnZSkge1xuXHRcdGlmICghZGVzdGluYXRpb24pIHJldHVybjtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGlmICgoTnVtYmVyKG1lc3NhZ2U/Lm1ldGFkYXRhPy5leHBpcmVzQXQpID8gTWF0aC5tYXgoMCwgTnVtYmVyKG1lc3NhZ2UubWV0YWRhdGEuZXhwaXJlc0F0KSAtIG5vdykgOiB0aGlzLmRlZmF1bHRUVExNcykgPD0gMCkgcmV0dXJuO1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLnJlYWQoKS5maWx0ZXIoKGUpID0+IGUgJiYgdHlwZW9mIGUgPT09IFwib2JqZWN0XCIpLmZpbHRlcigoZSkgPT4ge1xuXHRcdFx0cmV0dXJuIChOdW1iZXIoZT8ubWVzc2FnZT8ubWV0YWRhdGE/LmV4cGlyZXNBdCkgfHwgTnVtYmVyKGU/LnN0b3JlZEF0KSArIHRoaXMuZGVmYXVsdFRUTE1zKSA+IG5vdztcblx0XHR9KTtcblx0XHRlbnRyaWVzLnB1c2goe1xuXHRcdFx0ZGVzdGluYXRpb24sXG5cdFx0XHRtZXNzYWdlLFxuXHRcdFx0c3RvcmVkQXQ6IG5vd1xuXHRcdH0pO1xuXHRcdGlmIChlbnRyaWVzLmxlbmd0aCA+IHRoaXMubWF4TWVzc2FnZXMpIGVudHJpZXMuc3BsaWNlKDAsIGVudHJpZXMubGVuZ3RoIC0gdGhpcy5tYXhNZXNzYWdlcyk7XG5cdFx0dGhpcy53cml0ZShlbnRyaWVzKTtcblx0fVxuXHRkcmFpbihkZXN0aW5hdGlvbikge1xuXHRcdGlmICghZGVzdGluYXRpb24pIHJldHVybiBbXTtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLnJlYWQoKTtcblx0XHRjb25zdCBrZWVwID0gW107XG5cdFx0Y29uc3Qgb3V0ID0gW107XG5cdFx0Zm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcblx0XHRcdGlmICgoTnVtYmVyKGU/Lm1lc3NhZ2U/Lm1ldGFkYXRhPy5leHBpcmVzQXQpIHx8IE51bWJlcihlPy5zdG9yZWRBdCkgKyB0aGlzLmRlZmF1bHRUVExNcykgPD0gbm93KSBjb250aW51ZTtcblx0XHRcdGlmIChlPy5kZXN0aW5hdGlvbiA9PT0gZGVzdGluYXRpb24gJiYgZT8ubWVzc2FnZSkgb3V0LnB1c2goZS5tZXNzYWdlKTtcblx0XHRcdGVsc2Uga2VlcC5wdXNoKGUpO1xuXHRcdH1cblx0XHR0aGlzLndyaXRlKGtlZXApO1xuXHRcdHJldHVybiBvdXQ7XG5cdH1cblx0aGFzKGRlc3RpbmF0aW9uKSB7XG5cdFx0aWYgKCFkZXN0aW5hdGlvbikgcmV0dXJuIGZhbHNlO1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0cmV0dXJuIHRoaXMucmVhZCgpLnNvbWUoKGUpID0+IHtcblx0XHRcdGlmICghZSB8fCB0eXBlb2YgZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuXHRcdFx0cmV0dXJuIChOdW1iZXIoZT8ubWVzc2FnZT8ubWV0YWRhdGE/LmV4cGlyZXNBdCkgfHwgTnVtYmVyKGU/LnN0b3JlZEF0KSArIHRoaXMuZGVmYXVsdFRUTE1zKSA+IG5vdyAmJiBlPy5kZXN0aW5hdGlvbiA9PT0gZGVzdGluYXRpb247XG5cdFx0fSk7XG5cdH1cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy53cml0ZShbXSk7XG5cdH1cbn07XG52YXIgVW5pZmllZE1lc3NhZ2luZ01hbmFnZXIgPSBjbGFzcyB7XG5cdGhhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y2hhbm5lbHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHR3b3JrZXJDaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHZpZXdDaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHBpcGVsaW5lcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdG1lc3NhZ2VRdWV1ZTtcblx0cGVuZGluZ1N0b3JlO1xuXHRpbml0aWFsaXplZFZpZXdzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0dmlld1JlYWR5UHJvbWlzZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRleGVjdXRpb25Db250ZXh0O1xuXHRjaGFubmVsTWFwcGluZ3M7XG5cdGNvbXBvbmVudFJlZ2lzdHJ5ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cmVwbGF5R3VhcmQgPSBuZXcgUHJvdG9jb2xSZXBsYXlHdWFyZCgzMDApO1xuXHRsb2NhbENoYW5uZWxJZCA9IFwiXCI7XG5cdGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5leGVjdXRpb25Db250ZXh0ID0gZGV0ZWN0RXhlY3V0aW9uQ29udGV4dCgpO1xuXHRcdHRoaXMubG9jYWxDaGFubmVsSWQgPSBgJHt0aGlzLmV4ZWN1dGlvbkNvbnRleHR9OiR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApfWA7XG5cdFx0dGhpcy5jaGFubmVsTWFwcGluZ3MgPSBjb25maWcuY2hhbm5lbE1hcHBpbmdzID8/IHt9O1xuXHRcdHRoaXMubWVzc2FnZVF1ZXVlID0gZ2V0TWVzc2FnZVF1ZXVlKGNvbmZpZy5xdWV1ZU9wdGlvbnMpO1xuXHRcdHRoaXMucGVuZGluZ1N0b3JlID0gbmV3IFBlbmRpbmdNZXNzYWdlU3RvcmUoY29uZmlnLnBlbmRpbmdTdG9yZU9wdGlvbnMpO1xuXHRcdHRoaXMuc2V0dXBHbG9iYWxMaXN0ZW5lcnMoKTtcblx0fVxuXHRyZWdpc3RlckhhbmRsZXIoZGVzdGluYXRpb24sIGhhbmRsZXIpIHtcblx0XHRpZiAoIXRoaXMuaGFuZGxlcnMuaGFzKGRlc3RpbmF0aW9uKSkgdGhpcy5oYW5kbGVycy5zZXQoZGVzdGluYXRpb24sIFtdKTtcblx0XHR0aGlzLmhhbmRsZXJzLmdldChkZXN0aW5hdGlvbikucHVzaChoYW5kbGVyKTtcblx0fVxuXHR1bnJlZ2lzdGVySGFuZGxlcihkZXN0aW5hdGlvbiwgaGFuZGxlcikge1xuXHRcdGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycy5nZXQoZGVzdGluYXRpb24pO1xuXHRcdGlmIChoYW5kbGVycykge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBoYW5kbGVycy5pbmRleE9mKGhhbmRsZXIpO1xuXHRcdFx0aWYgKGluZGV4ID4gLTEpIGhhbmRsZXJzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIHNlbmRNZXNzYWdlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBmdWxsTWVzc2FnZSA9IHRoaXMudG9Qcm90b2NvbE1lc3NhZ2UobWVzc2FnZSk7XG5cdFx0aWYgKGF3YWl0IHRoaXMudHJ5RGVsaXZlck1lc3NhZ2UoZnVsbE1lc3NhZ2UpKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAoZnVsbE1lc3NhZ2UuZGVzdGluYXRpb24pIHtcblx0XHRcdHRoaXMucGVuZGluZ1N0b3JlLmVucXVldWUoZnVsbE1lc3NhZ2UuZGVzdGluYXRpb24sIGZ1bGxNZXNzYWdlKTtcblx0XHRcdGF3YWl0IHRoaXMubWVzc2FnZVF1ZXVlLnF1ZXVlTWVzc2FnZShmdWxsTWVzc2FnZS50eXBlLCBmdWxsTWVzc2FnZSwge1xuXHRcdFx0XHRwcmlvcml0eTogZnVsbE1lc3NhZ2UubWV0YWRhdGE/LnByaW9yaXR5ID8/IFwibm9ybWFsXCIsXG5cdFx0XHRcdG1heFJldHJpZXM6IE51bWJlcihmdWxsTWVzc2FnZS5tZXRhZGF0YT8ubWF4UmV0cmllcyA/PyAzKSxcblx0XHRcdFx0ZGVzdGluYXRpb246IGZ1bGxNZXNzYWdlLmRlc3RpbmF0aW9uXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGFzeW5jIHByb2Nlc3NNZXNzYWdlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUHJvdG9jb2xFbnZlbG9wZShtZXNzYWdlKTtcblx0XHRpZiAoIXRoaXMucmVwbGF5R3VhcmQuYWNjZXB0KG5vcm1hbGl6ZWQpKSByZXR1cm47XG5cdFx0Y29uc3QgZGVzdGluYXRpb24gPSBub3JtYWxpemVkLmRlc3RpbmF0aW9uID8/IFwiZ2VuZXJhbFwiO1xuXHRcdGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycy5nZXQoZGVzdGluYXRpb24pID8/IFtdO1xuXHRcdGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykgaWYgKGhhbmRsZXIuY2FuSGFuZGxlKG5vcm1hbGl6ZWQpKSB0cnkge1xuXHRcdFx0YXdhaXQgaGFuZGxlci5oYW5kbGUobm9ybWFsaXplZCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoYFtVbmlmaWVkTWVzc2FnaW5nXSBIYW5kbGVyIGVycm9yIGZvciAke2Rlc3RpbmF0aW9ufTpgLCBlcnJvcik7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIHRyeURlbGl2ZXJNZXNzYWdlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUHJvdG9jb2xFbnZlbG9wZShtZXNzYWdlKTtcblx0XHRpZiAobm9ybWFsaXplZC5kZXN0aW5hdGlvbiAmJiB0aGlzLmhhbmRsZXJzLmhhcyhub3JtYWxpemVkLmRlc3RpbmF0aW9uKSkge1xuXHRcdFx0YXdhaXQgdGhpcy5wcm9jZXNzTWVzc2FnZShub3JtYWxpemVkKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBjaGFubmVsTmFtZSA9IHRoaXMuZ2V0Q2hhbm5lbEZvckRlc3RpbmF0aW9uKG5vcm1hbGl6ZWQuZGVzdGluYXRpb24pO1xuXHRcdGlmIChjaGFubmVsTmFtZSAmJiB0aGlzLmNoYW5uZWxzLmhhcyhjaGFubmVsTmFtZSkpIHtcblx0XHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLmNoYW5uZWxzLmdldChjaGFubmVsTmFtZSk7XG5cdFx0XHRpZiAoY2hhbm5lbCBpbnN0YW5jZW9mIEJyb2FkY2FzdENoYW5uZWwpIHRyeSB7XG5cdFx0XHRcdGNoYW5uZWwucG9zdE1lc3NhZ2Uobm9ybWFsaXplZCk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKGBbVW5pZmllZE1lc3NhZ2luZ10gRmFpbGVkIHRvIHBvc3QgdG8gYnJvYWRjYXN0IGNoYW5uZWwgJHtjaGFubmVsTmFtZX06YCwgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoY2hhbm5lbCAmJiBcInJlcXVlc3RcIiBpbiBjaGFubmVsKSB0cnkge1xuXHRcdFx0XHRhd2FpdCBjaGFubmVsLnJlcXVlc3Qobm9ybWFsaXplZC50eXBlLCBbbm9ybWFsaXplZF0pO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybihgW1VuaWZpZWRNZXNzYWdpbmddIEZhaWxlZCB0byBwb3N0IHRvIHdvcmtlciBjaGFubmVsICR7Y2hhbm5lbE5hbWV9OmAsIGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJlZ2lzdGVyVmlld0NoYW5uZWxzKHZpZXdIYXNoLCBjb25maWdzKSB7XG5cdFx0Y29uc3QgY2hhbm5lbE5hbWVzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0XHRmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWdzKSB7XG5cdFx0XHRpZiAoIXRoaXMuaXNXb3JrZXJTdXBwb3J0ZWQoY29uZmlnKSkge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhgW1VuaWZpZWRNZXNzYWdpbmddIFNraXBwaW5nIHdvcmtlciAnJHtjb25maWcubmFtZX0nIGluICR7dGhpcy5leGVjdXRpb25Db250ZXh0fSBjb250ZXh0YCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY2hhbm5lbCA9IGNyZWF0ZVF1ZXVlZE9wdGltaXplZFdvcmtlckNoYW5uZWwoe1xuXHRcdFx0XHRuYW1lOiBjb25maWcubmFtZSxcblx0XHRcdFx0c2NyaXB0OiBjb25maWcuc2NyaXB0LFxuXHRcdFx0XHRvcHRpb25zOiBjb25maWcub3B0aW9ucyxcblx0XHRcdFx0Y29udGV4dDogdGhpcy5yZXNvbHZlV29ya2VyQ29udGV4dCgpXG5cdFx0XHR9LCBjb25maWcucHJvdG9jb2xPcHRpb25zLCAoKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGBbVW5pZmllZE1lc3NhZ2luZ10gQ2hhbm5lbCAnJHtjb25maWcubmFtZX0nIHJlYWR5IGZvciB2aWV3ICcke3ZpZXdIYXNofSdgKTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgY2hhbm5lbEtleSA9IGAke3ZpZXdIYXNofToke2NvbmZpZy5uYW1lfWA7XG5cdFx0XHR0aGlzLndvcmtlckNoYW5uZWxzLnNldChjaGFubmVsS2V5LCBjaGFubmVsKTtcblx0XHRcdHRoaXMuY2hhbm5lbHMuc2V0KGNoYW5uZWxLZXksIGNoYW5uZWwpO1xuXHRcdFx0Y2hhbm5lbE5hbWVzLmFkZChjb25maWcubmFtZSk7XG5cdFx0fVxuXHRcdHRoaXMudmlld0NoYW5uZWxzLnNldCh2aWV3SGFzaCwgY2hhbm5lbE5hbWVzKTtcblx0fVxuXHRhc3luYyBpbml0aWFsaXplVmlld0NoYW5uZWxzKHZpZXdIYXNoKSB7XG5cdFx0aWYgKHRoaXMuaW5pdGlhbGl6ZWRWaWV3cy5oYXModmlld0hhc2gpKSByZXR1cm47XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmNyZWF0ZURlZmVycmVkKCk7XG5cdFx0dGhpcy52aWV3UmVhZHlQcm9taXNlcy5zZXQodmlld0hhc2gsIGRlZmVycmVkKTtcblx0XHRjb25zb2xlLmxvZyhgW1VuaWZpZWRNZXNzYWdpbmddIEluaXRpYWxpemluZyBjaGFubmVscyBmb3IgdmlldzogJHt2aWV3SGFzaH1gKTtcblx0XHRjb25zdCBjaGFubmVsTmFtZXMgPSB0aGlzLnZpZXdDaGFubmVscy5nZXQodmlld0hhc2gpO1xuXHRcdGlmICghY2hhbm5lbE5hbWVzKSB7XG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGluaXRQcm9taXNlcyA9IFtdO1xuXHRcdGZvciAoY29uc3QgY2hhbm5lbE5hbWUgb2YgY2hhbm5lbE5hbWVzKSB7XG5cdFx0XHRjb25zdCBjaGFubmVsS2V5ID0gYCR7dmlld0hhc2h9OiR7Y2hhbm5lbE5hbWV9YDtcblx0XHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLndvcmtlckNoYW5uZWxzLmdldChjaGFubmVsS2V5KTtcblx0XHRcdGlmIChjaGFubmVsKSBpbml0UHJvbWlzZXMucHVzaChjaGFubmVsLnJlcXVlc3QoXCJwaW5nXCIsIHt9KS5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGBbVW5pZmllZE1lc3NhZ2luZ10gQ2hhbm5lbCAnJHtjaGFubmVsTmFtZX0nIHF1ZXVlZCBmb3IgdmlldyAnJHt2aWV3SGFzaH0nYCk7XG5cdFx0XHR9KSk7XG5cdFx0fVxuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChpbml0UHJvbWlzZXMpO1xuXHRcdHRoaXMuaW5pdGlhbGl6ZWRWaWV3cy5hZGQodmlld0hhc2gpO1xuXHRcdGRlZmVycmVkLnJlc29sdmUoKTtcblx0fVxuXHRnZXRXb3JrZXJDaGFubmVsKHZpZXdIYXNoLCB3b3JrZXJOYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMud29ya2VyQ2hhbm5lbHMuZ2V0KGAke3ZpZXdIYXNofToke3dvcmtlck5hbWV9YCkgPz8gbnVsbDtcblx0fVxuXHRnZXRCcm9hZGNhc3RDaGFubmVsKGNoYW5uZWxOYW1lKSB7XG5cdFx0aWYgKCF0aGlzLmNoYW5uZWxzLmhhcyhjaGFubmVsTmFtZSkpIHRyeSB7XG5cdFx0XHRjb25zdCBjaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoY2hhbm5lbE5hbWUpO1xuXHRcdFx0Y2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0dGhpcy5oYW5kbGVCcm9hZGNhc3RNZXNzYWdlKGV2ZW50LmRhdGEsIGNoYW5uZWxOYW1lKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5jaGFubmVscy5zZXQoY2hhbm5lbE5hbWUsIGNoYW5uZWwpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oYFtVbmlmaWVkTWVzc2FnaW5nXSBCcm9hZGNhc3RDaGFubmVsIG5vdCBhdmFpbGFibGU6ICR7Y2hhbm5lbE5hbWV9YCwgZXJyb3IpO1xuXHRcdFx0dGhpcy5jaGFubmVscy5zZXQoY2hhbm5lbE5hbWUsIHtcblx0XHRcdFx0cG9zdE1lc3NhZ2U6ICgpID0+IHt9LFxuXHRcdFx0XHRjbG9zZTogKCkgPT4ge30sXG5cdFx0XHRcdGFkZEV2ZW50TGlzdGVuZXI6ICgpID0+IHt9LFxuXHRcdFx0XHRyZW1vdmVFdmVudExpc3RlbmVyOiAoKSA9PiB7fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNoYW5uZWxzLmdldChjaGFubmVsTmFtZSk7XG5cdH1cblx0YXN5bmMgaGFuZGxlQnJvYWRjYXN0TWVzc2FnZShtZXNzYWdlLCBjaGFubmVsTmFtZSkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBlbnZlbG9wZSA9IHRoaXMudG9Qcm90b2NvbE1lc3NhZ2UobWVzc2FnZSA/PyB7fSwgY2hhbm5lbE5hbWUpO1xuXHRcdFx0aWYgKGVudmVsb3BlLnNyY0NoYW5uZWwgPT09IHRoaXMubG9jYWxDaGFubmVsSWQpIHJldHVybjtcblx0XHRcdGF3YWl0IHRoaXMucHJvY2Vzc01lc3NhZ2UoZW52ZWxvcGUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGBbVW5pZmllZE1lc3NhZ2luZ10gRXJyb3IgaGFuZGxpbmcgYnJvYWRjYXN0IG1lc3NhZ2Ugb24gJHtjaGFubmVsTmFtZX06YCwgZXJyb3IpO1xuXHRcdH1cblx0fVxuXHRyZWdpc3RlclBpcGVsaW5lKGNvbmZpZykge1xuXHRcdHRoaXMucGlwZWxpbmVzLnNldChjb25maWcubmFtZSwgY29uZmlnKTtcblx0fVxuXHRhc3luYyBwcm9jZXNzVGhyb3VnaFBpcGVsaW5lKHBpcGVsaW5lTmFtZSwgbWVzc2FnZSkge1xuXHRcdGNvbnN0IHBpcGVsaW5lID0gdGhpcy5waXBlbGluZXMuZ2V0KHBpcGVsaW5lTmFtZSk7XG5cdFx0aWYgKCFwaXBlbGluZSkgdGhyb3cgbmV3IEVycm9yKGBQaXBlbGluZSAnJHtwaXBlbGluZU5hbWV9JyBub3QgZm91bmRgKTtcblx0XHRsZXQgY3VycmVudE1lc3NhZ2UgPSB7IC4uLm1lc3NhZ2UgfTtcblx0XHRjb25zdCB0aW1lb3V0ID0gcGlwZWxpbmUudGltZW91dCA/PyAzZTQ7XG5cdFx0Zm9yIChjb25zdCBzdGFnZSBvZiBwaXBlbGluZS5zdGFnZXMpIHtcblx0XHRcdGNvbnN0IHN0YWdlVGltZW91dCA9IHN0YWdlLnRpbWVvdXQgPz8gdGltZW91dDtcblx0XHRcdGNvbnN0IHJldHJpZXMgPSBzdGFnZS5yZXRyaWVzID8/IDA7XG5cdFx0XHRmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSByZXRyaWVzOyBhdHRlbXB0KyspIHRyeSB7XG5cdFx0XHRcdGN1cnJlbnRNZXNzYWdlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtzdGFnZS5oYW5kbGVyKGN1cnJlbnRNZXNzYWdlKSwgbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gc2V0VGltZW91dCgoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgU3RhZ2UgJyR7c3RhZ2UubmFtZX0nIHRpbWVvdXRgKSksIHN0YWdlVGltZW91dCkpXSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0aWYgKGF0dGVtcHQgPT09IHJldHJpZXMpIHtcblx0XHRcdFx0XHRpZiAocGlwZWxpbmUuZXJyb3JIYW5kbGVyKSBwaXBlbGluZS5lcnJvckhhbmRsZXIoZXJyb3IsIHN0YWdlLCBjdXJyZW50TWVzc2FnZSk7XG5cdFx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc29sZS53YXJuKGBbVW5pZmllZE1lc3NhZ2luZ10gUGlwZWxpbmUgJyR7cGlwZWxpbmVOYW1lfScgc3RhZ2UgJyR7c3RhZ2UubmFtZX0nIGF0dGVtcHQgJHthdHRlbXB0ICsgMX0gZmFpbGVkOmAsIGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGN1cnJlbnRNZXNzYWdlO1xuXHR9XG5cdGFzeW5jIHByb2Nlc3NRdWV1ZWRNZXNzYWdlcyhkZXN0aW5hdGlvbikge1xuXHRcdGNvbnN0IHF1ZXVlZE1lc3NhZ2VzID0gYXdhaXQgdGhpcy5tZXNzYWdlUXVldWUuZ2V0UXVldWVkTWVzc2FnZXMoZGVzdGluYXRpb24pO1xuXHRcdGZvciAoY29uc3QgcXVldWVkTWVzc2FnZSBvZiBxdWV1ZWRNZXNzYWdlcykge1xuXHRcdFx0Y29uc3QgZGF0YUFzTWVzc2FnZSA9IHF1ZXVlZE1lc3NhZ2UuZGF0YTtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBkYXRhQXNNZXNzYWdlICYmIHR5cGVvZiBkYXRhQXNNZXNzYWdlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBkYXRhQXNNZXNzYWdlLnR5cGUgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGRhdGFBc01lc3NhZ2UuaWQgPT09IFwic3RyaW5nXCIgPyB0aGlzLnRvUHJvdG9jb2xNZXNzYWdlKGRhdGFBc01lc3NhZ2UpIDoge1xuXHRcdFx0XHQuLi50aGlzLnRvUHJvdG9jb2xNZXNzYWdlKHtcblx0XHRcdFx0XHRpZDogcXVldWVkTWVzc2FnZS5pZCxcblx0XHRcdFx0XHR0eXBlOiBxdWV1ZWRNZXNzYWdlLnR5cGUsXG5cdFx0XHRcdFx0c291cmNlOiBcInF1ZXVlXCIsXG5cdFx0XHRcdFx0ZGVzdGluYXRpb246IHF1ZXVlZE1lc3NhZ2UuZGVzdGluYXRpb24sXG5cdFx0XHRcdFx0ZGF0YTogcXVldWVkTWVzc2FnZS5kYXRhLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdFx0XHR0aW1lc3RhbXA6IHF1ZXVlZE1lc3NhZ2UudGltZXN0YW1wLFxuXHRcdFx0XHRcdFx0cmV0cnlDb3VudDogcXVldWVkTWVzc2FnZS5yZXRyeUNvdW50LFxuXHRcdFx0XHRcdFx0bWF4UmV0cmllczogcXVldWVkTWVzc2FnZS5tYXhSZXRyaWVzLFxuXHRcdFx0XHRcdFx0Li4ucXVldWVkTWVzc2FnZS5tZXRhZGF0YVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHR5cGU6IHF1ZXVlZE1lc3NhZ2UudHlwZVxuXHRcdFx0fTtcblx0XHRcdGlmIChhd2FpdCB0aGlzLnRyeURlbGl2ZXJNZXNzYWdlKG1lc3NhZ2UpKSBhd2FpdCB0aGlzLm1lc3NhZ2VRdWV1ZS5yZW1vdmVNZXNzYWdlKHF1ZXVlZE1lc3NhZ2UuaWQpO1xuXHRcdH1cblx0fVxuXHRyZWdpc3RlckNvbXBvbmVudChjb21wb25lbnRJZCwgZGVzdGluYXRpb24pIHtcblx0XHR0aGlzLmNvbXBvbmVudFJlZ2lzdHJ5LnNldChjb21wb25lbnRJZCwgZGVzdGluYXRpb24pO1xuXHRcdHRoaXMucHJvY2Vzc1F1ZXVlZE1lc3NhZ2VzKGRlc3RpbmF0aW9uKS5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdGNvbnNvbGUud2FybihgW1VuaWZpZWRNZXNzYWdpbmddIEZhaWxlZCB0byBwcm9jZXNzIHF1ZXVlZCBtZXNzYWdlcyBmb3IgJHtkZXN0aW5hdGlvbn06YCwgZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG5cdGluaXRpYWxpemVDb21wb25lbnQoY29tcG9uZW50SWQpIHtcblx0XHRjb25zdCBkZXN0aW5hdGlvbiA9IHRoaXMuY29tcG9uZW50UmVnaXN0cnkuZ2V0KGNvbXBvbmVudElkKTtcblx0XHRpZiAoIWRlc3RpbmF0aW9uKSByZXR1cm4gW107XG5cdFx0dGhpcy5wcm9jZXNzUXVldWVkTWVzc2FnZXMoZGVzdGluYXRpb24pLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0Y29uc29sZS53YXJuKGBbVW5pZmllZE1lc3NhZ2luZ10gRmFpbGVkIHRvIHJlcGxheSBxdWV1ZWQgbWVzc2FnZXMgZm9yICR7ZGVzdGluYXRpb259OmAsIGVycm9yKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gdGhpcy5wZW5kaW5nU3RvcmUuZHJhaW4oZGVzdGluYXRpb24pO1xuXHR9XG5cdGhhc1BlbmRpbmdNZXNzYWdlcyhkZXN0aW5hdGlvbikge1xuXHRcdHJldHVybiB0aGlzLnBlbmRpbmdTdG9yZS5oYXMoZGVzdGluYXRpb24pO1xuXHR9XG5cdGVucXVldWVQZW5kaW5nTWVzc2FnZShkZXN0aW5hdGlvbiwgbWVzc2FnZSkge1xuXHRcdGNvbnN0IGRlc3QgPSBTdHJpbmcoZGVzdGluYXRpb24gPz8gXCJcIikudHJpbSgpO1xuXHRcdGlmICghZGVzdCB8fCAhbWVzc2FnZSkgcmV0dXJuO1xuXHRcdHRoaXMucGVuZGluZ1N0b3JlLmVucXVldWUoZGVzdCwgbWVzc2FnZSk7XG5cdH1cblx0c2V0Q2hhbm5lbE1hcHBpbmdzKG1hcHBpbmdzKSB7XG5cdFx0dGhpcy5jaGFubmVsTWFwcGluZ3MgPSB7XG5cdFx0XHQuLi50aGlzLmNoYW5uZWxNYXBwaW5ncyxcblx0XHRcdC4uLm1hcHBpbmdzXG5cdFx0fTtcblx0fVxuXHRnZXRDaGFubmVsRm9yRGVzdGluYXRpb24oZGVzdGluYXRpb24pIHtcblx0XHRpZiAoIWRlc3RpbmF0aW9uKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gdGhpcy5jaGFubmVsTWFwcGluZ3NbZGVzdGluYXRpb25dID8/IG51bGw7XG5cdH1cblx0ZGV0ZWN0UHJvdG9jb2xOYW1lKCkge1xuXHRcdGlmICh0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPT09IFwiY2hyb21lLWV4dGVuc2lvblwiKSByZXR1cm4gXCJjaHJvbWVcIjtcblx0XHRpZiAodGhpcy5leGVjdXRpb25Db250ZXh0ID09PSBcInNlcnZpY2Utd29ya2VyXCIpIHJldHVybiBcInNlcnZpY2VcIjtcblx0XHRpZiAodGhpcy5leGVjdXRpb25Db250ZXh0ID09PSBcIm1haW5cIikgcmV0dXJuIFwid2luZG93XCI7XG5cdFx0cmV0dXJuIFwidW5rbm93blwiO1xuXHR9XG5cdHJlc29sdmVXb3JrZXJDb250ZXh0KCkge1xuXHRcdGlmICh0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPT09IFwibWFpblwiKSByZXR1cm4gXCJtYWluXCI7XG5cdFx0aWYgKHRoaXMuZXhlY3V0aW9uQ29udGV4dCA9PT0gXCJzZXJ2aWNlLXdvcmtlclwiKSByZXR1cm4gXCJzZXJ2aWNlLXdvcmtlclwiO1xuXHRcdGlmICh0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPT09IFwiY2hyb21lLWV4dGVuc2lvblwiKSByZXR1cm4gXCJjaHJvbWUtZXh0ZW5zaW9uXCI7XG5cdH1cblx0dG9Qcm90b2NvbE1lc3NhZ2UobWVzc2FnZSwgZmFsbGJhY2tTb3VyY2UpIHtcblx0XHRyZXR1cm4gY3JlYXRlUHJvdG9jb2xFbnZlbG9wZSh7XG5cdFx0XHQuLi5tZXNzYWdlLFxuXHRcdFx0aWQ6IG1lc3NhZ2UuaWQsXG5cdFx0XHR0eXBlOiBtZXNzYWdlLnR5cGUgPz8gXCJ1bmtub3duXCIsXG5cdFx0XHRzb3VyY2U6IG1lc3NhZ2Uuc291cmNlID8/IGZhbGxiYWNrU291cmNlID8/IHRoaXMubG9jYWxDaGFubmVsSWQsXG5cdFx0XHRkZXN0aW5hdGlvbjogbWVzc2FnZS5kZXN0aW5hdGlvbixcblx0XHRcdGRhdGE6IG1lc3NhZ2UuZGF0YSxcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcblx0XHRcdFx0Li4ubWVzc2FnZS5tZXRhZGF0YSA/PyB7fVxuXHRcdFx0fSxcblx0XHRcdHByb3RvY29sOiB0aGlzLmRldGVjdFByb3RvY29sTmFtZSgpLFxuXHRcdFx0cHVycG9zZTogXCJtYWlsXCIsXG5cdFx0XHRzcmNDaGFubmVsOiBtZXNzYWdlLnNvdXJjZSA/PyB0aGlzLmxvY2FsQ2hhbm5lbElkLFxuXHRcdFx0ZHN0Q2hhbm5lbDogbWVzc2FnZS5kZXN0aW5hdGlvblxuXHRcdH0pO1xuXHR9XG5cdGlzV29ya2VyU3VwcG9ydGVkKF9jb25maWcpIHtcblx0XHRpZiAodGhpcy5leGVjdXRpb25Db250ZXh0ID09PSBcInNlcnZpY2Utd29ya2VyXCIpIHJldHVybiB0cnVlO1xuXHRcdGlmICh0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPT09IFwiY2hyb21lLWV4dGVuc2lvblwiKSByZXR1cm4gc3VwcG9ydHNEZWRpY2F0ZWRXb3JrZXJzKCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0c2V0dXBHbG9iYWxMaXN0ZW5lcnMoKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQuZGF0YSAmJiB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhLnR5cGUpIHRoaXMuaGFuZGxlQnJvYWRjYXN0TWVzc2FnZShldmVudC5kYXRhLCBcIndpbmRvdy1tZXNzYWdlXCIpO1xuXHRcdH0pO1xuXHR9XG5cdGNyZWF0ZURlZmVycmVkKCkge1xuXHRcdGxldCByZXNvbHZlO1xuXHRcdGxldCByZWplY3Q7XG5cdFx0Y29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuXHRcdFx0cmVzb2x2ZSA9IHJlcztcblx0XHRcdHJlamVjdCA9IHJlajtcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVzb2x2ZSxcblx0XHRcdHJlamVjdCxcblx0XHRcdHByb21pc2Vcblx0XHR9O1xuXHR9XG5cdGdldEV4ZWN1dGlvbkNvbnRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uQ29udGV4dDtcblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdGZvciAoY29uc3QgY2hhbm5lbCBvZiB0aGlzLmNoYW5uZWxzLnZhbHVlcygpKSBpZiAoY2hhbm5lbCBpbnN0YW5jZW9mIEJyb2FkY2FzdENoYW5uZWwpIGNoYW5uZWwuY2xvc2UoKTtcblx0XHRlbHNlIGlmIChjaGFubmVsICYmIFwiY2xvc2VcIiBpbiBjaGFubmVsKSBjaGFubmVsLmNsb3NlKCk7XG5cdFx0dGhpcy5jaGFubmVscy5jbGVhcigpO1xuXHRcdHRoaXMud29ya2VyQ2hhbm5lbHMuY2xlYXIoKTtcblx0XHR0aGlzLmhhbmRsZXJzLmNsZWFyKCk7XG5cdFx0dGhpcy5waXBlbGluZXMuY2xlYXIoKTtcblx0fVxufTtcbnZhciBkZWZhdWx0SW5zdGFuY2UgPSBudWxsO1xuZnVuY3Rpb24gZ2V0VW5pZmllZE1lc3NhZ2luZyhjb25maWcpIHtcblx0aWYgKCFkZWZhdWx0SW5zdGFuY2UpIGRlZmF1bHRJbnN0YW5jZSA9IG5ldyBVbmlmaWVkTWVzc2FnaW5nTWFuYWdlcihjb25maWcpO1xuXHRyZXR1cm4gZGVmYXVsdEluc3RhbmNlO1xufVxuZnVuY3Rpb24gY3JlYXRlVW5pZmllZE1lc3NhZ2luZyhjb25maWcpIHtcblx0cmV0dXJuIG5ldyBVbmlmaWVkTWVzc2FnaW5nTWFuYWdlcihjb25maWcpO1xufVxuZnVuY3Rpb24gcmVzZXRVbmlmaWVkTWVzc2FnaW5nKCkge1xuXHRpZiAoZGVmYXVsdEluc3RhbmNlKSB7XG5cdFx0ZGVmYXVsdEluc3RhbmNlLmRlc3Ryb3koKTtcblx0XHRkZWZhdWx0SW5zdGFuY2UgPSBudWxsO1xuXHR9XG59XG5mdW5jdGlvbiBzZW5kTWVzc2FnZShtZXNzYWdlKSB7XG5cdHJldHVybiBnZXRVbmlmaWVkTWVzc2FnaW5nKCkuc2VuZE1lc3NhZ2UobWVzc2FnZSk7XG59XG5mdW5jdGlvbiByZWdpc3RlckhhbmRsZXIoZGVzdGluYXRpb24sIGhhbmRsZXIpIHtcblx0Z2V0VW5pZmllZE1lc3NhZ2luZygpLnJlZ2lzdGVySGFuZGxlcihkZXN0aW5hdGlvbiwgaGFuZGxlcik7XG59XG5mdW5jdGlvbiBnZXRCcm9hZGNhc3RDaGFubmVsKGNoYW5uZWxOYW1lKSB7XG5cdHJldHVybiBnZXRVbmlmaWVkTWVzc2FnaW5nKCkuZ2V0QnJvYWRjYXN0Q2hhbm5lbChjaGFubmVsTmFtZSk7XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9tZXNzYWdpbmcvU2VydmljZUNoYW5uZWxNYW5hZ2VyLnRzXG52YXIgU2VydmljZUNoYW5uZWxNYW5hZ2VyID0gY2xhc3Mge1xuXHRjaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHJlYWR5UHJvbWlzZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRtZXNzYWdlSGFuZGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjaGFubmVsQ29uZmlncztcblx0ZXhlY3V0aW9uQ29udGV4dDtcblx0bG9nUHJlZml4O1xuXHRjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuXHRcdHRoaXMuY2hhbm5lbENvbmZpZ3MgPSBjb25maWcuY2hhbm5lbHMgPz8ge307XG5cdFx0dGhpcy5sb2dQcmVmaXggPSBjb25maWcubG9nUHJlZml4ID8/IFwiW1NlcnZpY2VDaGFubmVsc11cIjtcblx0XHR0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPSBkZXRlY3RFeGVjdXRpb25Db250ZXh0KCk7XG5cdFx0Y29uc29sZS5sb2coYCR7dGhpcy5sb2dQcmVmaXh9IEluaXRpYWxpemVkIGluICR7dGhpcy5leGVjdXRpb25Db250ZXh0fSBjb250ZXh0YCk7XG5cdH1cblx0cmVnaXN0ZXJDb25maWdzKGNvbmZpZ3MpIHtcblx0XHR0aGlzLmNoYW5uZWxDb25maWdzID0ge1xuXHRcdFx0Li4udGhpcy5jaGFubmVsQ29uZmlncyxcblx0XHRcdC4uLmNvbmZpZ3Ncblx0XHR9O1xuXHR9XG5cdGdldENvbmZpZyhjaGFubmVsSWQpIHtcblx0XHRyZXR1cm4gdGhpcy5jaGFubmVsQ29uZmlnc1tjaGFubmVsSWRdO1xuXHR9XG5cdGdldEFsbENvbmZpZ3MoKSB7XG5cdFx0cmV0dXJuIHsgLi4udGhpcy5jaGFubmVsQ29uZmlncyB9O1xuXHR9XG5cdGFzeW5jIGluaXRDaGFubmVsKGNoYW5uZWxJZCkge1xuXHRcdGlmICh0aGlzLmNoYW5uZWxzLmhhcyhjaGFubmVsSWQpKSByZXR1cm4gdGhpcy5jaGFubmVscy5nZXQoY2hhbm5lbElkKTtcblx0XHRjb25zdCBjb25maWcgPSB0aGlzLmNoYW5uZWxDb25maWdzW2NoYW5uZWxJZF07XG5cdFx0aWYgKCFjb25maWcpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjaGFubmVsOiAke2NoYW5uZWxJZH0uIFJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gZmlyc3QuYCk7XG5cdFx0bGV0IHJlc29sdmVSZWFkeTtcblx0XHRjb25zdCByZWFkeVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0cmVzb2x2ZVJlYWR5ID0gcmVzb2x2ZTtcblx0XHR9KTtcblx0XHR0aGlzLnJlYWR5UHJvbWlzZXMuc2V0KGNoYW5uZWxJZCwge1xuXHRcdFx0cHJvbWlzZTogcmVhZHlQcm9taXNlLFxuXHRcdFx0cmVzb2x2ZTogcmVzb2x2ZVJlYWR5XG5cdFx0fSk7XG5cdFx0Y29uc29sZS5sb2coYCR7dGhpcy5sb2dQcmVmaXh9IEluaXRpYWxpemluZyBjaGFubmVsOiAke2NoYW5uZWxJZH0gLT4gJHtjb25maWcuYnJvYWRjYXN0TmFtZX1gKTtcblx0XHRjb25zdCBjaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoY29uZmlnLmJyb2FkY2FzdE5hbWUpO1xuXHRcdGNoYW5uZWwub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG5cdFx0XHR0aGlzLmhhbmRsZUluY29taW5nTWVzc2FnZShjaGFubmVsSWQsIGV2ZW50LmRhdGEpO1xuXHRcdH07XG5cdFx0Y2hhbm5lbC5vbm1lc3NhZ2VlcnJvciA9IChldmVudCkgPT4ge1xuXHRcdFx0Y29uc29sZS5lcnJvcihgJHt0aGlzLmxvZ1ByZWZpeH0gTWVzc2FnZSBlcnJvciBvbiAke2NoYW5uZWxJZH06YCwgZXZlbnQpO1xuXHRcdH07XG5cdFx0dGhpcy5jaGFubmVscy5zZXQoY2hhbm5lbElkLCBjaGFubmVsKTtcblx0XHRyZXNvbHZlUmVhZHkoKTtcblx0XHRjb25zb2xlLmxvZyhgJHt0aGlzLmxvZ1ByZWZpeH0gQ2hhbm5lbCByZWFkeTogJHtjaGFubmVsSWR9YCk7XG5cdFx0cmV0dXJuIGNoYW5uZWw7XG5cdH1cblx0Y2xvc2VDaGFubmVsKGNoYW5uZWxJZCkge1xuXHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLmNoYW5uZWxzLmdldChjaGFubmVsSWQpO1xuXHRcdGlmIChjaGFubmVsKSB7XG5cdFx0XHRjaGFubmVsLmNsb3NlKCk7XG5cdFx0XHR0aGlzLmNoYW5uZWxzLmRlbGV0ZShjaGFubmVsSWQpO1xuXHRcdFx0dGhpcy5yZWFkeVByb21pc2VzLmRlbGV0ZShjaGFubmVsSWQpO1xuXHRcdFx0dGhpcy5tZXNzYWdlSGFuZGxlcnMuZGVsZXRlKGNoYW5uZWxJZCk7XG5cdFx0XHRjb25zb2xlLmxvZyhgJHt0aGlzLmxvZ1ByZWZpeH0gQ2hhbm5lbCBjbG9zZWQ6ICR7Y2hhbm5lbElkfWApO1xuXHRcdH1cblx0fVxuXHRjbG9zZUFsbCgpIHtcblx0XHRmb3IgKGNvbnN0IGNoYW5uZWxJZCBvZiB0aGlzLmNoYW5uZWxzLmtleXMoKSkgdGhpcy5jbG9zZUNoYW5uZWwoY2hhbm5lbElkKTtcblx0fVxuXHRhc3luYyB3YWl0Rm9yQ2hhbm5lbChjaGFubmVsSWQpIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMucmVhZHlQcm9taXNlcy5nZXQoY2hhbm5lbElkKTtcblx0XHRpZiAoZGVmZXJyZWQpIGF3YWl0IGRlZmVycmVkLnByb21pc2U7XG5cdFx0ZWxzZSBhd2FpdCB0aGlzLmluaXRDaGFubmVsKGNoYW5uZWxJZCk7XG5cdH1cblx0YXN5bmMgc2VuZCh0YXJnZXQsIHR5cGUsIGRhdGEsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGF3YWl0IHRoaXMud2FpdEZvckNoYW5uZWwodGFyZ2V0KTtcblx0XHRjb25zdCBjaGFubmVsID0gdGhpcy5jaGFubmVscy5nZXQodGFyZ2V0KTtcblx0XHRpZiAoIWNoYW5uZWwpIHRocm93IG5ldyBFcnJvcihgQ2hhbm5lbCBub3QgcmVhZHk6ICR7dGFyZ2V0fWApO1xuXHRcdGNvbnN0IG1lc3NhZ2UgPSB7XG5cdFx0XHR0eXBlLFxuXHRcdFx0c291cmNlOiBvcHRpb25zLnNvdXJjZSA/PyB0aGlzLmV4ZWN1dGlvbkNvbnRleHQsXG5cdFx0XHR0YXJnZXQsXG5cdFx0XHRkYXRhLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpLFxuXHRcdFx0Y29ycmVsYXRpb25JZDogb3B0aW9ucy5jb3JyZWxhdGlvbklkXG5cdFx0fTtcblx0XHRjaGFubmVsLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuXHRcdGNvbnNvbGUubG9nKGAke3RoaXMubG9nUHJlZml4fSBTZW50IG1lc3NhZ2UgdG8gJHt0YXJnZXR9OmAsIHR5cGUpO1xuXHR9XG5cdGJyb2FkY2FzdCh0eXBlLCBkYXRhLCBzb3VyY2UpIHtcblx0XHRmb3IgKGNvbnN0IFtjaGFubmVsSWQsIGNoYW5uZWxdIG9mIHRoaXMuY2hhbm5lbHMpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSB7XG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdHNvdXJjZTogc291cmNlID8/IHRoaXMuZXhlY3V0aW9uQ29udGV4dCxcblx0XHRcdFx0dGFyZ2V0OiBjaGFubmVsSWQsXG5cdFx0XHRcdGRhdGEsXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fTtcblx0XHRcdGNoYW5uZWwucG9zdE1lc3NhZ2UobWVzc2FnZSk7XG5cdFx0fVxuXHRcdGNvbnNvbGUubG9nKGAke3RoaXMubG9nUHJlZml4fSBCcm9hZGNhc3QgbWVzc2FnZTpgLCB0eXBlKTtcblx0fVxuXHRzdWJzY3JpYmUoY2hhbm5lbElkLCBoYW5kbGVyKSB7XG5cdFx0aWYgKCF0aGlzLm1lc3NhZ2VIYW5kbGVycy5oYXMoY2hhbm5lbElkKSkgdGhpcy5tZXNzYWdlSGFuZGxlcnMuc2V0KGNoYW5uZWxJZCwgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlcnMuZ2V0KGNoYW5uZWxJZCkuYWRkKGhhbmRsZXIpO1xuXHRcdHRoaXMuaW5pdENoYW5uZWwoY2hhbm5lbElkKS5jYXRjaChjb25zb2xlLmVycm9yKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dGhpcy5tZXNzYWdlSGFuZGxlcnMuZ2V0KGNoYW5uZWxJZCk/LmRlbGV0ZShoYW5kbGVyKTtcblx0XHR9O1xuXHR9XG5cdGhhbmRsZUluY29taW5nTWVzc2FnZShjaGFubmVsSWQsIGRhdGEpIHtcblx0XHRjb25zdCBoYW5kbGVycyA9IHRoaXMubWVzc2FnZUhhbmRsZXJzLmdldChjaGFubmVsSWQpO1xuXHRcdGlmICghaGFuZGxlcnMgfHwgaGFuZGxlcnMuc2l6ZSA9PT0gMCkge1xuXHRcdFx0Y29uc29sZS5sb2coYCR7dGhpcy5sb2dQcmVmaXh9IE5vIGhhbmRsZXJzIGZvciAke2NoYW5uZWxJZH0sIG1lc3NhZ2UgcXVldWVkYCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1lc3NhZ2UgPSBkYXRhO1xuXHRcdGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykgdHJ5IHtcblx0XHRcdGhhbmRsZXIobWVzc2FnZSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoYCR7dGhpcy5sb2dQcmVmaXh9IEhhbmRsZXIgZXJyb3Igb24gJHtjaGFubmVsSWR9OmAsIGVycm9yKTtcblx0XHR9XG5cdH1cblx0aXNJbml0aWFsaXplZChjaGFubmVsSWQpIHtcblx0XHRyZXR1cm4gdGhpcy5jaGFubmVscy5oYXMoY2hhbm5lbElkKTtcblx0fVxuXHRnZXRJbml0aWFsaXplZENoYW5uZWxzKCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMuY2hhbm5lbHMua2V5cygpKTtcblx0fVxuXHRnZXRTdGF0dXMoKSB7XG5cdFx0Y29uc3Qgc3RhdHVzID0ge307XG5cdFx0Zm9yIChjb25zdCBjaGFubmVsSWQgb2YgT2JqZWN0LmtleXModGhpcy5jaGFubmVsQ29uZmlncykpIHN0YXR1c1tjaGFubmVsSWRdID0ge1xuXHRcdFx0Y29ubmVjdGVkOiB0aGlzLmNoYW5uZWxzLmhhcyhjaGFubmVsSWQpLFxuXHRcdFx0bGFzdEFjdGl2aXR5OiBEYXRlLm5vdygpLFxuXHRcdFx0cGVuZGluZ01lc3NhZ2VzOiAwXG5cdFx0fTtcblx0XHRyZXR1cm4gc3RhdHVzO1xuXHR9XG5cdGdldEV4ZWN1dGlvbkNvbnRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uQ29udGV4dDtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVNlcnZpY2VDaGFubmVsTWFuYWdlcihjb25maWcpIHtcblx0cmV0dXJuIG5ldyBTZXJ2aWNlQ2hhbm5lbE1hbmFnZXIoY29uZmlnKTtcbn1cbnZhciBkZWZhdWx0TWFuYWdlciA9IG51bGw7XG5mdW5jdGlvbiBnZXRTZXJ2aWNlQ2hhbm5lbE1hbmFnZXIoY29uZmlnKSB7XG5cdGlmICghZGVmYXVsdE1hbmFnZXIpIGRlZmF1bHRNYW5hZ2VyID0gbmV3IFNlcnZpY2VDaGFubmVsTWFuYWdlcihjb25maWcpO1xuXHRlbHNlIGlmIChjb25maWc/LmNoYW5uZWxzKSBkZWZhdWx0TWFuYWdlci5yZWdpc3RlckNvbmZpZ3MoY29uZmlnLmNoYW5uZWxzKTtcblx0cmV0dXJuIGRlZmF1bHRNYW5hZ2VyO1xufVxuZnVuY3Rpb24gcmVzZXRTZXJ2aWNlQ2hhbm5lbE1hbmFnZXIoKSB7XG5cdGlmIChkZWZhdWx0TWFuYWdlcikge1xuXHRcdGRlZmF1bHRNYW5hZ2VyLmNsb3NlQWxsKCk7XG5cdFx0ZGVmYXVsdE1hbmFnZXIgPSBudWxsO1xuXHR9XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L2NoYW5uZWwvQ2hhbm5lbE1lc3NhZ2VIYW5kbGVyLnRzXG5mdW5jdGlvbiBtYWtlQ2hhbm5lbE1lc3NhZ2VIYW5kbGVyKHRyYW5zcG9ydCwgY2hhbm5lbE5hbWUsIGhhbmRsZXIpIHtcblx0Y29uc3QgcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0IHNlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIodHJhbnNwb3J0KTtcblx0cmV0dXJuIChzdWJzY3JpYmVyKSA9PiB7XG5cdFx0Y29uc3QgcmVzcG9uZCA9IChkYXRhKSA9PiB7XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIgJiYgZGF0YS5yZXFJZCkgcmV0dXJuIChyZXN1bHQpID0+IHtcblx0XHRcdFx0Y29uc3QgcCA9IHBlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdHAucmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHRcdHBlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXF1ZXN0XCIpIHJldHVybiAocmVzdWx0LCB0cmFuc2ZlcikgPT4gc2VuZCh7XG5cdFx0XHRcdC4uLnJlc3VsdCxcblx0XHRcdFx0Y2hhbm5lbDogZGF0YS5zZW5kZXIsXG5cdFx0XHRcdHNlbmRlcjogY2hhbm5lbE5hbWUsXG5cdFx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdFx0cmVxSWQ6IGRhdGEucmVxSWRcblx0XHRcdH0sIHRyYW5zZmVyKTtcblx0XHRcdHJldHVybiBzZW5kO1xuXHRcdH07XG5cdFx0Y29uc3Qgb25NZXNzYWdlID0gKGRhdGEpID0+IHtcblx0XHRcdGlmICghc3Vic2NyaWJlci5hY3RpdmUpIHJldHVybjtcblx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRcdGNvbnN0IHAgPSBwZW5kaW5nLmdldChkYXRhLnJlcUlkKTtcblx0XHRcdFx0aWYgKHApIHtcblx0XHRcdFx0XHRwLnJlc29sdmUoZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0XHRwZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aGFuZGxlciA/IGhhbmRsZXIoZGF0YSwgcmVzcG9uZChkYXRhKSkgOiBzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG5cdFx0fTtcblx0XHRjb25zdCBjbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodHJhbnNwb3J0LCBvbk1lc3NhZ2UsIChlKSA9PiBzdWJzY3JpYmVyLmVycm9yKGUpLCAoKSA9PiBzdWJzY3JpYmVyLmNvbXBsZXRlKCkpO1xuXHRcdHN1YnNjcmliZXIucmVxdWVzdCA9IChtc2cpID0+IHtcblx0XHRcdGNvbnN0IHJlcUlkID0gbXNnLnJlcUlkID8/IFVVSUR2NCgpO1xuXHRcdFx0bXNnLnJlcUlkID0gcmVxSWQ7XG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRwZW5kaW5nLnNldChyZXFJZCwge1xuXHRcdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2VuZChtc2cpO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRyZXR1cm4gY2xlYW51cDtcblx0fTtcbn1cbnZhciBDaGFubmVsTWVzc2FnZU9ic2VydmFibGUgPSBjbGFzcyB7XG5cdF90cmFuc3BvcnQ7XG5cdF9jaGFubmVsTmFtZTtcblx0X3BlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0X3NlbmQ7XG5cdF9hY3RpdmUgPSBmYWxzZTtcblx0Y29uc3RydWN0b3IoX3RyYW5zcG9ydCwgX2NoYW5uZWxOYW1lKSB7XG5cdFx0dGhpcy5fdHJhbnNwb3J0ID0gX3RyYW5zcG9ydDtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKF90cmFuc3BvcnQpO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9ic2VydmVyKTtcblx0XHRpZiAoIXRoaXMuX2FjdGl2ZSkgdGhpcy5fYWN0aXZhdGUoKTtcblx0XHRyZXR1cm4geyB1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzZXJ2ZXIpO1xuXHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCkgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHRcdH0gfTtcblx0fVxuXHRuZXh0KG1zZywgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kKG1zZywgdHJhbnNmZXIpO1xuXHR9XG5cdHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdCxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMubmV4dCh7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWRcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAodGhpcy5fYWN0aXZlKSByZXR1cm47XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRoaXMuX3RyYW5zcG9ydCwgKGRhdGEpID0+IHtcblx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRcdGNvbnN0IHAgPSB0aGlzLl9wZW5kaW5nLmdldChkYXRhLnJlcUlkKTtcblx0XHRcdFx0aWYgKHApIHtcblx0XHRcdFx0XHRwLnJlc29sdmUoZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRcdHMubmV4dD8uKGRhdGEpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHR9XG5cdFx0fSwgKGUpID0+IHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5lcnJvcj8uKGUpKSwgKCkgPT4gdGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSkpO1xuXHRcdHRoaXMuX2FjdGl2ZSA9IHRydWU7XG5cdH1cblx0X2RlYWN0aXZhdGUoKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fY2xlYW51cCA9IG51bGw7XG5cdFx0dGhpcy5fYWN0aXZlID0gZmFsc2U7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVDaGFubmVsUmVxdWVzdEhhbmRsZXIoY2hhbm5lbE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRyZXR1cm4gYXN5bmMgKGRhdGEsIHJlc3BvbmQpID0+IHtcblx0XHRpZiAoZGF0YS50eXBlICE9PSBcInJlcXVlc3RcIiB8fCBkYXRhLmNoYW5uZWwgIT09IGNoYW5uZWxOYW1lKSByZXR1cm47XG5cdFx0b3B0aW9ucy5vblJlcXVlc3Q/LihkYXRhLnBheWxvYWQpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVJlcXVlc3QoZGF0YS5wYXlsb2FkLCBkYXRhLnJlcUlkLCBjaGFubmVsTmFtZSk7XG5cdFx0aWYgKHJlc3VsdCkge1xuXHRcdFx0b3B0aW9ucy5vblJlc3BvbnNlPy4ocmVzdWx0LnJlc3BvbnNlKTtcblx0XHRcdHJlc3BvbmQoe1xuXHRcdFx0XHQuLi5yZXN1bHQucmVzcG9uc2UsXG5cdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9LCByZXN1bHQudHJhbnNmZXIpO1xuXHRcdH1cblx0fTtcbn1cbnZhciBPYnNlcnZhYmxlUmVxdWVzdERpc3BhdGNoZXIgPSBjbGFzcyB7XG5cdF9jaGFubmVsTmFtZTtcblx0X3RhcmdldENoYW5uZWw7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3N1YnNjcmliZXIgPSBudWxsO1xuXHRjb25zdHJ1Y3RvcihfY2hhbm5lbE5hbWUsIF90YXJnZXRDaGFubmVsKSB7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fdGFyZ2V0Q2hhbm5lbCA9IF90YXJnZXRDaGFubmVsO1xuXHR9XG5cdGNvbm5lY3Qoc3Vic2NyaWJlcikge1xuXHRcdHRoaXMuX3N1YnNjcmliZXIgPSBzdWJzY3JpYmVyO1xuXHR9XG5cdGRpc2Nvbm5lY3QoKSB7XG5cdFx0Zm9yIChjb25zdCBwIG9mIHRoaXMuX3BlbmRpbmcudmFsdWVzKCkpIHAucmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJEaXNjb25uZWN0ZWRcIikpO1xuXHRcdHRoaXMuX3BlbmRpbmcuY2xlYXIoKTtcblx0XHR0aGlzLl9zdWJzY3JpYmVyID0gbnVsbDtcblx0fVxuXHRoYW5kbGVNZXNzYWdlKGRhdGEpIHtcblx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIgJiYgZGF0YS5yZXFJZCkge1xuXHRcdFx0Y29uc3QgcCA9IHRoaXMuX3BlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0aWYgKHApIHtcblx0XHRcdFx0cC5yZXNvbHZlKGRhdGEucGF5bG9hZCk7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRkaXNwYXRjaChhY3Rpb24sIHBhdGgsIGFyZ3MpIHtcblx0XHRpZiAoIXRoaXMuX3N1YnNjcmliZXI/LmFjdGl2ZSkgcmV0dXJuIFByb21pc2UucmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJOb3QgY29ubmVjdGVkXCIpKTtcblx0XHRjb25zdCByZXFJZCA9IFVVSUR2NCgpO1xuXHRcdGNvbnN0IG1zZyA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IHRoaXMuX3RhcmdldENoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0dHlwZTogXCJyZXF1ZXN0XCIsXG5cdFx0XHRyZXFJZCxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fdGFyZ2V0Q2hhbm5lbCxcblx0XHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRhcmdzXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHRjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdHJlc29sdmUsXG5cdFx0XHRyZWplY3QsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KSk7XG5cdFx0dGhpcy5fc3Vic2NyaWJlci5uZXh0KG1zZyk7XG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9pbmRleC50c1xudmFyIHN5bmMgPSBhc3luYyAoY2hhbm5lbCwgb3B0aW9ucyA9IHt9LCBicm9hZGNhc3QgPSBudWxsKSA9PiBjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbChjaGFubmVsLCBvcHRpb25zLCBicm9hZGNhc3QgPz8gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGwpKTtcbnZhciBpbXBvcnRNb2R1bGVJbkNoYW5uZWwgPSBhc3luYyAoY2hhbm5lbCwgdXJsLCBvcHRpb25zID0ge30sIGJyb2FkY2FzdCA9IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGwpID0+IHtcblx0cmV0dXJuIChhd2FpdCBjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbChjaGFubmVsLCBvcHRpb25zPy5jaGFubmVsT3B0aW9ucywgYnJvYWRjYXN0KSk/LmRvSW1wb3J0TW9kdWxlPy4odXJsLCBvcHRpb25zPy5pbXBvcnRPcHRpb25zKTtcbn07XG52YXIgY3JlYXRlQ29udGV4dCA9IGNyZWF0ZUNoYW5uZWxDb250ZXh0O1xudmFyIGdldFNoYXJlZENvbnRleHQgPSBnZXRPckNyZWF0ZUNvbnRleHQ7XG52YXIgY3JlYXRlTXVsdGlDaGFubmVsID0gY3JlYXRlQ2hhbm5lbHNJbkNvbnRleHQ7XG52YXIgaW1wb3J0SXNvbGF0ZWRNb2R1bGUgPSBpbXBvcnRNb2R1bGVJbkNvbnRleHQ7XG52YXIgY29ubmVjdFRvQ2hhbm5lbEFzTW9kdWxlID0gYXN5bmMgKGNoYW5uZWwsIG9wdGlvbnMgPSB7fSwgYnJvYWRjYXN0ID0gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogbnVsbCwgaG9zdENoYW5uZWwgPSBcIiRob3N0JFwiKSA9PiB7XG5cdGNvbnN0IGhvc3QgPSBjcmVhdGVIb3N0Q2hhbm5lbChob3N0Q2hhbm5lbCA/PyBcIiRob3N0JFwiKTtcblx0YXdhaXQgaG9zdD8uY3JlYXRlUmVtb3RlQ2hhbm5lbChjaGFubmVsLCBvcHRpb25zLCBicm9hZGNhc3QpO1xuXHRyZXR1cm4gd3JhcENoYW5uZWwoY2hhbm5lbCwgaG9zdCA/PyBTRUxGX0NIQU5ORUw/Lmluc3RhbmNlKTtcbn07XG52YXIgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uUnVudGltZUNoYW5uZWwgPSAoY2hhbm5lbE5hbWUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRjb25zdCBjb250ZXh0ID0gZGV0ZWN0RXhlY3V0aW9uQ29udGV4dCgpO1xuXHRpZiAoY29udGV4dCAhPT0gXCJjaHJvbWUtZXh0ZW5zaW9uXCIpIHJldHVybiB7XG5cdFx0YXN5bmMgcmVxdWVzdChtZXRob2QpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgQ2hyb21lIGV4dGVuc2lvbiBtZXNzYWdpbmcgbm90IGF2YWlsYWJsZSBpbiAke2NvbnRleHR9YCk7XG5cdFx0fSxcblx0XHRjbG9zZSgpIHt9XG5cdH07XG5cdHJldHVybiB7XG5cdFx0YXN5bmMgcmVxdWVzdChtZXRob2QsIGFyZ3MgPSBbXSkge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7XG5cdFx0XHRcdFx0XHRpZDogYGNyeF8ke0RhdGUubm93KCl9XyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMil9YCxcblx0XHRcdFx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdFx0XHRcdHNvdXJjZTogY29udGV4dCxcblx0XHRcdFx0XHRcdHRhcmdldDogY2hhbm5lbE5hbWUsXG5cdFx0XHRcdFx0XHRkYXRhOiBhcmdzPy5sZW5ndGggPT09IDEgPyBhcmdzWzBdIDogYXJncyxcblx0XHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcblx0XHRcdFx0XHRcdFx0Li4ub3B0aW9ucz8ubWV0YWRhdGEgPz8ge31cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCAocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0XHRcdGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpIHJlamVjdChuZXcgRXJyb3IoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yLm1lc3NhZ2UpKTtcblx0XHRcdFx0XHRcdGVsc2UgcmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRjbG9zZSgpIHt9XG5cdH07XG59O1xuXG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7ICRjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbCwgJGRlc2NyaXB0b3IsICRyZXF1ZXN0SGFuZGxlciwgQWJzdHJhY3RUcmFuc3BvcnQsIEF0b21pY3NCdWZmZXIsIEF0b21pY3NSaW5nQnVmZmVyLCBBdG9taWNzVHJhbnNwb3J0LCBBdG9taWNzVHJhbnNwb3J0RmFjdG9yeSwgQmlkaXJlY3Rpb25hbEludm9rZXIsIEJyb2FkY2FzdENoYW5uZWxPYnNlcnZhYmxlLCBCcm9hZGNhc3RDaGFubmVsVHJhbnNwb3J0LCBDSEFOTkVMX01BUCwgQ2hhbm5lbENvbm5lY3Rpb24sIENoYW5uZWxDb250ZXh0LCBDaGFubmVsSGFuZGxlciwgQ2hhbm5lbEhhbmRsZXIgYXMgT2JzZXJ2YWJsZUNoYW5uZWxIYW5kbGVyLCBDaGFubmVsTWVzc2FnZU9ic2VydmFibGUsIE9ic2VydmFibGUgYXMgQ2hhbm5lbE5hdGl2ZU9ic2VydmFibGUsIE9ic2VydmFibGUsIENoYW5uZWxPYnNlcnZhYmxlLCBDaGFubmVsU3RvcmFnZSwgQ2hhbm5lbFN1YmplY3QsIENoYW5uZWxUcmFuc2FjdGlvbiwgQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbCwgQ2hyb21lRXh0ZW5zaW9uUG9ydENoYW5uZWwsIENocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsLCBDaHJvbWVFeHRlcm5hbE9ic2VydmFibGUsIENocm9tZUV4dGVybmFsVHJhbnNwb3J0LCBDaHJvbWVPYnNlcnZhYmxlRmFjdG9yeSwgQ2hyb21lUG9ydE9ic2VydmFibGUsIENocm9tZVBvcnRUcmFuc3BvcnQsIENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlLCBDaHJvbWVSdW50aW1lVHJhbnNwb3J0LCBDaHJvbWVUYWJzT2JzZXJ2YWJsZSwgQ2hyb21lVGFic1RyYW5zcG9ydCwgQ29ubmVjdGlvblBvb2wsIERlZmF1bHRSZWZsZWN0LCBEaXNwYXRjaFByb3h5SGFuZGxlciBhcyBEaXNwYXRjaEhhbmRsZXIsIERpc3BhdGNoUHJveHlIYW5kbGVyLCBNZXNzYWdlT2JzZXJ2YWJsZSwgTWVzc2FnZVBvcnRPYnNlcnZhYmxlLCBNZXNzYWdlUG9ydFRyYW5zcG9ydCwgTWVzc2FnZVF1ZXVlLCBNZXNzYWdlUXVldWVTdG9yYWdlLCBPYnNlcnZhYmxlRmFjdG9yeSwgT2JzZXJ2YWJsZVJlcXVlc3REaXNwYXRjaGVyLCBPcHRpbWl6ZWRXb3JrZXJDaGFubmVsLCBQUk9YWV9JTlRFUk5BTFMsIFBST1hZX01BUktFUiwgUGVuZGluZ01lc3NhZ2VTdG9yZSwgUG9ydFBvb2wsIFBvcnRUcmFuc3BvcnQsIFBvcnRUcmFuc3BvcnRGYWN0b3J5LCBQcm90b2NvbFJlcGxheUd1YXJkLCBQcm94eUJ1aWxkZXIsIFF1ZXVlZFdvcmtlckNoYW5uZWwsIFJFQUQsIFJUQ1BlZXJNYW5hZ2VyLCBSVENQZWVyVHJhbnNwb3J0LCBSVENUcmFuc3BvcnRGYWN0b3J5LCBSZW1vdGVDaGFubmVsSGVscGVyLCBSZW1vdGVDaGFubmVscywgUmVtb3RlUHJveHlIYW5kbGVyLCBSZXBsYXlDaGFubmVsU3ViamVjdCwgUmVxdWVzdG9yLCBSZXNwb25kZXIsIFNFTEZfQ0hBTk5FTCwgU2VsZk9ic2VydmFibGUsIFNlbGZUcmFuc3BvcnQsIFNlcnZpY2VDaGFubmVsTWFuYWdlciwgU2VydmljZVdvcmtlckNsaWVudCwgU2VydmljZVdvcmtlckNsaWVudE9ic2VydmFibGUsIFNlcnZpY2VXb3JrZXJIb3N0LCBTZXJ2aWNlV29ya2VySG9zdE9ic2VydmFibGUsIFNlcnZpY2VXb3JrZXJUcmFuc3BvcnQsIFNoYXJlZFdvcmtlckNsaWVudCwgU2hhcmVkV29ya2VySG9zdCwgU2hhcmVkV29ya2VyT2JzZXJ2YWJsZUZhY3RvcnksIFNvY2tldElPT2JzZXJ2YWJsZSwgU29ja2V0SU9PYnNlcnZhYmxlRmFjdG9yeSwgU29ja2V0SU9Sb29tT2JzZXJ2YWJsZSwgVHJhbnNmZXJhYmxlU3RvcmFnZSwgVHJhbnNmZXJhYmxlU3RvcmFnZUZhY3RvcnksIFRyYW5zcG9ydEFkYXB0ZXIsIENocm9tZVBvcnRPYnNlcnZhYmxlJDEgYXMgVHJhbnNwb3J0Q2hyb21lUG9ydE9ic2VydmFibGUsIENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlJDEgYXMgVHJhbnNwb3J0Q2hyb21lUnVudGltZU9ic2VydmFibGUsIENocm9tZVRhYnNPYnNlcnZhYmxlJDEgYXMgVHJhbnNwb3J0Q2hyb21lVGFic09ic2VydmFibGUsIFRyYW5zcG9ydENvcmVGYWN0b3J5LCBUcmFuc3BvcnRGYWN0b3J5LCBUcmFuc3BvcnRPYnNlcnZhYmxlLCBUcmFuc3BvcnRPYnNlcnZhYmxlRmFjdG9yeSwgVW5pZmllZENoYW5uZWwsIFVuaWZpZWRNZXNzYWdpbmdNYW5hZ2VyLCBVbmlmaWVkVHJhbnNwb3J0RmFjdG9yeSwgV1JlZmxlY3RBY3Rpb24sIFdTdGF0dXMsIFdUeXBlLCBXZWJTb2NrZXRPYnNlcnZhYmxlLCBXZWJTb2NrZXRUcmFuc3BvcnQsIFdpbmRvd1BvcnRDb25uZWN0b3IsIFdvcmtlckNvbnRleHQsIFdvcmtlck9ic2VydmFibGUsIFdvcmtlclRyYW5zcG9ydCwgYWRkQnJvYWRjYXN0Q2hhbm5lbCwgYWRkUG9ydENoYW5uZWwsIGFkZFNlbGZDaGFubmVsVG9EZWZhdWx0LCBhZGRXb3JrZXJDaGFubmVsLCBhdXRvSW52b2tlciwgYmluZFNlcnZpY2VXb3JrZXJIb3N0QnJpZGdlLCBidWlsZFJlc3BvbnNlLCBjbG9zZUFsbFN0b3JhZ2UsIGNsb3NlVW5pZmllZENoYW5uZWwsIGNvbm5lY3RUb0NoYW5uZWxBc01vZHVsZSwgY3JlYXRlQXRvbWljc0NoYW5uZWxQYWlyLCBjcmVhdGVCaWRpcmVjdGlvbmFsQ2hhbm5lbCwgY3JlYXRlQmlkaXJlY3Rpb25hbENoYW5uZWwkMSBhcyBjcmVhdGVCaWRpcmVjdGlvbmFsVHJhbnNwb3J0LCBjcmVhdGVCcm9hZGNhc3RTaWduYWxpbmcsIGNyZWF0ZUJyb2FkY2FzdFRyYW5zcG9ydCwgY3JlYXRlQ2hhbm5lbENvbnRleHQsIGNyZWF0ZUNoYW5uZWxQYWlyLCBjcmVhdGVDaGFubmVsUmVxdWVzdEhhbmRsZXIsIGNyZWF0ZUNoYW5uZWxzSW5Db250ZXh0LCBjcmVhdGVDaHJvbWVFeHRlbnNpb25Ccm9hZGNhc3QsIGNyZWF0ZUNocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWwsIGNyZWF0ZUNocm9tZUV4dGVuc2lvbkNoYW5uZWwsIGNyZWF0ZUNocm9tZUV4dGVuc2lvblJ1bnRpbWVDaGFubmVsLCBjcmVhdGVDaHJvbWVFeHRlbnNpb25UYWJzQ2hhbm5lbCwgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uVGFic01lc3NhZ2luZ0NoYW5uZWwsIGNyZWF0ZUNocm9tZUxpc3RlbmVyLCBjcmVhdGVDaHJvbWVSZXF1ZXN0SGFuZGxlciwgY3JlYXRlQ2hyb21lVGFic0xpc3RlbmVyLCBjcmVhdGVDb25uZWN0aW9uT2JzZXJ2ZXIsIGNyZWF0ZUNvbnRleHQsIGNyZWF0ZURlZmF1bHRDaGFubmVsUGFpciwgY3JlYXRlRXhwb3NlSGFuZGxlciwgY3JlYXRlRnJvbVBvcnQsIGNyZWF0ZUhvc3RDaGFubmVsLCBjcmVhdGVIb3N0UHJveHksIGNyZWF0ZUludm9rZXIsIGNyZWF0ZUludm9rZXJPYnNlcnZhYmxlLCBjcmVhdGVNZXNzYWdlSWQsIGNyZWF0ZU1lc3NhZ2VRdWV1ZSwgY3JlYXRlTXVsdGlDaGFubmVsLCBjcmVhdGVPYnNlcnZhYmxlQ2hhbm5lbCwgY3JlYXRlT3B0aW1pemVkV29ya2VyQ2hhbm5lbCwgY3JlYXRlT3JVc2VFeGlzdGluZ0NoYW5uZWwsIGNyZWF0ZVBvcnRQcm94eSwgY3JlYXRlUHJvdG9jb2xFbnZlbG9wZSwgY3JlYXRlUXVldWVkT3B0aW1pemVkV29ya2VyQ2hhbm5lbCwgY3JlYXRlUXVldWVkV29ya2VyQ2hhbm5lbCwgY3JlYXRlUmVmbGVjdEhhbmRsZXIsIGNyZWF0ZVJlbW90ZVByb3h5LCBjcmVhdGVSZXF1ZXN0b3IsIGNyZWF0ZVJlc3BvbmRlciwgY3JlYXRlU2VuZGVyUHJveHksIGNyZWF0ZVNlcnZpY2VDaGFubmVsTWFuYWdlciwgY3JlYXRlU2VydmljZVdvcmtlckNoYW5uZWwsIGNyZWF0ZVNlcnZpY2VXb3JrZXJDbGllbnQsIGNyZWF0ZVNlcnZpY2VXb3JrZXJIb3N0LCBjcmVhdGVTaGFyZWRXb3JrZXJIb3N0T2JzZXJ2YWJsZSwgY3JlYXRlU2hhcmVkV29ya2VyT2JzZXJ2YWJsZSwgY3JlYXRlU29ja2V0T2JzZXJ2YWJsZSwgY3JlYXRlU29ja2V0UmVxdWVzdEhhbmRsZXIsIGNyZWF0ZVRyYW5zcG9ydCwgY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIsIGNyZWF0ZVRyYW5zcG9ydFNlbmRlciwgY3JlYXRlVW5pZmllZENoYW5uZWwsIGNyZWF0ZVVuaWZpZWRDaGFubmVsUGFpciwgY3JlYXRlVW5pZmllZE1lc3NhZ2luZywgY3JlYXRlV2ViU29ja2V0VHJhbnNwb3J0LCBjcmVhdGVXb3JrZXJBdG9taWNzVHJhbnNwb3J0LCBjcmVhdGVXb3JrZXJDaGFubmVsLCBkZWJvdW5jZSwgZGVmZXJDaGFubmVsLCBkZWxheSwgZGVsZXRlQ29udGV4dCwgZGVzY01hcCwgZGV0ZWN0Q29udGV4dFR5cGUsIGRldGVjdEV4ZWN1dGlvbkNvbnRleHQsIGRldGVjdEluY29taW5nQ29udGV4dFR5cGUsIGRldGVjdFRyYW5zcG9ydFR5cGUgYXMgZGV0ZWN0VHJhbnNwb3J0LCBkZXRlY3RUcmFuc3BvcnRUeXBlJDEgYXMgZGV0ZWN0VHJhbnNwb3J0VHlwZSwgZXhlY3V0ZUFjdGlvbiwgZXhwb3NlRnJvbVVuaWZpZWQsIGV4cG9zZUZyb21Xb3JrZXIsIGV4cG9zZU92ZXJQb3J0LCBmaWx0ZXIsIGZyb21FdmVudCwgZnJvbVByb21pc2UsIGdldEJyb2FkY2FzdENoYW5uZWwsIGdldENoYW5uZWxGcm9tRGVmYXVsdCwgZ2V0Q2hhbm5lbFN0b3JhZ2UsIGdldENvbm5lY3Rpb24sIGdldENvbm5lY3Rpb25Qb29sLCBnZXRDb250ZXh0LCBnZXRDb250ZXh0TmFtZXMsIGdldEN1cnJlbnRUYWJJZCwgZ2V0RGVmYXVsdENvbnRleHQsIGdldEhvc3RDb25uZWN0aW9uLCBnZXRNZXNzYWdlUXVldWUsIGdldE9yQ3JlYXRlQ29udGV4dCwgZ2V0UHJveHlEZXNjcmlwdG9yLCBnZXRQcm94eUludGVybmFscywgZ2V0U2VydmljZUNoYW5uZWxNYW5hZ2VyLCBnZXRTaGFyZWRDb250ZXh0LCBnZXRUcmFuc3BvcnRNZXRhLCBnZXRUcmFuc3BvcnRSZWdpc3RyeSwgZ2V0VW5pZmllZENoYW5uZWwsIGdldFVuaWZpZWRDaGFubmVsTmFtZXMsIGdldFVuaWZpZWRNZXNzYWdpbmcsIGdldFZpc2libGVUYWJJZCwgZ2V0V29ya2VyQ2hhbm5lbCwgZ2V0V29ya2VyQ29udGV4dCwgZ2V0V29ya2VySW52b2tlciwgZ2V0V29ya2VyUmVzb2x2ZUJhc2VVcmwsIGdldFdvcmtlclJlc3BvbmRlciwgaGFuZE1hcCwgaGFuZGxlUmVxdWVzdCwgaGFzTm9QYXRoLCBpbXBvcnRJbkhvc3QsIGltcG9ydElzb2xhdGVkTW9kdWxlLCBpbXBvcnRNb2R1bGVJbkNoYW5uZWwsIGltcG9ydE1vZHVsZUluQ29udGV4dCwgaW5pdENoYW5uZWxIYW5kbGVyLCBpbml0RGVmZXJyZWRDaGFubmVsLCBpbml0TWFpbkNoYW5uZWwsIGluaXRXb3JrZXJDb250ZXh0LCBpbnRlcnZhbCwgaXNDaHJvbWVFeHRlbnNpb25Db250ZXh0LCBpc1Byb3RvY29sRW52ZWxvcGUsIGlzUmVtb3RlUHJveHksIGlzU2VydmljZVdvcmtlckNvbnRleHQsIGxvYWRXb3JrZXIsIG1ha2VCcm9hZGNhc3RJbnZva2VyLCBtYWtlQ2hhbm5lbE1lc3NhZ2VIYW5kbGVyLCBtYWtlQ2hyb21lUnVudGltZUludm9rZXIsIG1ha2VNZXNzYWdlUG9ydEludm9rZXIsIG1ha2VPYnNlcnZhYmxlUmVxdWVzdFByb3h5LCBtYWtlUmVxdWVzdFByb3h5LCBtYWtlU2VsZkludm9rZXIsIG1ha2VTZXJ2aWNlV29ya2VyQ2xpZW50SW52b2tlciwgbWFrZVNlcnZpY2VXb3JrZXJIb3N0SW52b2tlciwgbWFrZVdlYlNvY2tldEludm9rZXIsIG1ha2VXb3JrZXJJbnZva2VyLCBtYXAsIG1lcmdlLCBub3JtYWxpemVQcm90b2NvbEVudmVsb3BlLCBub3JtYWxpemVSZWYsIG9iamVjdFRvUmVmLCBvbldvcmtlckNoYW5uZWxDcmVhdGVkLCBvbldvcmtlckNvbm5lY3Rpb24sIG9uV29ya2VySW52b2NhdGlvbiwgcHJveHlCdWlsZGVyLCByZWFkQnlQYXRoLCByZWdpc3RlckhhbmRsZXIsIHJlZ2lzdGVyV29ya2VyQVBJLCByZWdpc3RlcmVkSW5QYXRoLCByZW1vdGVGcm9tVW5pZmllZCwgcmVtb3ZlQnlEYXRhLCByZW1vdmVCeVBhdGgsIHJlc2V0U2VydmljZUNoYW5uZWxNYW5hZ2VyLCByZXNldFVuaWZpZWRNZXNzYWdpbmcsIHJlc29sdmVXb3JrZXJTcGVjaWZpZXJIcmVmLCBzZW5kTWVzc2FnZSwgc2V0dXBJbnZva2VyLCBzZXR1cFVuaWZpZWRDaGFubmVsLCBzdG9yZWREYXRhLCBzdXBwb3J0c0RlZGljYXRlZFdvcmtlcnMsIHN5bmMsIHRha2UsIHRha2VVbnRpbCwgdGhyb3R0bGUsIHRyYXZlcnNlQnlQYXRoLCB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5LCB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5UmVjdXJzaXZlLCB3aGVuLCBjdHggYXMgd29ya2VyQ29udGV4dCwgd3JhcENoYW5uZWwsIHdyYXBEZXNjcmlwdG9yLCB3cmFwTWFwLCB3cmFwT2JzZXJ2YWJsZUNoYW5uZWwsIHdyaXRlQnlQYXRoIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxZQUFBQSxJQUFVLFVBQUFDLEdBQVEsdUJBQUFDLElBQXFCLG1CQUFBQyxJQUFpQixpQkFBQUMsSUFBZSxxQkFBQUMsSUFBbUIsZUFBQUMsVUFBbUI7QUFHdEgsSUFBSUMsS0FBMEIsMEJBQVNBLEdBQVM7QUFDL0MsU0FBQUEsRUFBUSxVQUFhLFdBQ3JCQSxFQUFRLFFBQVcsU0FDWkE7QUFDUixHQUFFLENBQUMsQ0FBQyxHQUNBQyxLQUF3QiwwQkFBU0EsR0FBTztBQUMzQyxTQUFBQSxFQUFNLFlBQWUsYUFDckJBLEVBQU0sU0FBWSxVQUNsQkEsRUFBTSxTQUFZLFVBQ2xCQSxFQUFNLFVBQWEsV0FDbkJBLEVBQU0sU0FBWSxVQUNsQkEsRUFBTSxZQUFlLGFBQ3JCQSxFQUFNLE9BQVUsUUFDaEJBLEVBQU0sU0FBWSxVQUNsQkEsRUFBTSxXQUFjLFlBQ3BCQSxFQUFNLFFBQVcsU0FDakJBLEVBQU0sTUFBUyxPQUNmQSxFQUFNLE1BQVMsT0FDZkEsRUFBTSxTQUFZLFVBQ2xCQSxFQUFNLFdBQWMsV0FDcEJBLEVBQU0sVUFBYSxXQUNuQkEsRUFBTSxVQUFhLFdBQ1pBO0FBQ1IsR0FBRSxDQUFDLENBQUMsR0FD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QUFBLElBQ0EsUUFBUTtBQUFBLElBQUM7QUFBQSxFQUNWLElBQ087QUFBQSxJQUNOLE1BQU0sUUFBUW9NLEdBQVFuZixJQUFPLENBQUMsR0FBRztBQUNoQyxhQUFPLElBQUksUUFBUSxDQUFDcEUsR0FBU0MsTUFBVztBQUN2QyxZQUFJO0FBQ0gsaUJBQU8sUUFBUSxZQUFZO0FBQUEsWUFDMUIsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFBQSxZQUM1RCxNQUFNc2pCO0FBQUEsWUFDTixRQUFRcE07QUFBQSxZQUNSLFFBQVEvWTtBQUFBLFlBQ1IsTUFBTWdHLEdBQU0sV0FBVyxJQUFJQSxFQUFLLENBQUMsSUFBSUE7QUFBQSxZQUNyQyxVQUFVO0FBQUEsY0FDVCxXQUFXLEtBQUssSUFBSTtBQUFBLGNBQ3BCLEdBQUd4SSxHQUFTLFlBQVksQ0FBQztBQUFBLFlBQzFCO0FBQUEsVUFDRCxHQUFHLENBQUM4TixNQUFhO0FBQ2hCLFlBQUksT0FBTyxRQUFRLFlBQVd6SixFQUFPLElBQUksTUFBTSxPQUFPLFFBQVEsVUFBVSxPQUFPLENBQUMsSUFDM0VELEVBQVEwSixDQUFRO0FBQUEsVUFDdEIsQ0FBQztBQUFBLFFBQ0YsU0FBU2tSLEdBQU87QUFDZixVQUFBM2EsRUFBTzJhLENBQUs7QUFBQSxRQUNiO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRjtBQUFBLElBQ0EsUUFBUTtBQUFBLElBQUM7QUFBQSxFQUNWO0FBQ0Q7IiwKICAibmFtZXMiOiBbIlByb21pc2VkIiwgIlVVSUR2NCIsICJkZWVwT3BlcmF0ZUFuZENsb25lIiwgImlzQ2FuSnVzdFJldHVybiIsICJpc0NhblRyYW5zZmVyIiwgImlzTm90Q29tcGxleEFycmF5IiwgImlzUHJpbWl0aXZlIiwgIldTdGF0dXMiLCAiV1R5cGUiLCAiV1JlZmxlY3RBY3Rpb24iLCAiVFJBTlNQT1JUX1RZUEVfQUxJQVNFUyIsICJub3JtYWxpemVUcmFuc3BvcnRUeXBlQWxpYXMiLCAidHJhbnNwb3J0IiwgInJhdyIsICJkZXRlY3RUcmFuc3BvcnRUeXBlJDEiLCAiZ2V0VHJhbnNwb3J0TWV0YSIsICJ0eXBlIiwgImNyZWF0ZVRyYW5zcG9ydFNlbmRlciIsICJvcHRpb25zIiwgIm1zZyIsICJ0cmFuc2ZlciIsICJ0cmFuc2ZlcmFibGUiLCAiXyIsICJkYXRhIiwgInRhYklkIiwgInBvcnROYW1lIiwgImV4dGVybmFsSWQiLCAicmVnIiwgImNsaWVudElkIiwgImFsbCIsICJjIiwgImNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyIiwgIm9uTWVzc2FnZSIsICJvbkVycm9yIiwgIm9uQ2xvc2UiLCAibXNnSGFuZGxlciIsICJlIiwgImVyciIsICJlcnJIYW5kbGVyIiwgImNsb3NlSGFuZGxlciIsICJsaXN0ZW5lciIsICJjcmVhdGVDaHJvbWVUYWJzTGlzdGVuZXIiLCAicG9ydCIsICJoYW5kbGVyIiwgImNyZWF0ZUNocm9tZUxpc3RlbmVyIiwgIm1lc3NhZ2UiLCAic2VuZGVyIiwgInNlbmRSZXNwb25zZSIsICJjcmVhdGVXZWJTb2NrZXRUcmFuc3BvcnQiLCAidXJsIiwgInNvY2tldCIsICJyZWNvbm5lY3RBdHRlbXB0cyIsICJyZWNvbm5lY3RUaW1lciIsICJzZW5kIiwgInJlY29ubmVjdCIsICJjbG9zZSIsICJoIiwgImNyZWF0ZUJyb2FkY2FzdFRyYW5zcG9ydCIsICJjaGFubmVsTmFtZSIsICJjaGFubmVsIiwgIlRyYW5zcG9ydENvcmVGYWN0b3J5IiwgIkJhc2VTdWJzY3JpcHRpb24iLCAiX3Vuc3Vic2NyaWJlIiwgIk9ic2VydmFibGUiLCAiX3Byb2R1Y2VyIiwgIm9ic2VydmVyT3JOZXh0IiwgIm9wdHMiLCAib2JzZXJ2ZXIiLCAiY3RybCIsICJhY3RpdmUiLCAiY2xlYW51cCIsICJkb0NsZWFudXAiLCAic3Vic2NyaWJlciIsICJ2IiwgIm9wcyIsICJzIiwgIm9wIiwgIkNoYW5uZWxTdWJqZWN0IiwgInZhbHVlIiwgIm9icyIsICJSZXBsYXlDaGFubmVsU3ViamVjdCIsICJidWZmZXJTaXplIiwgIkNoYW5uZWxPYnNlcnZhYmxlIiwgIl90cmFuc3BvcnQiLCAiX2NoYW5uZWxOYW1lIiwgInJlcUlkIiwgInJlc29sdmUiLCAicmVqZWN0IiwgInAiLCAiZCIsICJjcmVhdGVJbnZva2VyT2JzZXJ2YWJsZSIsICJyZXN1bHQiLCAiY3JlYXRlUmVmbGVjdEhhbmRsZXIiLCAicmVzcG9uZCIsICJoYW5kbGVSZXF1ZXN0IiwgIk1lc3NhZ2VPYnNlcnZhYmxlIiwgInNvdXJjZSIsICJtZXNzYWdlVHlwZSIsICJmaWx0ZXIiLCAicHJlZCIsICJzcmMiLCAic3ViIiwgIm1hcCIsICJmbiIsICJ0YWtlIiwgIm4iLCAidGFrZVVudGlsIiwgInNpZ25hbCIsICJzcyIsICJzaWciLCAiZGVib3VuY2UiLCAibXMiLCAidCIsICJ0aHJvdHRsZSIsICJsYXN0IiwgIm5vdyIsICJmcm9tRXZlbnQiLCAidGFyZ2V0IiwgImV2ZW50IiwgImZyb21Qcm9taXNlIiwgInByb21pc2UiLCAiZGVsYXkiLCAiaW50ZXJ2YWwiLCAibWVyZ2UiLCAic291cmNlcyIsICJzdWJzIiwgImNyZWF0ZU1lc3NhZ2VJZCIsICJtYWtlSW52b2tlciIsICJtYWtlV29ya2VySW52b2tlciIsICJ3b3JrZXIiLCAibWFrZU1lc3NhZ2VQb3J0SW52b2tlciIsICJtYWtlQnJvYWRjYXN0SW52b2tlciIsICJuYW1lIiwgIm1ha2VXZWJTb2NrZXRJbnZva2VyIiwgInByb3RvY29scyIsICJtYWtlQ2hyb21lUnVudGltZUludm9rZXIiLCAibWFrZVNlcnZpY2VXb3JrZXJDbGllbnRJbnZva2VyIiwgIm1ha2VTZXJ2aWNlV29ya2VySG9zdEludm9rZXIiLCAibWFrZVNlbGZJbnZva2VyIiwgImNyZWF0ZUJpZGlyZWN0aW9uYWxDaGFubmVsIiwgImluYm91bmQiLCAid2hlbiIsICJldmVudE5hbWUiLCAiT2JzZXJ2YWJsZUZhY3RvcnkiLCAiZGV0ZWN0Q29udGV4dFR5cGUiLCAic2VydmljZVdvcmtlclNjb3BlIiwgInNoYXJlZFdvcmtlclNjb3BlIiwgImRlZGljYXRlZFdvcmtlclNjb3BlIiwgImRldGVjdFRyYW5zcG9ydFR5cGUiLCAiZGV0ZWN0ZWQiLCAiZGV0ZWN0SW5jb21pbmdDb250ZXh0VHlwZSIsICJEZWZhdWx0UmVmbGVjdCIsICJwcm9wIiwgInRoaXNBcmciLCAiYXJncyIsICJwcm90byIsICJSZXF1ZXN0b3IiLCAiY29uZmlnIiwgImNyZWF0ZVVuaWZpZWRDaGFubmVsIiwgInRhcmdldENoYW5uZWwiLCAiYWN0aW9uIiwgInBhdGgiLCAiYmFzZVBhdGgiLCAiUmVzcG9uZGVyIiwgIm9iaiIsICJCaWRpcmVjdGlvbmFsSW52b2tlciIsICJjcmVhdGVSZXF1ZXN0b3IiLCAiY3JlYXRlUmVzcG9uZGVyIiwgImNyZWF0ZUludm9rZXIiLCAic2V0dXBJbnZva2VyIiwgImF1dG9JbnZva2VyIiwgImludm9rZXIiLCAiUFJPWFlfTUFSS0VSIiwgIlBST1hZX0lOVEVSTkFMUyIsICJSZW1vdGVQcm94eUhhbmRsZXIiLCAiX2ludm9rZXIiLCAicmVjZWl2ZXIiLCAicHJvcFN0ciIsICIkcmVxdWVzdEhhbmRsZXIiLCAiJGRlc2NyaXB0b3IiLCAiY2hpbGRQYXRoIiwgImNoaWxkUHJveHkiLCAiY3JlYXRlUmVtb3RlUHJveHkiLCAibmV3VGFyZ2V0IiwgIkRpc3BhdGNoUHJveHlIYW5kbGVyIiwgIl9kaXNwYXRjaCIsICJ3cmFwRGVzY3JpcHRvciIsICJkZXNjcmlwdG9yIiwgImNhY2hlZCIsICJkZXNjTWFwIiwgInByb3h5IiwgIndyYXBNYXAiLCAiaXNSZW1vdGVQcm94eSIsICJnZXRQcm94eURlc2NyaXB0b3IiLCAiZ2V0UHJveHlJbnRlcm5hbHMiLCAiaW50ZXJuYWxzIiwgImNyZWF0ZUV4cG9zZUhhbmRsZXIiLCAicmVmbGVjdCIsICJjcmVhdGVPYmplY3RIYW5kbGVyIiwgImNyZWF0ZVNlbmRlclByb3h5IiwgIlByb3h5QnVpbGRlciIsICJlbmFibGVkIiwgInByb3h5QnVpbGRlciIsICJtYWtlUmVxdWVzdFByb3h5IiwgImNyZWF0ZUNvbm5lY3Rpb25LZXkiLCAicGFyYW1zIiwgInF1ZXJ5Q29ubmVjdGlvbnMiLCAiY29ubmVjdGlvbnMiLCAicXVlcnkiLCAiaW5jbHVkZUNsb3NlZCIsICJkZXNpcmVkU3RhdHVzIiwgImNvbm5lY3Rpb24iLCAiYSIsICJiIiwgIkNvbm5lY3Rpb25SZWdpc3RyeSIsICJfY3JlYXRlSWQiLCAiX2VtaXRFdmVudCIsICJrZXkiLCAiZXhpc3RpbmciLCAicGF5bG9hZCIsICJVbmlmaWVkQ2hhbm5lbCIsICJjZmciLCAidHJhbnNwb3J0VHlwZSIsICJiaW5kaW5nIiwgInNvdXJjZUNoYW5uZWwiLCAid3JpdGVCeVBhdGgiLCAiZW50cmllcyIsICJpZCIsICJyZXNvbHZlcnMiLCAidGltZW91dCIsICJtb2R1bGVOYW1lIiwgImV2ZW50VHlwZSIsICJzZW50IiwgInRhcmdldHMiLCAidG9UcmFuc2ZlciIsICJuZXdQYXRoIiwgImV4ZWN1dGVBY3Rpb24iLCAicmF3UmVzdWx0IiwgImNvcmVSZXNwb25zZSIsICJidWlsZFJlc3BvbnNlIiwgInJlc3BvbnNlIiwgInJlbW90ZUNoYW5uZWwiLCAic2lnbmFsVHlwZSIsICJzZW5kZXJNZXRhIiwgInNldHVwVW5pZmllZENoYW5uZWwiLCAiY3JlYXRlVW5pZmllZENoYW5uZWxQYWlyIiwgIm5hbWUxIiwgIm5hbWUyIiwgIm1jIiwgIkNIQU5ORUxfUkVHSVNUUlkiLCAiZ2V0VW5pZmllZENoYW5uZWwiLCAiZ2V0VW5pZmllZENoYW5uZWxOYW1lcyIsICJjbG9zZVVuaWZpZWRDaGFubmVsIiwgIldPUktFUl9DSEFOTkVMIiwgImdldFdvcmtlckNoYW5uZWwiLCAiY29udGV4dFR5cGUiLCAiZXhwb3NlRnJvbVVuaWZpZWQiLCAicmVtb3RlRnJvbVVuaWZpZWQiLCAid3JhcENoYW5uZWwiLCAiY29ubmVjdENoYW5uZWwiLCAiaG9zdCIsICJ3cmFwT2JzZXJ2YWJsZUNoYW5uZWwiLCAiY2hhbm5lbE9icyIsICJtYWtlT2JzZXJ2YWJsZVJlcXVlc3RQcm94eSIsICJjcmVhdGVPYnNlcnZhYmxlQ2hhbm5lbCIsICJUUyIsICJUcmFuc2ZlcmFibGUiLCAiRSIsICJpc1NlcnZpY2VXb3JrZXJDb250ZXh0IiwgIlNXR1MiLCAiaXNDaHJvbWVFeHRlbnNpb25Db250ZXh0IiwgImRldGVjdEV4ZWN1dGlvbkNvbnRleHQiLCAic3VwcG9ydHNEZWRpY2F0ZWRXb3JrZXJzIiwgImdldFdvcmtlclJlc29sdmVCYXNlVXJsIiwgImhyZWYiLCAicmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYiLCAic3BlYyIsICJiYXNlIiwgIm5vcm1hbGl6ZWQiLCAiUmVtb3RlQ2hhbm5lbHMiLCAiU0VMRl9DSEFOTkVMIiwgIkNIQU5ORUxfTUFQIiwgImlzUmVmbGVjdEFjdGlvbiQxIiwgImxvYWRXb3JrZXIiLCAiV1giLCAiUmVtb3RlQ2hhbm5lbEhlbHBlciIsICJDaGFubmVsSGFuZGxlciIsICJicm9hZGNhc3QiLCAidG9DaGFubmVsIiwgInJlcXVlc3QiLCAicmVzcG9uc2VGbiIsICJpbml0Q2hhbm5lbEhhbmRsZXIiLCAiJGNoYW5uZWwiLCAiY3JlYXRlSG9zdENoYW5uZWwiLCAiY3JlYXRlT3JVc2VFeGlzdGluZ0NoYW5uZWwiLCAiJGhvc3QiLCAiJGNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsIiwgImhhbmRNYXAiLCAiUkVBRCIsICJvYmplY3RUb1JlZiIsICJyZWdpc3RlcmVkSW5QYXRoIiwgIm5vcm1hbGl6ZVJlZiIsICJ1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5IiwgInVud3JhcERlc2NyaXB0b3JGcm9tUHJveHlSZWN1cnNpdmUiLCAic3RvcmVkRGF0YSIsICJ0cmF2ZXJzZUJ5UGF0aCIsICIkZGVzYyIsICJyZWFkQnlQYXRoIiwgInJvb3QiLCAicmVtb3ZlQnlQYXRoIiwgInJlbW92ZUJ5RGF0YSIsICJoYXNOb1BhdGgiLCAiaXNPYmplY3QiLCAiZGVmYXVsdFJlZmxlY3QiLCAiY3R4IiwgImdvdCIsICJub3JtYWxpemVkVmFsdWUiLCAibm9ybWFsaXplZEFyZ3MiLCAiY2FuQmVSZXR1cm4iLCAiZmluYWxQYXRoIiwgImN0eEtleSIsICJlbCIsICJwYXJlbnQiLCAiY3VycmVudCIsICJpIiwgImNhbGxBcmdzIiwgImN0b3JBcmdzIiwgIkNoYW5uZWxDb25uZWN0aW9uIiwgIl9uYW1lIiwgIl90cmFuc3BvcnRUeXBlIiwgImZyb21DaGFubmVsIiwgIm0iLCAib3JpZ2luYWwiLCAiciIsICJzdGF0ZSIsICJDb25uZWN0aW9uUG9vbCIsICJnZXRDb25uZWN0aW9uUG9vbCIsICJnZXRDb25uZWN0aW9uIiwgImdldEhvc3RDb25uZWN0aW9uIiwgIlRyYW5zcG9ydEFkYXB0ZXIiLCAiX29wdGlvbnMiLCAiY2FsbGJhY2siLCAiV29ya2VyVHJhbnNwb3J0IiwgIl93b3JrZXJTb3VyY2UiLCAiTWVzc2FnZVBvcnRUcmFuc3BvcnQiLCAiX3BvcnQiLCAiQnJvYWRjYXN0Q2hhbm5lbFRyYW5zcG9ydCIsICJfYmNOYW1lIiwgImlzTmV3IiwgIldlYlNvY2tldFRyYW5zcG9ydCIsICJfdXJsIiwgIl9wcm90b2NvbHMiLCAiQ2hyb21lUnVudGltZVRyYW5zcG9ydCIsICJDaHJvbWVUYWJzVHJhbnNwb3J0IiwgIl90YWJJZCIsICJDaHJvbWVQb3J0VHJhbnNwb3J0IiwgIl9wb3J0TmFtZSIsICJDaHJvbWVFeHRlcm5hbFRyYW5zcG9ydCIsICJfZXh0ZXJuYWxJZCIsICJTZXJ2aWNlV29ya2VyVHJhbnNwb3J0IiwgIl9pc0hvc3QiLCAiU2VsZlRyYW5zcG9ydCIsICJUcmFuc3BvcnRGYWN0b3J5IiwgImJjTmFtZSIsICJpc0hvc3QiLCAiY3JlYXRlQ29ubmVjdGlvbk9ic2VydmVyIiwgInRyYW5zcG9ydHMiLCAic3ViamVjdCIsICJjb25uIiwgIkRCX05BTUUiLCAiREJfVkVSU0lPTiIsICJTVE9SRVMiLCAiQ2hhbm5lbFN0b3JhZ2UiLCAiZGIiLCAibWVzc2FnZXNTdG9yZSIsICJtYWlsYm94U3RvcmUiLCAicGVuZGluZ1N0b3JlIiwgImV4Y2hhbmdlU3RvcmUiLCAic3RvcmVkTWVzc2FnZSIsICJ0eCIsICJzdG9yZSIsICJpbmRleCIsICJyZXN1bHRzIiwgImN1cnNvciIsICJtZXNzYWdlSWQiLCAic3RhdHVzIiwgIm1lc3NhZ2VzIiwgInN0YXRzIiwgImRlbGV0ZWRDb3VudCIsICJvcGVyYXRpb24iLCAicGVuZGluZyIsICJvcGVyYXRpb25JZCIsICJwb2xsSW50ZXJ2YWwiLCAic3RhcnRUaW1lIiwgInJlY29yZCIsICJnZXRSZXF1ZXN0IiwgIkNoYW5uZWxUcmFuc2FjdGlvbiIsICJvcGVyYXRpb25zIiwgInN0b3JlTmFtZXMiLCAiZ2V0UmVxIiwgIm1zZ1JlcXVlc3QiLCAibWFpbFJlcXVlc3QiLCAiX3N0b3JhZ2UiLCAidXBkYXRlcyIsICJfc3RvcmFnZUluc3RhbmNlcyIsICJnZXRDaGFubmVsU3RvcmFnZSIsICJjbG9zZUFsbFN0b3JhZ2UiLCAic3RvcmFnZSIsICJ3b3JrZXJCYXNlIiwgIndvcmtlckNvZGUiLCAiUmVtb3RlQ2hhbm5lbEhlbHBlciQxIiwgIl9jaGFubmVsIiwgIl9jb250ZXh0IiwgIm5vcm1hbGl6ZWRQYXRoIiwgIm5vcm1hbGl6ZWRBY3Rpb24iLCAiaXNSZWZsZWN0QWN0aW9uIiwgIkNoYW5uZWxIYW5kbGVyJDEiLCAibm9ybWFsaXplVHJhbnNwb3J0QmluZGluZyIsICJnZXREeW5hbWljVHJhbnNwb3J0VHlwZSIsICJDaGFubmVsQ29udGV4dCIsICJob3N0TmFtZSIsICJlbmRwb2ludCIsICJjb25uZWN0ZWRUYXJnZXRzIiwgIm5hbWVzIiwgImluaXRGbiIsICJ3b3JrZXJJbnN0YW5jZSIsICJsb2FkV29ya2VyJDEiLCAicmVhZHkiLCAiYnJvYWRjYXN0TmFtZSIsICJiYyIsICJzZWxmVGFyZ2V0IiwgImhhbmRsZXIxIiwgImhhbmRsZXIyIiwgInJlYWR5MSIsICJyZWFkeTIiLCAiY2hhbm5lbDEiLCAiY2hhbm5lbDIiLCAibXNnQ2hhbm5lbCIsICJpbmZvIiwgImRpcmVjdGlvbiIsICJtYXBwZWRUcmFuc3BvcnRUeXBlIiwgInVuaWZpZWQiLCAic3Vic2NyaXB0aW9uIiwgImlzVHJhbnNwb3J0QmluZGluZyIsICJuYXRpdmVUYXJnZXQiLCAiZWZmZWN0aXZlVGFyZ2V0IiwgIkNPTlRFWFRfUkVHSVNUUlkiLCAiREVGQVVMVF9DT05URVhUIiwgImdldERlZmF1bHRDb250ZXh0IiwgImNyZWF0ZUNoYW5uZWxDb250ZXh0IiwgImdldE9yQ3JlYXRlQ29udGV4dCIsICJnZXRDb250ZXh0IiwgImRlbGV0ZUNvbnRleHQiLCAiZ2V0Q29udGV4dE5hbWVzIiwgImNyZWF0ZUNoYW5uZWxzSW5Db250ZXh0IiwgImNoYW5uZWxOYW1lcyIsICJjb250ZXh0T3B0aW9ucyIsICJjb250ZXh0IiwgImltcG9ydE1vZHVsZUluQ29udGV4dCIsICJhZGRXb3JrZXJDaGFubmVsIiwgImFkZFBvcnRDaGFubmVsIiwgImFkZEJyb2FkY2FzdENoYW5uZWwiLCAiYWRkU2VsZkNoYW5uZWxUb0RlZmF1bHQiLCAiZGVmZXJDaGFubmVsIiwgImluaXREZWZlcnJlZENoYW5uZWwiLCAiZ2V0Q2hhbm5lbEZyb21EZWZhdWx0IiwgImNyZWF0ZURlZmF1bHRDaGFubmVsUGFpciIsICJUcmFuc3BvcnRPYnNlcnZhYmxlIiwgImZpcnN0IiwgIldvcmtlck9ic2VydmFibGUiLCAiX3dvcmtlciIsICJNZXNzYWdlUG9ydE9ic2VydmFibGUiLCAiQnJvYWRjYXN0Q2hhbm5lbE9ic2VydmFibGUiLCAiV2ViU29ja2V0T2JzZXJ2YWJsZSIsICJjb2RlIiwgInJlYXNvbiIsICJDaHJvbWVSdW50aW1lT2JzZXJ2YWJsZSQxIiwgIkNocm9tZVRhYnNPYnNlcnZhYmxlJDEiLCAiQ2hyb21lUG9ydE9ic2VydmFibGUkMSIsICJTZXJ2aWNlV29ya2VyQ2xpZW50T2JzZXJ2YWJsZSIsICJTZXJ2aWNlV29ya2VySG9zdE9ic2VydmFibGUiLCAiU2VsZk9ic2VydmFibGUiLCAiVHJhbnNwb3J0T2JzZXJ2YWJsZUZhY3RvcnkiLCAidyIsICJjaCIsICJjcmVhdGVCaWRpcmVjdGlvbmFsQ2hhbm5lbCQxIiwgIm91dGJvdW5kIiwgIldvcmtlckNvbnRleHQiLCAiY2xvc2VkIiwgIldPUktFUl9DT05URVhUIiwgImdldFdvcmtlckNvbnRleHQiLCAiaW5pdFdvcmtlckNvbnRleHQiLCAib25Xb3JrZXJDb25uZWN0aW9uIiwgIm9uV29ya2VyQ2hhbm5lbENyZWF0ZWQiLCAiV09SS0VSX1JFU1BPTkRFUiIsICJXT1JLRVJfSU5WT0tFUiIsICJnZXRXb3JrZXJSZXNwb25kZXIiLCAiZ2V0V29ya2VySW52b2tlciIsICJleHBvc2VGcm9tV29ya2VyIiwgIm9uV29ya2VySW52b2NhdGlvbiIsICJjcmVhdGVIb3N0UHJveHkiLCAiaG9zdENoYW5uZWwiLCAiaW1wb3J0SW5Ib3N0IiwgIkJhc2VDaHJvbWVPYnNlcnZhYmxlIiwgIkNocm9tZVJ1bnRpbWVPYnNlcnZhYmxlIiwgIl9oYW5kbGVyIiwgIl9zZW5kZXIiLCAiX2ZyYW1lSWQiLCAiQ2hyb21lVGFic09ic2VydmFibGUiLCAiQ2hyb21lUG9ydE9ic2VydmFibGUiLCAiQ2hyb21lRXh0ZXJuYWxPYnNlcnZhYmxlIiwgIl9leHRlbnNpb25JZCIsICJjcmVhdGVDaHJvbWVSZXF1ZXN0SGFuZGxlciIsICJoYW5kbGVycyIsICJlcnJvciIsICJDaHJvbWVPYnNlcnZhYmxlRmFjdG9yeSIsICJleHRlbnNpb25JZCIsICJTb2NrZXRJT09ic2VydmFibGUiLCAiX3NvY2tldCIsICJhY2siLCAib25Db25uZWN0IiwgIm9uRGlzY29ubmVjdCIsICJTb2NrZXRJT1Jvb21PYnNlcnZhYmxlIiwgIl9wYXJlbnQiLCAiX3Jvb21OYW1lIiwgImNyZWF0ZVNvY2tldFJlcXVlc3RIYW5kbGVyIiwgIlNvY2tldElPT2JzZXJ2YWJsZUZhY3RvcnkiLCAicm9vbU5hbWUiLCAiY3JlYXRlU29ja2V0T2JzZXJ2YWJsZSIsICJTaGFyZWRXb3JrZXJDbGllbnQiLCAiX3NjcmlwdFVybCIsICJTaGFyZWRXb3JrZXJIb3N0IiwgInBvcnRJZCIsICJyZWFsUG9ydElkIiwgImVudHJ5IiwgImV4Y2x1ZGVQb3J0SWQiLCAiY3JlYXRlU2hhcmVkV29ya2VyT2JzZXJ2YWJsZSIsICJzY3JpcHRVcmwiLCAiY3JlYXRlU2hhcmVkV29ya2VySG9zdE9ic2VydmFibGUiLCAiU2hhcmVkV29ya2VyT2JzZXJ2YWJsZUZhY3RvcnkiLCAiY2JvckVuY29kZXIiLCAiZ2V0Q0JPUkVuY29kZXIiLCAiY2JvcngiLCAicmVwbGFjZXIiLCAicmV2aXZlciIsICJfa2V5IiwgIlR5cGVkQXJyYXlDdG9yIiwgIkhFQURFUl9TSVpFIiwgIkxPQ0tfT0ZGU0VUIiwgIlNFUV9PRkZTRVQiLCAiU0laRV9PRkZTRVQiLCAiRkxBR1NfT0ZGU0VUIiwgIlJFQURZX09GRlNFVCIsICJBQ0tfT0ZGU0VUIiwgIkRBVEFfT0ZGU0VUIiwgIkZMQUdfSEFTX1RSQU5TRkVSIiwgIkZMQUdfQ09NUFJFU1NFRCIsICJGTEFHX1JFU1BPTlNFIiwgIkF0b21pY3NCdWZmZXIiLCAiYnVmZmVyT3JTaXplIiwgIl9jb25maWciLCAiZmxhZ3MiLCAic2l6ZSIsICJzZXEiLCAiZXhwZWN0ZWRTZXEiLCAic3RhcnQiLCAiQXRvbWljc1RyYW5zcG9ydCIsICJzZW5kQnVmZmVyIiwgInJlY3ZCdWZmZXIiLCAiZW5jb2RlZCIsICJjcmVhdGVBdG9taWNzQ2hhbm5lbFBhaXIiLCAiYnVmZmVyQSIsICJidWZmZXJCIiwgImNyZWF0ZVdvcmtlckF0b21pY3NUcmFuc3BvcnQiLCAiQXRvbWljc1JpbmdCdWZmZXIiLCAiYnVmZmVyT3JDb25maWciLCAidG90YWxTaXplIiwgIndyaXRlSWR4IiwgInJlYWRJZHgiLCAic2xvdCIsICJBdG9taWNzVHJhbnNwb3J0RmFjdG9yeSIsICJyZWN2IiwgInNpemVPckJ1ZmZlciIsICJERUZBVUxUX0lDRV9TRVJWRVJTIiwgIlJUQ1BlZXJUcmFuc3BvcnQiLCAicmVtb3RlSWQiLCAib2ZmZXIiLCAiYW5zd2VyIiwgImJpbmFyeSIsICJwZWVySWQiLCAiZGF0YUNoYW5uZWxMYWJlbCIsICJqc29uIiwgImJ1ZmZlciIsICJSVENQZWVyTWFuYWdlciIsICJwZWVyIiwgImNyZWF0ZUJyb2FkY2FzdFNpZ25hbGluZyIsICJSVENUcmFuc3BvcnRGYWN0b3J5IiwgIlBvcnRUcmFuc3BvcnQiLCAiY3JlYXRlQ2hhbm5lbFBhaXIiLCAiY3JlYXRlRnJvbVBvcnQiLCAiUG9ydFBvb2wiLCAiX2RlZmF1bHRDb25maWciLCAiV2luZG93UG9ydENvbm5lY3RvciIsICJfdGFyZ2V0IiwgImxvY2FsIiwgInJlbW90ZSIsICJjcmVhdGVQb3J0UHJveHkiLCAidGFyZ2V0UGF0aCIsICJleHBvc2VPdmVyUG9ydCIsICJQb3J0VHJhbnNwb3J0RmFjdG9yeSIsICJUcmFuc2ZlcmFibGVTdG9yYWdlIiwgImlkeCIsICJidWZmZXJzIiwgImJ1ZiIsICJhcnJheSIsICJza2lwcGVkIiwgIm9mZnNldCIsICJsaW1pdCIsICJleHBpcmVkIiwgIk1lc3NhZ2VRdWV1ZVN0b3JhZ2UiLCAiZGJOYW1lIiwgInF1ZXVlZE1lc3NhZ2UiLCAiVHJhbnNmZXJhYmxlU3RvcmFnZUZhY3RvcnkiLCAiU2VydmljZVdvcmtlckhvc3QiLCAiY2xpZW50SW5mbyIsICJjbGllbnQiLCAic3Vic2NyaWJlcnMiLCAiZGVsaXZlcmVkQ291bnQiLCAic3RvcmVkIiwgIm1lc3NhZ2VTdWIiLCAiYWxsQ2xpZW50cyIsICJhY3RpdmVJZHMiLCAiU2VydmljZVdvcmtlckNsaWVudCIsICJjcmVhdGVTZXJ2aWNlV29ya2VySG9zdCIsICJjcmVhdGVTZXJ2aWNlV29ya2VyQ2xpZW50IiwgImJpbmRTZXJ2aWNlV29ya2VySG9zdEJyaWRnZSIsICJzY29wZSIsICJBYnN0cmFjdFRyYW5zcG9ydCIsICJfdHlwZSIsICJOYXRpdmVUcmFuc3BvcnQiLCAiY3JlYXRlVHJhbnNwb3J0IiwgImJhc2VDb25maWciLCAid3MiLCAibyIsICJicmlkZ2UiLCAibWFuYWdlciIsICJUcmFuc3BvcnRSZWdpc3RyeSIsICJfcmVnaXN0cnkiLCAiZ2V0VHJhbnNwb3J0UmVnaXN0cnkiLCAiVW5pZmllZFRyYW5zcG9ydEZhY3RvcnkiLCAiUXVldWVkV29ya2VyQ2hhbm5lbCIsICJvbkNoYW5uZWxSZWFkeSIsICJ1bmRlcmx5aW5nQ2hhbm5lbCIsICJtZXRob2QiLCAicXVldWVkUmVxdWVzdCIsICJxdWV1ZUNvcHkiLCAiZ2V0Q3VycmVudFRhYklkIiwgInRhYnMiLCAiZ2V0VmlzaWJsZVRhYklkIiwgInZpc2libGVUYWIiLCAidGFiIiwgInJlZ2lzdGVyV29ya2VyQVBJIiwgImFwaSIsICJjaGFubmVsSGFuZGxlciIsICJtZXRob2ROYW1lIiwgIk9wdGltaXplZFdvcmtlckNoYW5uZWwiLCAiZW52ZWxvcGUiLCAiY2h1bmsiLCAiYmF0Y2hFbnZlbG9wZSIsICJNZXNzYWdlUXVldWUiLCAiZGVzdGluYXRpb24iLCAicmV0cnlDb3VudCIsICJleHBpcmVkSWRzIiwgImJ5UHJpb3JpdHkiLCAiYnlEZXN0aW5hdGlvbiIsICJmaWx0ZXJlZCIsICJpbnN0YW5jZXMiLCAiZ2V0TWVzc2FnZVF1ZXVlIiwgImNyZWF0ZU1lc3NhZ2VRdWV1ZSIsICJydW50aW1lTGlzdGVuZXJSZWdpc3RyeSIsICJydW50aW1lTGlzdGVuZXJJbnN0YWxsZWQiLCAiZW5zdXJlUnVudGltZUxpc3RlbmVyIiwgImxpc3RlbmVycyIsICJvdXQiLCAiQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbCIsICJzZXQiLCAibWVzc2FnZVdpdGhDaGFubmVsIiwgIkNocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsIiwgIndyYXBwZWQiLCAidGFyZ2V0VGFiSWQiLCAidGFyZ2V0VGFicyIsICJwcm9taXNlcyIsICJDaHJvbWVFeHRlbnNpb25Qb3J0Q2hhbm5lbCIsICJjcmVhdGVDaHJvbWVFeHRlbnNpb25DaGFubmVsIiwgImNyZWF0ZUNocm9tZUV4dGVuc2lvbkJyb2FkY2FzdCIsICJjcmVhdGVDaHJvbWVFeHRlbnNpb25Ccm9hZGNhc3RDaGFubmVsIiwgImNyZWF0ZUNocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsIiwgImNyZWF0ZUNocm9tZUV4dGVuc2lvblRhYnNNZXNzYWdpbmdDaGFubmVsIiwgImluaXRNYWluQ2hhbm5lbCIsICJjcmVhdGVRdWV1ZWRXb3JrZXJDaGFubmVsIiwgImNyZWF0ZVNlcnZpY2VXb3JrZXJDaGFubmVsIiwgImNyZWF0ZVdvcmtlckNoYW5uZWwiLCAiY3JlYXRlT3B0aW1pemVkV29ya2VyQ2hhbm5lbCIsICJiYXNlQ2hhbm5lbCIsICJjcmVhdGVRdWV1ZWRPcHRpbWl6ZWRXb3JrZXJDaGFubmVsIiwgIm9wdGltaXplZENoYW5uZWwiLCAiUFVSUE9TRVMiLCAiREVGQVVMVF9QVVJQT1NFIiwgImFzU3RyaW5nIiwgIm5vcm1hbGl6ZVBhdGgiLCAibm9ybWFsaXplQXJncyIsICJub3JtYWxpemVUcmFuc2ZlciIsICJub3JtYWxpemVQdXJwb3NlIiwgInB1cnBvc2UiLCAiaW5wdXQiLCAiZGVkdXBlZCIsICJpbmZlclR5cGUiLCAiZXhwbGljaXQiLCAiaW5mZXJPcGVyYXRpb24iLCAicmVzb2x2ZWRUeXBlIiwgImluZmVyUHJvdG9jb2wiLCAicHJvdG9jb2wiLCAicmFuZG9tSWQiLCAiY3JlYXRlUHJvdG9jb2xFbnZlbG9wZSIsICJ0aW1lc3RhbXAiLCAiZHN0Q2hhbm5lbCIsICJ1dWlkIiwgIm1ldGFkYXRhIiwgImlzUHJvdG9jb2xFbnZlbG9wZSIsICJjYW5kaWRhdGUiLCAibm9ybWFsaXplUHJvdG9jb2xFbnZlbG9wZSIsICJQcm90b2NvbFJlcGxheUd1YXJkIiwgIndpbmRvd01zIiwgInByZXZpb3VzIiwgInRzIiwgIlBlbmRpbmdNZXNzYWdlU3RvcmUiLCAicGFyc2VkIiwgImtlZXAiLCAiVW5pZmllZE1lc3NhZ2luZ01hbmFnZXIiLCAiZnVsbE1lc3NhZ2UiLCAidmlld0hhc2giLCAiY29uZmlncyIsICJjaGFubmVsS2V5IiwgImRlZmVycmVkIiwgImluaXRQcm9taXNlcyIsICJ3b3JrZXJOYW1lIiwgInBpcGVsaW5lTmFtZSIsICJwaXBlbGluZSIsICJjdXJyZW50TWVzc2FnZSIsICJzdGFnZSIsICJzdGFnZVRpbWVvdXQiLCAicmV0cmllcyIsICJhdHRlbXB0IiwgInF1ZXVlZE1lc3NhZ2VzIiwgImRhdGFBc01lc3NhZ2UiLCAiY29tcG9uZW50SWQiLCAiZGVzdCIsICJtYXBwaW5ncyIsICJmYWxsYmFja1NvdXJjZSIsICJyZXMiLCAicmVqIiwgImRlZmF1bHRJbnN0YW5jZSIsICJnZXRVbmlmaWVkTWVzc2FnaW5nIiwgImNyZWF0ZVVuaWZpZWRNZXNzYWdpbmciLCAicmVzZXRVbmlmaWVkTWVzc2FnaW5nIiwgInNlbmRNZXNzYWdlIiwgInJlZ2lzdGVySGFuZGxlciIsICJnZXRCcm9hZGNhc3RDaGFubmVsIiwgIlNlcnZpY2VDaGFubmVsTWFuYWdlciIsICJjaGFubmVsSWQiLCAicmVzb2x2ZVJlYWR5IiwgInJlYWR5UHJvbWlzZSIsICJjcmVhdGVTZXJ2aWNlQ2hhbm5lbE1hbmFnZXIiLCAiZGVmYXVsdE1hbmFnZXIiLCAiZ2V0U2VydmljZUNoYW5uZWxNYW5hZ2VyIiwgInJlc2V0U2VydmljZUNoYW5uZWxNYW5hZ2VyIiwgIm1ha2VDaGFubmVsTWVzc2FnZUhhbmRsZXIiLCAiQ2hhbm5lbE1lc3NhZ2VPYnNlcnZhYmxlIiwgImNyZWF0ZUNoYW5uZWxSZXF1ZXN0SGFuZGxlciIsICJPYnNlcnZhYmxlUmVxdWVzdERpc3BhdGNoZXIiLCAiX3RhcmdldENoYW5uZWwiLCAic3luYyIsICJpbXBvcnRNb2R1bGVJbkNoYW5uZWwiLCAiY3JlYXRlQ29udGV4dCIsICJnZXRTaGFyZWRDb250ZXh0IiwgImNyZWF0ZU11bHRpQ2hhbm5lbCIsICJpbXBvcnRJc29sYXRlZE1vZHVsZSIsICJjb25uZWN0VG9DaGFubmVsQXNNb2R1bGUiLCAiY3JlYXRlQ2hyb21lRXh0ZW5zaW9uUnVudGltZUNoYW5uZWwiXQp9Cg==