@getopenpay/openpay-js 0.5.23 → 0.5.24

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.
@@ -3734,19 +3734,20 @@ const kc = ({
3734
3734
  managementURL: new URL(`/pay/${t.token}`, $n).toString()
3735
3735
  };
3736
3736
  const r = t.line_items?.[0];
3737
- if (r)
3738
- return {
3739
- paymentDescription: r?.description ?? "",
3740
- regularBilling: {
3741
- amount: e.amount,
3742
- label: r?.description ?? "",
3743
- recurringPaymentIntervalUnit: r?.billing_interval,
3744
- recurringPaymentIntervalCount: r?.billing_interval_count ?? void 0,
3745
- paymentTiming: "recurring",
3746
- type: "final"
3747
- },
3748
- managementURL: `https://cde.getopenpay.com/pay/${t.token}`
3749
- };
3737
+ if (!r) return;
3738
+ const n = r?.billing_interval === "week" ? "day" : r?.billing_interval, a = r?.billing_interval_count ? r?.billing_interval === "week" ? r?.billing_interval_count * 7 : r?.billing_interval_count : void 0;
3739
+ return {
3740
+ paymentDescription: r?.description ?? "",
3741
+ regularBilling: {
3742
+ amount: e.amount,
3743
+ label: r?.description ?? "",
3744
+ recurringPaymentIntervalUnit: n,
3745
+ recurringPaymentIntervalCount: a,
3746
+ paymentTiming: "recurring",
3747
+ type: "final"
3748
+ },
3749
+ managementURL: `https://cde.getopenpay.com/pay/${t.token}`
3750
+ };
3750
3751
  }, qt = ({
3751
3752
  overridePaymentRequest: e,
3752
3753
  initialPreview: t,
@@ -6936,7 +6937,7 @@ let Qr;
6936
6937
  const Eu = async (e, t) => {
6937
6938
  if (typeof window > "u")
6938
6939
  return;
6939
- const r = await import("./index-i2uepOHS.js"), { ConsoleSpanExporter: n, SimpleSpanProcessor: a, WebTracerProvider: i } = r, s = await import("./index-Dur123re.js"), { FetchInstrumentation: l } = s, c = await import("./index-HMs3Bxup.js"), { ZoneContextManager: u } = c, d = await import("./index-6srP6Oki.js"), { registerInstrumentations: m } = d, f = await import("./index-TtxJrI0I.js"), { Resource: y } = f, _ = await import("./detect-resources-B0iVBiVr.js").then((Vt) => Vt.d), { detectResourcesSync: g } = _, w = await import("./index-N-h05EHp.js"), { OTLPTraceExporter: h } = w, b = await import("./index-BlMb2xbM.js"), { B3Propagator: S, B3InjectEncoding: C } = b, L = await import("./index-TySAh1H5.js"), { BatchSpanProcessor: A } = L;
6940
+ const r = await import("./index-iD-5E7_q.js"), { ConsoleSpanExporter: n, SimpleSpanProcessor: a, WebTracerProvider: i } = r, s = await import("./index-DBxFqlrh.js"), { FetchInstrumentation: l } = s, c = await import("./index-Bs5OMBEU.js"), { ZoneContextManager: u } = c, d = await import("./index-Djr3hbca.js"), { registerInstrumentations: m } = d, f = await import("./index-CgK11ZfL.js"), { Resource: y } = f, _ = await import("./detect-resources-CdLnHKPH.js").then((Vt) => Vt.d), { detectResourcesSync: g } = _, w = await import("./index-CxLnn1rM.js"), { OTLPTraceExporter: h } = w, b = await import("./index-DFoJwOds.js"), { B3Propagator: S, B3InjectEncoding: C } = b, L = await import("./index-zjlpOvlU.js"), { BatchSpanProcessor: A } = L;
6940
6941
  Jt(`Initializing tracer with version ${e} and baseUrl ${t}`);
6941
6942
  const $ = Cu(t);
6942
6943
  Jt(`Using collector URL ${$}`);
@@ -7549,7 +7550,7 @@ const Iu = (e, t, r) => {
7549
7550
  B()?.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), Wi(), this.registeredElements = null, delete window.ojs, v("form_destroyed");
7550
7551
  }, this.updateCallbacks = (a) => {
7551
7552
  this.formCallbacks.setCallbacks(a);
7552
- }, he.assignAsSingleton(this), this.ojsVersion = "0.5.23", this.ojsReleaseVersion = "0.5.23", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = ar.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Ge()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new ku(), this.deviceToken = zn(), Yi();
7553
+ }, he.assignAsSingleton(this), this.ojsVersion = "0.5.24", this.ojsReleaseVersion = "0.5.24", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = ar.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Ge()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new ku(), this.deviceToken = zn(), Yi();
7553
7554
  const { framework: r, version: n } = fu();
7554
7555
  Sn(this.baseUrl).then((a) => {
7555
7556
  if (!er.current.isSuccess) {
@@ -7638,4 +7639,4 @@ export {
7638
7639
  je as t,
7639
7640
  ur as u
7640
7641
  };
7641
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA5fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiSVNfQlVTSU5FU1NfUFVSQ0hBU0VcIl0gPSBcImlzQnVzaW5lc3NQdXJjaGFzZVwiO1xuICBGaWVsZE5hbWUyW1wiQlVTSU5FU1NfTkFNRVwiXSA9IFwiYnVzaW5lc3NOYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJUQVhfSURcIl0gPSBcInRheElkXCI7XG4gIEZpZWxkTmFtZTJbXCJUQVhfSURfVFlQRVwiXSA9IFwidGF4SWRUeXBlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHoubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6LnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNERV9CUklER0VcIl0gPSBcImNkZS1icmlkZ2VcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xuY29uc3QgX0VsZW1lbnRUeXBlRW51bVpvZCA9IHouZW51bShbXCJjYXJkXCIsIFwiY2FyZC1udW1iZXJcIiwgXCJjYXJkLWV4cGlyeVwiLCBcImNhcmQtY3ZjXCIsIFwiY2RlLWJyaWRnZVwiXSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBCYXNlRWxlbWVudHNTdHlsZSA9IHoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlclN0eWxlOiB6Lm9iamVjdCh7XG4gICAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZ1xuICB9KS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6Lm9iamVjdCh7XG4gICAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gICAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgICBjdmM6IE9wdGlvbmFsU3RyaW5nXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqXG4gICAqIFRoZSBjYXJkIGljb24gYXQgdGhlIHN0YXJ0IG9mIHRoZSBjYXJkIG51bWJlciBpbnB1dCBmaWVsZFxuICAgKiBJdCB3b24ndCBhZmZlY3QgYWZ0ZXIgdGhlIGljb24gY2hhbmdlZCB0byBjYXJkIGJyYW5kIGFmdGVyIHRoZSB1c2VyIGlucHV0IHRoZSBjYXJkIG51bWJlclxuICAgKi9cbiAgaWNvbjogei5vYmplY3Qoe1xuICAgIGNvbG9yOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5CYXNlRWxlbWVudHNTdHlsZS5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwaG9uZVwiIC8qIFBIT05FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIgLyogU0hJUFBJTkdfTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTNcIiAvKiBTSElQUElOR19MSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJidXNpbmVzc05hbWVcIiAvKiBCVVNJTkVTU19OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkXCIgLyogVEFYX0lEICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkVHlwZVwiIC8qIFRBWF9JRF9UWVBFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJwaG9uZVwiIC8qIFBIT05FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIgLyogU0hJUFBJTkdfTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTNcIiAvKiBTSElQUElOR19MSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJidXNpbmVzc05hbWVcIiAvKiBCVVNJTkVTU19OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkXCIgLyogVEFYX0lEICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkVHlwZVwiIC8qIFRBWF9JRF9UWVBFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZyxcbiAgcGF5bWVudFJvdXRlSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHouYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6LnN0cmluZygpLFxuICBwYXltZW50TWV0aG9kSWQ6IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG5jb25zdCBFbGVtZW50RXZlbnQgPSB6Lm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogei5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6LnN0cmluZygpLFxuICBwYXltZW50X21ldGhvZF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KHouc3RyaW5nKCkpKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHouc3RyaW5nKCksXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogei5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6LmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRSZXNwb25zZSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHoub2JqZWN0KHsgc3VjY2Vzczogei5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xudmFyIFRocmVlRFNTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gKChUaHJlZURTU3RhdHVzMikgPT4ge1xuICBUaHJlZURTU3RhdHVzMltcIlNVQ0NFU1NcIl0gPSBcInN1Y2Nlc3NcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJGQUlMVVJFXCJdID0gXCJmYWlsdXJlXCI7XG4gIFRocmVlRFNTdGF0dXMyW1wiQ0FOQ0VMTEVEXCJdID0gXCJjYW5jZWxsZWRcIjtcbiAgcmV0dXJuIFRocmVlRFNTdGF0dXMyO1xufSkoVGhyZWVEU1N0YXR1cyB8fCB7fSk7XG5jb25zdCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pLFxuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56Lm9iamVjdCh7XG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbmNvbnN0IENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBBV1hCYW5rID0gei5vYmplY3Qoe1xuICBiYW5rX25hbWU6IHouc3RyaW5nKCksXG4gIGRpc3BsYXlfbmFtZTogei5zdHJpbmcoKSxcbiAgcmVzb3VyY2VzOiB6Lm9iamVjdCh7XG4gICAgbG9nb191cmw6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgYXZhaWxhYmxlX2JhbmtzOiBudWxsT3JVbmRlZk9yJDEoei5hcnJheShBV1hCYW5rKSlcbn0pO1xuY29uc3QgQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKHRydWUpLCBocmVmOiB6LnN0cmluZygpIH0pLFxuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbChmYWxzZSkgfSlcbl0pO1xuY29uc3QgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogei5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSlcbn0pO1xuY29uc3QgRUZURm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGluc3RpdHV0aW9uTnVtYmVyOiB6LnN0cmluZygpLFxuICB0cmFuc2l0TnVtYmVyOiB6LnN0cmluZygpLFxuICBhY2NvdW50TnVtYmVyOiB6LnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogei5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBFRlRGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEJBQ1NGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgc29ydENvZGU6IHouc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6LmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xuei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEJBQ1NGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFNFUEFGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaWJhbjogei5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHouZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogU0VQQUZvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQUNITWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGFjY291bnRfbnVtYmVyOiB6LnN0cmluZygpLFxuICBhYmFfcm91dGluZ19udW1iZXI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRUZUTWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGluc3RpdHV0aW9uX251bWJlcjogei5zdHJpbmcoKSxcbiAgdHJhbnNpdF9udW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRfbnVtYmVyOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IEJBQ1NNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKCksXG4gIHNvcnRfY29kZTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBTRVBBTWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGliYW46IHouc3RyaW5nKClcbn0pO1xuY29uc3QgTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogei51bmlvbihbXG4gICAgQUNITWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgRUZUTWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgQkFDU01pY3JvRGVwb3NpdEZvcm1EYXRhLFxuICAgIFNFUEFNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICB6Lm9iamVjdCh7IGVycm9yOiB6LnN0cmluZygpIH0pXG4gIF0pLm9wdGlvbmFsKClcbn0pO1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6Lm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBDREVSZXNwb25zZUVycm9yID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZHVyYXRpb246IHouc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50czogei5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3JlYXRlZDogei5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHouYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3Ioei5hcnJheSh6LnN0cmluZygpKSksXG4gIHBheW1lbnRfbWV0aG9kX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6LmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X3NldHRpbmdzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKSxcbiAgcmV0dXJuX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgc3VjY2Vzc191cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5nczogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudEZvcm1QcmVmaWxsID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHoubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6Lm51bGxhYmxlKHoudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogei5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xuei51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56Lm9iamVjdCh7XG4gIGxvZ286IHouc3RyaW5nKCksXG4gIGljb246IHouc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHouc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQ29tcGxldGVBZGRyZXNzID0gei5vYmplY3Qoe1xuICBsaW5lMTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjaXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXRlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvdW50cnk6IHouc3RyaW5nKCksXG4gIHppcF9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHouYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHouYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbnouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG5jb25zdCBOZXdDdXN0b21lckZpZWxkcyA9IHoub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYnVzaW5lc3NfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl90YXhfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfdGF4X2lkX3R5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfcGhvbmU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3Ioei5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjY19wbV9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPcihDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5yZWNvcmQoei5hbnkoKSk7XG56Lm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBidXNpbmVzc19uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0YXhfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRheF9pZF90eXBlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgbWVzc2FnZTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZXZlbnRzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56LmFueSgpLm9wdGlvbmFsKCk7XG56Lm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSA9IHoub2JqZWN0KHt9KTtcbmNvbnN0IFVzZXJBY3Rpb25GRVBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6LnN0cmluZygpXG59KS5jYXRjaGFsbCh6LmFueSgpKTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSA9IHouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3Qgc3VtID0gKGFycikgPT4ge1xuICByZXR1cm4gYXJyLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xufTtcblxuY29uc3QgYmVmb3JlVW5sb2FkSGFuZGxlciA9IChldmVudCkgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBldmVudC5yZXR1cm5WYWx1ZSA9IHRydWU7XG59O1xuY29uc3QgcHJldmVudE5hdmlnYXRpb24gPSAoKSA9PiB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGJlZm9yZVVubG9hZEhhbmRsZXIpO1xufTtcbmNvbnN0IHN0b3BQcmV2ZW50TmF2aWdhdGlvbiA9ICgpID0+IHtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgYmVmb3JlVW5sb2FkSGFuZGxlcik7XG59O1xuXG5jb25zdCBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyA9IChzaW1wbGVPanNGbG93KSA9PiB7XG4gIGxldCBpc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICBpZiAoaXNTdWJtaXR0aW5nKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJTa2lwcGluZyBzdWJtaXNzaW9uIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzc1wiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXNTdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgaWYgKHBhcmFtcy5jb250ZXh0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbikge1xuICAgICAgICBwcmV2ZW50TmF2aWdhdGlvbigpO1xuICAgICAgfVxuICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdGFydGVkPy4oKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfc3RhcnRlZFwiLCB7XG4gICAgICAgIGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmbG93UmVzdWx0ID0gYXdhaXQgc2ltcGxlT2pzRmxvdyhwYXJhbXMpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9zdWNjZXNzXCIsIHtcbiAgICAgICAgY3BtOiBwYXJhbXMuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5mbG93UmVzdWx0XG4gICAgICB9KTtcbiAgICAgIGZvcmNlUHJvY2Vzc01ldHJpY3NRdWV1ZSgpO1xuICAgICAgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MoZmxvd1Jlc3VsdC5yZXN1bHQucGF5bWVudF9tZXRob2RfaWQpO1xuICAgICAgfSBlbHNlIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwiY2hlY2tvdXRcIikge1xuICAgICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN1Y2Nlc3MoXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuaW52b2ljZV91cmxzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuY3VzdG9tZXJfaWQsXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQucHJvY2Vzc29yc191c2VkID8/IFtdLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkID8/IFwiXCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7Zmxvd1Jlc3VsdH1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JDb2RlID0gYXdhaXQgc2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlKHBhcmFtcy5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIGVycm9yTWVzc2FnZSk7XG4gICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBjcG06IHBhcmFtcy5jaGVja291dFBheW1lbnRNZXRob2QsIGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlLCBlcnJvciB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICBpZiAocGFyYW1zLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uKSB7XG4gICAgICAgIHN0b3BQcmV2ZW50TmF2aWdhdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5jb25zdCBhZGRFcnJvckNhdGNoZXJGb3JJbml0ID0gKGluaXQpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGluaXQocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWVycm9yLWNhdGNoZXJcIik7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JDb2RlID0gYXdhaXQgc2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlKHBhcmFtcy5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIGVycm9yTWVzc2FnZSk7XG4gICAgICBlcnJfXyhlcnJvckNvZGUsIGVycm9yTWVzc2FnZSwgZXJyb3IpO1xuICAgICAgdHJhY2soXCJpbml0X2Zsb3dfZXJyb3JcIiwgeyBlcnJvck1lc3NhZ2UsIGVycm9yQ29kZSwgZXJyb3IgfSk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUsIGlzTG9hZGluZzogZmFsc2UgfTtcbiAgICB9XG4gIH07XG59O1xuY29uc3QgY3JlYXRlT2pzRmxvd0xvZ2dlcnMgPSAocHJlZml4KSA9PiB7XG4gIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5sb2coYCR7Y2hhbGsuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS53YXJuKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5mdW5jdGlvbiBfX3JlYWQkNChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG5mdW5jdGlvbiBfX3NwcmVhZEFycmF5JDQodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5mdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHtcbiAgICB2YXIgX3N1cGVyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIH07XG4gICAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYztcbiAgICByZXR1cm4gY3RvckZ1bmM7XG59XG5cbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICAgICAgPyBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGFyclJlbW92ZShhcnIsIGl0ZW0pIHtcbiAgICBpZiAoYXJyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAwIDw9IGluZGV4ICYmIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmlwdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKGluaXRpYWxUZWFyZG93bikge1xuICAgICAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IGluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuICAgICAgICB2YXIgZXJyb3JzO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgICAgIGlmIChfcGFyZW50YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IF9wYXJlbnRhZ2VfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2VfMV8xICYmICFfcGFyZW50YWdlXzFfMS5kb25lICYmIChfYSA9IF9wYXJlbnRhZ2VfMS5yZXR1cm4pKSBfYS5jYWxsKF9wYXJlbnRhZ2VfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbml0aWFsRmluYWxpemVyID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBfX3NwcmVhZEFycmF5JDQoX19zcHJlYWRBcnJheSQ0KFtdLCBfX3JlYWQkNChlcnJvcnMpKSwgX19yZWFkJDQoZXJyLmVycm9ycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmluYWxpemVyc18xXzEgJiYgIV9maW5hbGl6ZXJzXzFfMS5kb25lICYmIChfYiA9IF9maW5hbGl6ZXJzXzEucmV0dXJuKSkgX2IuY2FsbChfZmluYWxpemVyc18xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1YnNjcmlwdGlvbkVycm9yKGVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24uY2xvc2VkIHx8IHRlYXJkb3duLl9oYXNQYXJlbnQodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bi5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChfYSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5wdXNoKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSAmJiBfcGFyZW50YWdlLmluY2x1ZGVzKHBhcmVudCkpO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSA/IChfcGFyZW50YWdlLnB1c2gocGFyZW50KSwgX3BhcmVudGFnZSkgOiBfcGFyZW50YWdlID8gW19wYXJlbnRhZ2UsIHBhcmVudF0gOiBwYXJlbnQ7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICBpZiAoX3BhcmVudGFnZSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgIGFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICBfZmluYWxpemVycyAmJiBhcnJSZW1vdmUoX2ZpbmFsaXplcnMsIHRlYXJkb3duKTtcbiAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0ZWFyZG93bi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24uRU1QVFkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW1wdHkgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIGVtcHR5LmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBlbXB0eTtcbiAgICB9KSgpO1xuICAgIHJldHVybiBTdWJzY3JpcHRpb247XG59KCkpO1xudmFyIEVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbiB8fFxuICAgICAgICAodmFsdWUgJiYgJ2Nsb3NlZCcgaW4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUuYWRkKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnVuc3Vic2NyaWJlKSkpO1xufVxuZnVuY3Rpb24gZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihmaW5hbGl6ZXIpKSB7XG4gICAgICAgIGZpbmFsaXplcigpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmluYWxpemVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuXG52YXIgY29uZmlnID0ge1xuICAgIFByb21pc2U6IHVuZGVmaW5lZH07XG5cbnZhciB0aW1lb3V0UHJvdmlkZXIgPSB7XG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5JDQoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQkNChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbmZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikge1xuICAgIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7IH1cblxuZnVuY3Rpb24gZXJyb3JDb250ZXh0KGNiKSB7XG4gICAge1xuICAgICAgICBjYigpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChpc1N1YnNjcmlwdGlvbihkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoX3RoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBFTVBUWV9PQlNFUlZFUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YnNjcmliZXIuY3JlYXRlID0gZnVuY3Rpb24gKG5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVTdWJzY3JpYmVyKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaWJlcjtcbn0oU3Vic2NyaXB0aW9uKSk7XG52YXIgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgfVxuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXI7XG59KCkpO1xudmFyIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7XG4gICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgbmV4dDogKG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGUgIT09IG51bGwgJiYgY29tcGxldGUgIT09IHZvaWQgMCA/IGNvbXBsZXRlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcik7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFNhZmVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcikge1xuICAgIHtcbiAgICAgICAgcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyKSB7XG4gICAgdGhyb3cgZXJyO1xufVxudmFyIEVNUFRZX09CU0VSVkVSID0ge1xuICAgIGNsb3NlZDogdHJ1ZSxcbiAgICBuZXh0OiBub29wLFxuICAgIGVycm9yOiBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIGNvbXBsZXRlOiBub29wLFxufTtcblxudmFyIG9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUpIHx8ICdAQG9ic2VydmFibGUnOyB9KSgpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIHBpcGVGcm9tQXJyYXkoZm5zKSB7XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgIH1cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGZuKSB7IHJldHVybiBmbihwcmV2KTsgfSwgaW5wdXQpO1xuICAgIH07XG59XG5cbnZhciBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZSkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgb2JzZXJ2YWJsZS5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMsIG9wZXJhdG9yID0gX2Eub3BlcmF0b3IsIHNvdXJjZSA9IF9hLnNvdXJjZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yXG4gICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci5jYWxsKHN1YnNjcmliZXIsIHNvdXJjZSlcbiAgICAgICAgICAgICAgICA6IHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHNpbmspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUoc2luayk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2luay5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKG5leHQsIHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGVbb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uIChwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24gKHgpIHsgcmV0dXJuICh2YWx1ZSA9IHgpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiByZWplY3QoZXJyKTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZSh2YWx1ZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHN1YnNjcmliZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlO1xufSgpKTtcbmZ1bmN0aW9uIGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzT2JzZXJ2ZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGlzU3Vic2NyaWJlcih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpYmVyKSB8fCAoaXNPYnNlcnZlcih2YWx1ZSkgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gaGFzTGlmdChzb3VyY2UpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2UubGlmdCk7XG59XG5mdW5jdGlvbiBvcGVyYXRlKGluaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQoZnVuY3Rpb24gKGxpZnRlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0KGxpZnRlZFNvdXJjZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlJyk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKTtcbn1cbnZhciBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vbkZpbmFsaXplID0gb25GaW5hbGl6ZTtcbiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTtcbiAgICAgICAgX3RoaXMuX25leHQgPSBvbk5leHRcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25OZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDtcbiAgICAgICAgX3RoaXMuX2Vycm9yID0gb25FcnJvclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjtcbiAgICAgICAgX3RoaXMuX2NvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPcGVyYXRvclN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgICAgICAgIHZhciBjbG9zZWRfMSA9IHRoaXMuY2xvc2VkO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgIWNsb3NlZF8xICYmICgoX2EgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuXG52YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdPYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdvYmplY3QgdW5zdWJzY3JpYmVkJztcbiAgICB9O1xufSk7XG5cbnZhciBTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YmplY3QucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQW5vbnltb3VzU3ViamVjdCh0aGlzLCB0aGlzKTtcbiAgICAgICAgc3ViamVjdC5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIGlmICghX3RoaXMuY3VycmVudE9ic2VydmVycykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShfdGhpcy5vYnNlcnZlcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKF90aGlzLmN1cnJlbnRPYnNlcnZlcnMpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfYy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmhhc0Vycm9yID0gX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YmplY3QucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA+IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5uZXJTdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQsIG9ic2VydmVycyA9IF9hLm9ic2VydmVycztcbiAgICAgICAgaWYgKGhhc0Vycm9yIHx8IGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBvYnNlcnZlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgICAgICBhcnJSZW1vdmUob2JzZXJ2ZXJzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBTdWJqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJqZWN0O1xufShPYnNlcnZhYmxlKSk7XG52YXIgQW5vbnltb3VzU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFub255bW91c1N1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgdmFsdWUpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGVycik7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgfTtcbiAgICByZXR1cm4gQW5vbnltb3VzU3ViamVjdDtcbn0oU3ViamVjdCkpO1xuXG52YXIgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICAgIG5vdzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKERhdGUpLm5vdygpO1xuICAgIH19O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5JDQoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQkNChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gRW1wdHlFcnJvckltcGwoKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0VtcHR5RXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnbm8gZWxlbWVudHMgaW4gc2VxdWVuY2UnO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gbGFzdFZhbHVlRnJvbShzb3VyY2UsIGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBfaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIF92YWx1ZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBfaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChfaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFbXB0eUVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlKTtcbn1cblxudmFyIFRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBUaW1lb3V0RXJyb3JJbXBsKGluZm8pIHtcbiAgICAgICAgaWYgKGluZm8gPT09IHZvaWQgMCkgeyBpbmZvID0gbnVsbDsgfVxuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdUaW1lb3V0IGhhcyBvY2N1cnJlZCc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIHRpbWVvdXQoY29uZmlnLCBzY2hlZHVsZXJBcmcpIHtcbiAgICB2YXIgX2EgPSAoaXNWYWxpZERhdGUoY29uZmlnKSA/IHsgZmlyc3Q6IGNvbmZpZyB9IDogdHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicgPyB7IGVhY2g6IGNvbmZpZyB9IDogY29uZmlnKSwgZmlyc3QgPSBfYS5maXJzdCwgZWFjaCA9IF9hLmVhY2gsIF9iID0gX2Eud2l0aCwgX3dpdGggPSBfYiA9PT0gdm9pZCAwID8gdGltZW91dEVycm9yRmFjdG9yeSA6IF9iLCBfYyA9IF9hLnNjaGVkdWxlciwgc2NoZWR1bGVyID0gX2MgPT09IHZvaWQgMCA/IGFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2EubWV0YSwgbWV0YSA9IF9kID09PSB2b2lkIDAgPyBudWxsIDogX2Q7XG4gICAgaWYgKGZpcnN0ID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIHRpbWVvdXQgcHJvdmlkZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgdGltZXJTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB2YXIgc2VlbiA9IDA7XG4gICAgICAgIHZhciBzdGFydFRpbWVyID0gZnVuY3Rpb24gKGRlbGF5KSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9IGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICBpbm5lckZyb20oX3dpdGgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YTogbWV0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogbGFzdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbjogc2VlbixcbiAgICAgICAgICAgICAgICAgICAgfSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICB9O1xuICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiA9IHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBzZWVuKys7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKGxhc3RWYWx1ZSA9IHZhbHVlKSk7XG4gICAgICAgICAgICBlYWNoID4gMCAmJiBzdGFydFRpbWVyKGVhY2gpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCEodGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLmNsb3NlZCkpIHtcbiAgICAgICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICAgICAgIXNlZW4gJiYgc3RhcnRUaW1lcihmaXJzdCAhPSBudWxsID8gKHR5cGVvZiBmaXJzdCA9PT0gJ251bWJlcicgPyBmaXJzdCA6ICtmaXJzdCAtIHNjaGVkdWxlci5ub3coKSkgOiBlYWNoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRpbWVvdXRFcnJvckZhY3RvcnkoaW5mbykge1xuICAgIHRocm93IG5ldyBUaW1lb3V0RXJyb3IoaW5mbyk7XG59XG5cbmNsYXNzIExvYWRlZE9uY2VQdWJsaXNoZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogdHJ1ZSwgbG9hZGVkVmFsdWU6IHZhbHVlIH07XG4gICAgICB0aGlzLl9zdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgdGhpcy50aHJvdyA9IChlcnJvciwgZXJyTXNnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogZmFsc2UsIGVycm9yLCBlcnJNc2cgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QuZXJyb3IoZXJyb3IpO1xuICAgIH07XG4gICAgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9ICh2YWx1ZUlmTm90TG9hZGVkKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZUlmTm90TG9hZGVkO1xuICAgIH07XG4gICAgdGhpcy5zdWJzY3JpYmUgPSAoZm4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLndhaXRGb3JMb2FkID0gKHRpbWVvdXRDb25maWcpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIikgYXNzZXJ0TmV2ZXIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCB0aW1lb3V0UGFyYW1zID0ge1xuICAgICAgICBmaXJzdDogdGltZW91dENvbmZpZy50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcih0aW1lb3V0Q29uZmlnLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuX3N1YmplY3QucGlwZSh0aW1lb3V0KHRpbWVvdXRQYXJhbXMpKSk7XG4gICAgfTtcbiAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6IGZhbHNlIH07XG4gICAgdGhpcy5fc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cblxuY29uc3QgT2pzRW52aXJvbm1lbnQgPSB6LmVudW0oW1wiZGV2XCIsIFwic3RnXCIsIFwicHJvZFwiXSk7XG5jb25zdCBjb25udG9CYXNlVXJscyA9IHtcbiAgcHJvZDogXCJodHRwczovL2Nvbm50by5nZXRvcGVucGF5LmNvbVwiLFxuICBzdGc6IFwiaHR0cHM6Ly9jb25udG8ub3BlbnBheXN0YWdpbmcuY29tXCIsXG4gIGRldjogXCJodHRwOi8vbG9jYWxob3N0OjgwMDBcIlxufTtcbmNvbnN0IGdldENvbm50b1VybCA9IChlbnYpID0+IHtcbiAgcmV0dXJuIGNvbm50b0Jhc2VVcmxzW2Vudl07XG59O1xuY29uc3QgZW52Q2FjaGUgPSB7fTtcbmNvbnN0IGdldEN1cnJlbnRFbnYgPSBhc3luYyAoYmFzZVVybCkgPT4ge1xuICBpZiAoZW52Q2FjaGVbYmFzZVVybF0pIHtcbiAgICByZXR1cm4gZW52Q2FjaGVbYmFzZVVybF07XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG5ldyBVUkwoXCIvaGVhbHRoL2Vudmlyb25tZW50XCIsIGJhc2VVcmwpKS50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpO1xuICAgIGNvbnN0IGVudiA9IE9qc0Vudmlyb25tZW50LnBhcnNlKHJlc3BvbnNlLmVudmlyb25tZW50KTtcbiAgICBlbnZDYWNoZVtiYXNlVXJsXSA9IGVudjtcbiAgICByZXR1cm4gZW52O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBPanNFbnZpcm9ubWVudC5WYWx1ZXMucHJvZDtcbiAgfVxufTtcblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt2YWx1ZX1gKTtcbn1cbmNvbnN0IGV4Y2x1ZGVQcm9wcyA9IChvYmosIHByb3BzKSA9PiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMob2JqKS5maWx0ZXIoKFtrZXldKSA9PiAhcHJvcHMuaW5jbHVkZXMoa2V5KSkpO1xufTtcbmNvbnN0IGdldFdpbmRvd1NhZmUgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICByZXR1cm4gd2luZG93O1xufTtcblxuY29uc3QgbWV0cmljc1B1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG5jb25zdCBNRVRSSUNTX1FVRVVFX0tFWSA9IFwib3BfbWV0cmljc19xdWV1ZVwiO1xuY29uc3QgTUFYX1JFVFJZX0FUVEVNUFRTID0gMztcbmNvbnN0IEJBVENIX1NJWkUgPSAzO1xuY29uc3QgQkFUQ0hfSU5URVJWQUxfTVMgPSAxZTM7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyR4IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyBNZXRyaWNzUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwO1xuICAgIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18keChcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKTtcbiAgICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfTtcbiAgICB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18keChcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIik7XG4gICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH07XG4gICAgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudChldmVudE5hbWUsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudE5hbWUsXG4gICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IGNvbnRleHRQcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBEYXRlLm5vdygpIC0gdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgOiAwXG4gICAgfTtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IGV2ZW50LnRpbWVzdGFtcDtcbiAgICB0aGlzLnF1ZXVlLnB1c2goZXZlbnQpO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG4gIGxvYWRRdWV1ZUZyb21TdG9yYWdlKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWRRdWV1ZSA9IGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlPy5nZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZKTtcbiAgICAgIGlmIChzdG9yZWRRdWV1ZSkge1xuICAgICAgICB0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShzdG9yZWRRdWV1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZS5zZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3Qgc2FmZVdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICBpZiAoc2FmZVdpbmRvdyAmJiBuYXZpZ2F0b3Iub25MaW5lICYmICF0aGlzLnByb2Nlc3NpbmdRdWV1ZSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgIXRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IHNhZmVXaW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgIH0sIEJBVENIX0lOVEVSVkFMX01TKTtcbiAgICB9XG4gIH1cbiAgY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGlmICh0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgZ2V0V2luZG93U2FmZSgpPy5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICBpZiAoIW5hdmlnYXRvci5vbkxpbmUgfHwgdGhpcy5wcm9jZXNzaW5nUXVldWUgfHwgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSB0cnVlO1xuICAgIHRoaXMuc2VuZEJhdGNoKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRleHQgPSBtZXRyaWNzUHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKHZvaWQgMCk7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICBsb2dfXyR4KFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hQYXlsb2FkID0ge1xuICAgICAgICBldmVudHM6IGJhdGNoLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZlbnRfbmFtZTogZXZlbnQuZXZlbnROYW1lLFxuICAgICAgICAgICAgZGV2aWNlX3Rva2VuOiBjb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICAgIC4uLmV2ZW50LmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBub25jZTogZXZlbnQubm9uY2UsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBldmVudC5kYXRldGltZSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBldmVudC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IGNvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgY29uc3QgY29ubnRvVXJsID0gZ2V0Q29ubnRvVXJsKGNvbnRleHQuZW52aXJvbm1lbnQpO1xuICAgICAgY29uc3QgbWV0cmljc1JvdXRlciA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBjb25udG9VcmwpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChtZXRyaWNzUm91dGVyLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJhdGNoUGF5bG9hZCksXG4gICAgICAgIGtlZXBhbGl2ZTogdHJ1ZVxuICAgICAgICAvLyBUbyBzZW5kIGV2ZW50cyBldmVuIGlmIHRoZSBwYWdlIGlzIHVubG9hZGVkXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ19fJHgoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaChiYXRjaCkge1xuICAgIGJhdGNoLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCBldmVudHNUb0tlZXAgPSBiYXRjaC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hdHRlbXB0Q291bnQgPCBNQVhfUkVUUllfQVRURU1QVFMpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgdGhpcy5xdWV1ZSA9IFsuLi5ldmVudHNUb0tlZXAsIC4uLnRoaXMucXVldWVdO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgbWV0cmljc1F1ZXVlID0gbmV3IE1ldHJpY3NRdWV1ZSgpO1xuY29uc3QgdHJhY2sgPSAoZXZlbnQsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKSA9PiB7XG4gIG1ldHJpY3NRdWV1ZS5hZGRFdmVudChldmVudCwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpO1xufTtcbmNvbnN0IGZvcmNlUHJvY2Vzc01ldHJpY3NRdWV1ZSA9ICgpID0+IHtcbiAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xufTtcbmNvbnN0IG9uVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IgPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGV2ZW50LnJlYXNvbik7XG4gIHRyYWNrKFwidW5oYW5kbGVkX3JlamVjdGlvbl9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgIGVycm9yX25hbWU6IGV2ZW50LnJlYXNvblxuICB9KTtcbn07XG5jb25zdCBvblVuY2F1Z2h0RXJyb3IgPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGV2ZW50LmVycm9yKTtcbiAgdHJhY2soXCJ1bmNhdWdodF9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgIGVycm9yX25hbWU6IGV2ZW50LmVycm9yPy5uYW1lLFxuICAgIGVycm9yX3N0YWNrOiBldmVudC5lcnJvcj8uc3RhY2ssXG4gICAgZmlsZV9uYW1lOiBldmVudC5maWxlbmFtZSxcbiAgICBsaW5lX251bWJlcjogZXZlbnQubGluZW5vLFxuICAgIGNvbHVtbl9udW1iZXI6IGV2ZW50LmNvbG5vXG4gIH0pO1xufTtcbmxldCBwYWdlTGlmZWN5Y2xlID0gbnVsbDtcbmNvbnN0IGxvYWRQYWdlTGlmZWN5Y2xlID0gYXN5bmMgKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFnZUxpZmVjeWNsZU1vZHVsZSA9IGF3YWl0IGltcG9ydCgnLi9saWZlY3ljbGUtIX57MDA1fX4uanMnKTtcbiAgICBwYWdlTGlmZWN5Y2xlID0gcGFnZUxpZmVjeWNsZU1vZHVsZS5kZWZhdWx0O1xuICAgIHJldHVybiBwYWdlTGlmZWN5Y2xlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihcIkZhaWxlZCB0byBsb2FkIHBhZ2UtbGlmZWN5Y2xlOlwiLCBlcnJvcik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5jb25zdCBwYWdlTGlmZWN5Y2xlU3RhdGVDaGFuZ2VIYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gIHRyYWNrKFwicGFnZV9saWZlY3ljbGVfc3RhdGVfY2hhbmdlXCIsIHtcbiAgICBvbGRfc3RhdGU6IGV2ZW50Lm9sZFN0YXRlLFxuICAgIG5ld19zdGF0ZTogZXZlbnQubmV3U3RhdGVcbiAgfSk7XG4gIGlmIChldmVudC5uZXdTdGF0ZSA9PT0gXCJoaWRkZW5cIiB8fCBldmVudC5uZXdTdGF0ZSA9PT0gXCJwYXNzaXZlXCIpIHtcbiAgICBtZXRyaWNzUXVldWUucHJvY2Vzc1F1ZXVlKCk7XG4gIH1cbn07XG5jb25zdCBhdHRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycyA9IGFzeW5jICgpID0+IHtcbiAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25VbmNhdWdodEVycm9yKTtcbiAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIG9uVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IpO1xuICBjb25zdCBsaWZlY3ljbGUgPSBhd2FpdCBsb2FkUGFnZUxpZmVjeWNsZSgpO1xuICBpZiAobGlmZWN5Y2xlKSB7XG4gICAgbGlmZWN5Y2xlLmFkZEV2ZW50TGlzdGVuZXIoXCJzdGF0ZWNoYW5nZVwiLCBwYWdlTGlmZWN5Y2xlU3RhdGVDaGFuZ2VIYW5kbGVyKTtcbiAgfVxufTtcbmNvbnN0IGRldGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzID0gYXN5bmMgKCkgPT4ge1xuICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvblVuY2F1Z2h0RXJyb3IpO1xuICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgb25VbmhhbmRsZWRSZWplY3Rpb25FcnJvcik7XG4gIGlmIChnZXRXaW5kb3dTYWZlKCkgJiYgcGFnZUxpZmVjeWNsZSkge1xuICAgIHBhZ2VMaWZlY3ljbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInN0YXRlY2hhbmdlXCIsIHBhZ2VMaWZlY3ljbGVTdGF0ZUNoYW5nZUhhbmRsZXIpO1xuICB9XG59O1xuXG5jb25zdCBTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHN0cmlwZV9wazogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbn0pO1xuY29uc3Qgb3VyQ3VycmVuY3lUb1RoZWlycyA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn07XG5jb25zdCBnZXRMb2FkZWRTdHJpcGUgPSBhc3luYyAocHVibGlzaGFibGVLZXkpID0+IHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgICBhd2FpdCBzbGVlcCg1MDApO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU3RyaXBlSnNQcmVzZW50KCkpIHtcbiAgICBjb25zb2xlLmxvZyhcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIEpTIG5vdCBmb3VuZC5gKTtcbiAgfVxuICBjb25zdCBzdHJpcGUgPSBuZXcgU3RyaXBlKHB1Ymxpc2hhYmxlS2V5KTtcbiAgcmV0dXJuIHN0cmlwZTtcbn07XG5jb25zdCBjcmVhdGVTdHJpcGVFbGVtZW50cyA9IGFzeW5jIChzdHJpcGVQdWJLZXksIGVsZW1lbnRzT3B0aW9ucykgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogc3RyaXBlLmVsZW1lbnRzKGVsZW1lbnRzT3B0aW9ucyksXG4gICAgc3RyaXBlXG4gIH07XG59O1xuY29uc3QgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QgPSBhc3luYyAoc3RyaXBlUHViS2V5LCB0b3RhbEFtb3VudEF0b20sIGN1cnJlbmN5LCBpc0Ftb3VudFBlbmRpbmcsIGlzTGlua09ubHkpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKHN0cmlwZVB1YktleSk7XG4gIGNvbnN0IHN0cmlwZUN1cnJlbmN5ID0gb3VyQ3VycmVuY3lUb1RoZWlyc1tjdXJyZW5jeS50b0xvd2VyQ2FzZSgpLnRyaW0oKV07XG4gIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gc3RyaXBlLnBheW1lbnRSZXF1ZXN0KHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzdHJpcGUgYWNjb3VudCBjb3VudHJ5IGFzIHNvb24gYXMgd2Ugc3VwcG9ydCBpdFxuICAgIGNvdW50cnk6IFwiVVNcIixcbiAgICBjdXJyZW5jeTogc3RyaXBlQ3VycmVuY3ksXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHRvdGFsQW1vdW50QXRvbSxcbiAgICAgIHBlbmRpbmc6IGlzQW1vdW50UGVuZGluZ1xuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6IHRydWUsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdIFxuICB9KTtcbiAgcmV0dXJuIHBheW1lbnRSZXF1ZXN0O1xufTtcbmNvbnN0IHNsZWVwID0gKHRpbWVvdXRNcykgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcyk7XG4gIH0pO1xufTtcbmNvbnN0IGlzU3RyaXBlSnNQcmVzZW50ID0gKCkgPT4ge1xuICByZXR1cm4gXCJTdHJpcGVcIiBpbiB3aW5kb3c7XG59O1xuY29uc3Qgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QgPSBhc3luYyAocGF5bWVudFJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJwYXltZW50bWV0aG9kIEVWVDo6IFwiLCBldnQpO1xuICAgICAgICByZXNvbHZlKGV2dCk7XG4gICAgICB9KTtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwidG9rZW5cIiwgYXN5bmMgKGV2dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcInRva2VuIEVWVDo6IFwiLCBldnQpO1xuICAgICAgfSk7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheWApKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGNvbmZpcm1TdHJpcGVQclBNID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG0pID0+IHtcbiAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrIHx8ICFuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkobmV4dEFjdGlvbk1ldGFkYXRhKX1gKTtcbiAgfVxuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBzdHJpcGVQbS5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAoY29uZmlybVJlc3VsdC5lcnJvcikge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwiZmFpbFwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke2NvbmZpcm1SZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBgdW5rbm93bmB9YCk7XG4gIH0gZWxzZSB7XG4gICAgc3RyaXBlUG0uY29tcGxldGUoXCJzdWNjZXNzXCIpO1xuICB9XG4gIHJldHVybiBjb25maXJtUmVzdWx0O1xufTtcbmNvbnN0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cgPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhKSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrKTtcbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWRcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdFN0YXR1cyA9IGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQ/LnN0YXR1cztcbiAgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJzdWNjZWVkZWRcIikge1xuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wbV9pZCk7XG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgY29uZmlybVJlc3VsdC5zZXR1cEludGVudCk7XG4gIH0gZWxzZSBpZiAocmVzdWx0U3RhdHVzID09PSBcImNhbmNlbGVkXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheWApO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke2NvbmZpcm1SZXN1bHQuZXJyb3I/Lm1lc3NhZ2UgPz8gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8ubGFzdF9zZXR1cF9lcnJvcj8ubWVzc2FnZSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICAgKTtcbiAgfVxufTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIFVwZGF0ZXMgdG8gdGhpcyBmaWxlIHNob3VsZCBhbHNvIGJlIHJlcGxpY2F0ZWQgdG8gQG9wZW50ZWxlbWV0cnkvY29yZSB0b28uXG4vKipcbiAqIC0gZ2xvYmFsVGhpcyAoTmV3IHN0YW5kYXJkKVxuICogLSBzZWxmIChXaWxsIHJldHVybiB0aGUgY3VycmVudCB3aW5kb3cgaW5zdGFuY2UgZm9yIHN1cHBvcnRlZCBicm93c2VycylcbiAqIC0gd2luZG93IChmYWxsYmFjayBmb3Igb2xkZXIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbnMpXG4gKiAtIGdsb2JhbCAoTm9kZUpTIGltcGxlbWVudGF0aW9uKVxuICogLSA8b2JqZWN0PiAoV2hlbiBhbGwgZWxzZSBmYWlscylcbiAqL1xuLyoqIG9ubHkgZ2xvYmFscyB0aGF0IGNvbW1vbiB0byBub2RlIGFuZCBicm93c2VycyBhcmUgYWxsb3dlZCAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vZGUvbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvZXMtYnVpbHRpbnMsIG5vLXVuZGVmXG52YXIgX2dsb2JhbFRoaXMgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCdcbiAgICA/IGdsb2JhbFRoaXNcbiAgICA6IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlbGZcbiAgICAgICAgOiB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyB3aW5kb3dcbiAgICAgICAgICAgIDogdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICA/IGdsb2JhbFxuICAgICAgICAgICAgICAgIDoge307XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbnZhciBWRVJTSU9OID0gJzEuOS4wJztcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciByZSA9IC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspKC0oLispKT8kLztcbi8qKlxuICogQ3JlYXRlIGEgZnVuY3Rpb24gdG8gdGVzdCBhbiBBUEkgdmVyc2lvbiB0byBzZWUgaWYgaXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBwcm92aWRlZCBvd25WZXJzaW9uLlxuICpcbiAqIFRoZSByZXR1cm5lZCBmdW5jdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBzZW1hbnRpY3M6XG4gKiAtIEV4YWN0IG1hdGNoIGlzIGFsd2F5cyBjb21wYXRpYmxlXG4gKiAtIE1ham9yIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICogICAgLSAxLnggcGFja2FnZSBjYW5ub3QgdXNlIGdsb2JhbCAyLnggcGFja2FnZVxuICogICAgLSAyLnggcGFja2FnZSBjYW5ub3QgdXNlIGdsb2JhbCAxLnggcGFja2FnZVxuICogLSBUaGUgbWlub3IgdmVyc2lvbiBvZiB0aGUgQVBJIG1vZHVsZSByZXF1ZXN0aW5nIGFjY2VzcyB0byB0aGUgZ2xvYmFsIEFQSSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbWlub3IgdmVyc2lvbiBvZiB0aGlzIEFQSVxuICogICAgLSAxLjMgcGFja2FnZSBtYXkgdXNlIDEuNCBnbG9iYWwgYmVjYXVzZSB0aGUgbGF0ZXIgZ2xvYmFsIGNvbnRhaW5zIGFsbCBmdW5jdGlvbnMgMS4zIGV4cGVjdHNcbiAqICAgIC0gMS40IHBhY2thZ2UgbWF5IE5PVCB1c2UgMS4zIGdsb2JhbCBiZWNhdXNlIGl0IG1heSB0cnkgdG8gY2FsbCBmdW5jdGlvbnMgd2hpY2ggZG9uJ3QgZXhpc3Qgb24gMS4zXG4gKiAtIElmIHRoZSBtYWpvciB2ZXJzaW9uIGlzIDAsIHRoZSBtaW5vciB2ZXJzaW9uIGlzIHRyZWF0ZWQgYXMgdGhlIG1ham9yIGFuZCB0aGUgcGF0Y2ggaXMgdHJlYXRlZCBhcyB0aGUgbWlub3JcbiAqIC0gUGF0Y2ggYW5kIGJ1aWxkIHRhZyBkaWZmZXJlbmNlcyBhcmUgbm90IGNvbnNpZGVyZWQgYXQgdGhpcyB0aW1lXG4gKlxuICogQHBhcmFtIG93blZlcnNpb24gdmVyc2lvbiB3aGljaCBzaG91bGQgYmUgY2hlY2tlZCBhZ2FpbnN0XG4gKi9cbmZ1bmN0aW9uIF9tYWtlQ29tcGF0aWJpbGl0eUNoZWNrKG93blZlcnNpb24pIHtcbiAgICB2YXIgYWNjZXB0ZWRWZXJzaW9ucyA9IG5ldyBTZXQoW293blZlcnNpb25dKTtcbiAgICB2YXIgcmVqZWN0ZWRWZXJzaW9ucyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgbXlWZXJzaW9uTWF0Y2ggPSBvd25WZXJzaW9uLm1hdGNoKHJlKTtcbiAgICBpZiAoIW15VmVyc2lvbk1hdGNoKSB7XG4gICAgICAgIC8vIHdlIGNhbm5vdCBndWFyYW50ZWUgY29tcGF0aWJpbGl0eSBzbyB3ZSBhbHdheXMgcmV0dXJuIG5vb3BcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9O1xuICAgIH1cbiAgICB2YXIgb3duVmVyc2lvblBhcnNlZCA9IHtcbiAgICAgICAgbWFqb3I6ICtteVZlcnNpb25NYXRjaFsxXSxcbiAgICAgICAgbWlub3I6ICtteVZlcnNpb25NYXRjaFsyXSxcbiAgICAgICAgcGF0Y2g6ICtteVZlcnNpb25NYXRjaFszXSxcbiAgICAgICAgcHJlcmVsZWFzZTogbXlWZXJzaW9uTWF0Y2hbNF0sXG4gICAgfTtcbiAgICAvLyBpZiBvd25WZXJzaW9uIGhhcyBhIHByZXJlbGVhc2UgdGFnLCB2ZXJzaW9ucyBtdXN0IG1hdGNoIGV4YWN0bHlcbiAgICBpZiAob3duVmVyc2lvblBhcnNlZC5wcmVyZWxlYXNlICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzRXhhY3RtYXRjaChnbG9iYWxWZXJzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsVmVyc2lvbiA9PT0gb3duVmVyc2lvbjtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX3JlamVjdCh2KSB7XG4gICAgICAgIHJlamVjdGVkVmVyc2lvbnMuYWRkKHYpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9hY2NlcHQodikge1xuICAgICAgICBhY2NlcHRlZFZlcnNpb25zLmFkZCh2KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBpc0NvbXBhdGlibGUoZ2xvYmFsVmVyc2lvbikge1xuICAgICAgICBpZiAoYWNjZXB0ZWRWZXJzaW9ucy5oYXMoZ2xvYmFsVmVyc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWplY3RlZFZlcnNpb25zLmhhcyhnbG9iYWxWZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBnbG9iYWxWZXJzaW9uTWF0Y2ggPSBnbG9iYWxWZXJzaW9uLm1hdGNoKHJlKTtcbiAgICAgICAgaWYgKCFnbG9iYWxWZXJzaW9uTWF0Y2gpIHtcbiAgICAgICAgICAgIC8vIGNhbm5vdCBwYXJzZSBvdGhlciB2ZXJzaW9uXG4gICAgICAgICAgICAvLyB3ZSBjYW5ub3QgZ3VhcmFudGVlIGNvbXBhdGliaWxpdHkgc28gd2UgYWx3YXlzIG5vb3BcbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBnbG9iYWxWZXJzaW9uUGFyc2VkID0ge1xuICAgICAgICAgICAgbWFqb3I6ICtnbG9iYWxWZXJzaW9uTWF0Y2hbMV0sXG4gICAgICAgICAgICBtaW5vcjogK2dsb2JhbFZlcnNpb25NYXRjaFsyXSxcbiAgICAgICAgICAgIHBhdGNoOiArZ2xvYmFsVmVyc2lvbk1hdGNoWzNdLFxuICAgICAgICAgICAgcHJlcmVsZWFzZTogZ2xvYmFsVmVyc2lvbk1hdGNoWzRdLFxuICAgICAgICB9O1xuICAgICAgICAvLyBpZiBnbG9iYWxWZXJzaW9uIGhhcyBhIHByZXJlbGVhc2UgdGFnLCB2ZXJzaW9ucyBtdXN0IG1hdGNoIGV4YWN0bHlcbiAgICAgICAgaWYgKGdsb2JhbFZlcnNpb25QYXJzZWQucHJlcmVsZWFzZSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtYWpvciB2ZXJzaW9ucyBtdXN0IG1hdGNoXG4gICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1ham9yICE9PSBnbG9iYWxWZXJzaW9uUGFyc2VkLm1ham9yKSB7XG4gICAgICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5tYWpvciA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWlub3IgPT09IGdsb2JhbFZlcnNpb25QYXJzZWQubWlub3IgJiZcbiAgICAgICAgICAgICAgICBvd25WZXJzaW9uUGFyc2VkLnBhdGNoIDw9IGdsb2JhbFZlcnNpb25QYXJzZWQucGF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2FjY2VwdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1pbm9yIDw9IGdsb2JhbFZlcnNpb25QYXJzZWQubWlub3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfYWNjZXB0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgIH07XG59XG4vKipcbiAqIFRlc3QgYW4gQVBJIHZlcnNpb24gdG8gc2VlIGlmIGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGlzIEFQSS5cbiAqXG4gKiAtIEV4YWN0IG1hdGNoIGlzIGFsd2F5cyBjb21wYXRpYmxlXG4gKiAtIE1ham9yIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICogICAgLSAxLnggcGFja2FnZSBjYW5ub3QgdXNlIGdsb2JhbCAyLnggcGFja2FnZVxuICogICAgLSAyLnggcGFja2FnZSBjYW5ub3QgdXNlIGdsb2JhbCAxLnggcGFja2FnZVxuICogLSBUaGUgbWlub3IgdmVyc2lvbiBvZiB0aGUgQVBJIG1vZHVsZSByZXF1ZXN0aW5nIGFjY2VzcyB0byB0aGUgZ2xvYmFsIEFQSSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbWlub3IgdmVyc2lvbiBvZiB0aGlzIEFQSVxuICogICAgLSAxLjMgcGFja2FnZSBtYXkgdXNlIDEuNCBnbG9iYWwgYmVjYXVzZSB0aGUgbGF0ZXIgZ2xvYmFsIGNvbnRhaW5zIGFsbCBmdW5jdGlvbnMgMS4zIGV4cGVjdHNcbiAqICAgIC0gMS40IHBhY2thZ2UgbWF5IE5PVCB1c2UgMS4zIGdsb2JhbCBiZWNhdXNlIGl0IG1heSB0cnkgdG8gY2FsbCBmdW5jdGlvbnMgd2hpY2ggZG9uJ3QgZXhpc3Qgb24gMS4zXG4gKiAtIElmIHRoZSBtYWpvciB2ZXJzaW9uIGlzIDAsIHRoZSBtaW5vciB2ZXJzaW9uIGlzIHRyZWF0ZWQgYXMgdGhlIG1ham9yIGFuZCB0aGUgcGF0Y2ggaXMgdHJlYXRlZCBhcyB0aGUgbWlub3JcbiAqIC0gUGF0Y2ggYW5kIGJ1aWxkIHRhZyBkaWZmZXJlbmNlcyBhcmUgbm90IGNvbnNpZGVyZWQgYXQgdGhpcyB0aW1lXG4gKlxuICogQHBhcmFtIHZlcnNpb24gdmVyc2lvbiBvZiB0aGUgQVBJIHJlcXVlc3RpbmcgYW4gaW5zdGFuY2Ugb2YgdGhlIGdsb2JhbCBBUElcbiAqL1xudmFyIGlzQ29tcGF0aWJsZSA9IF9tYWtlQ29tcGF0aWJpbGl0eUNoZWNrKFZFUlNJT04pO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIG1ham9yID0gVkVSU0lPTi5zcGxpdCgnLicpWzBdO1xudmFyIEdMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVkgPSBTeW1ib2wuZm9yKFwib3BlbnRlbGVtZXRyeS5qcy5hcGkuXCIgKyBtYWpvcik7XG52YXIgX2dsb2JhbCA9IF9nbG9iYWxUaGlzO1xuZnVuY3Rpb24gcmVnaXN0ZXJHbG9iYWwodHlwZSwgaW5zdGFuY2UsIGRpYWcsIGFsbG93T3ZlcnJpZGUpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKGFsbG93T3ZlcnJpZGUgPT09IHZvaWQgMCkgeyBhbGxvd092ZXJyaWRlID0gZmFsc2U7IH1cbiAgICB2YXIgYXBpID0gKF9nbG9iYWxbR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWV0gPSAoX2EgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT04sXG4gICAgfSk7XG4gICAgaWYgKCFhbGxvd092ZXJyaWRlICYmIGFwaVt0eXBlXSkge1xuICAgICAgICAvLyBhbHJlYWR5IHJlZ2lzdGVyZWQgYW4gQVBJIG9mIHRoaXMgdHlwZVxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBBdHRlbXB0ZWQgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiBvZiBBUEk6IFwiICsgdHlwZSk7XG4gICAgICAgIGRpYWcuZXJyb3IoZXJyLnN0YWNrIHx8IGVyci5tZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYXBpLnZlcnNpb24gIT09IFZFUlNJT04pIHtcbiAgICAgICAgLy8gQWxsIHJlZ2lzdGVyZWQgQVBJcyBtdXN0IGJlIG9mIHRoZSBzYW1lIHZlcnNpb24gZXhhY3RseVxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RyYXRpb24gb2YgdmVyc2lvbiB2XCIgKyBhcGkudmVyc2lvbiArIFwiIGZvciBcIiArIHR5cGUgKyBcIiBkb2VzIG5vdCBtYXRjaCBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgQVBJIHZcIiArIFZFUlNJT04pO1xuICAgICAgICBkaWFnLmVycm9yKGVyci5zdGFjayB8fCBlcnIubWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYXBpW3R5cGVdID0gaW5zdGFuY2U7XG4gICAgZGlhZy5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0ZXJlZCBhIGdsb2JhbCBmb3IgXCIgKyB0eXBlICsgXCIgdlwiICsgVkVSU0lPTiArIFwiLlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGdldEdsb2JhbCh0eXBlKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgZ2xvYmFsVmVyc2lvbiA9IChfYSA9IF9nbG9iYWxbR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52ZXJzaW9uO1xuICAgIGlmICghZ2xvYmFsVmVyc2lvbiB8fCAhaXNDb21wYXRpYmxlKGdsb2JhbFZlcnNpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIChfYiA9IF9nbG9iYWxbR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWV0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlt0eXBlXTtcbn1cbmZ1bmN0aW9uIHVucmVnaXN0ZXJHbG9iYWwodHlwZSwgZGlhZykge1xuICAgIGRpYWcuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFVucmVnaXN0ZXJpbmcgYSBnbG9iYWwgZm9yIFwiICsgdHlwZSArIFwiIHZcIiArIFZFUlNJT04gKyBcIi5cIik7XG4gICAgdmFyIGFwaSA9IF9nbG9iYWxbR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWV07XG4gICAgaWYgKGFwaSkge1xuICAgICAgICBkZWxldGUgYXBpW3R5cGVdO1xuICAgIH1cbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX3JlYWQkMyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5JDMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbi8qKlxuICogQ29tcG9uZW50IExvZ2dlciB3aGljaCBpcyBtZWFudCB0byBiZSB1c2VkIGFzIHBhcnQgb2YgYW55IGNvbXBvbmVudCB3aGljaFxuICogd2lsbCBhZGQgYXV0b21hdGljYWxseSBhZGRpdGlvbmFsIG5hbWVzcGFjZSBpbiBmcm9udCBvZiB0aGUgbG9nIG1lc3NhZ2UuXG4gKiBJdCB3aWxsIHRoZW4gZm9yd2FyZCBhbGwgbWVzc2FnZSB0byBnbG9iYWwgZGlhZyBsb2dnZXJcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBjTG9nZ2VyID0gZGlhZy5jcmVhdGVDb21wb25lbnRMb2dnZXIoeyBuYW1lc3BhY2U6ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24taHR0cCcgfSk7XG4gKiBjTG9nZ2VyLmRlYnVnKCd0ZXN0Jyk7XG4gKiAvLyBAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24taHR0cCB0ZXN0XG4gKi9cbnZhciBEaWFnQ29tcG9uZW50TG9nZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERpYWdDb21wb25lbnRMb2dnZXIocHJvcHMpIHtcbiAgICAgICAgdGhpcy5fbmFtZXNwYWNlID0gcHJvcHMubmFtZXNwYWNlIHx8ICdEaWFnQ29tcG9uZW50TG9nZ2VyJztcbiAgICB9XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvZ1Byb3h5KCdkZWJ1ZycsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2Vycm9yJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9O1xuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLmluZm8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvZ1Byb3h5KCdpbmZvJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9O1xuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLndhcm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvZ1Byb3h5KCd3YXJuJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9O1xuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLnZlcmJvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvZ1Byb3h5KCd2ZXJib3NlJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBEaWFnQ29tcG9uZW50TG9nZ2VyO1xufSgpKTtcbmZ1bmN0aW9uIGxvZ1Byb3h5KGZ1bmNOYW1lLCBuYW1lc3BhY2UsIGFyZ3MpIHtcbiAgICB2YXIgbG9nZ2VyID0gZ2V0R2xvYmFsKCdkaWFnJyk7XG4gICAgLy8gc2hvcnRjdXQgaWYgbG9nZ2VyIG5vdCBzZXRcbiAgICBpZiAoIWxvZ2dlcikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFyZ3MudW5zaGlmdChuYW1lc3BhY2UpO1xuICAgIHJldHVybiBsb2dnZXJbZnVuY05hbWVdLmFwcGx5KGxvZ2dlciwgX19zcHJlYWRBcnJheSQzKFtdLCBfX3JlYWQkMyhhcmdzKSwgZmFsc2UpKTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgYXZhaWxhYmxlIGludGVybmFsIGxvZ2dpbmcgbGV2ZWxzIGZvciB0aGUgZGlhZ25vc3RpYyBsb2dnZXIsIHRoZSBudW1lcmljIHZhbHVlc1xuICogb2YgdGhlIGxldmVscyBhcmUgZGVmaW5lZCB0byBtYXRjaCB0aGUgb3JpZ2luYWwgdmFsdWVzIGZyb20gdGhlIGluaXRpYWwgTG9nTGV2ZWwgdG8gYXZvaWRcbiAqIGNvbXBhdGliaWxpdHkvbWlncmF0aW9uIGlzc3VlcyBmb3IgYW55IGltcGxlbWVudGF0aW9uIHRoYXQgYXNzdW1lIHRoZSBudW1lcmljIG9yZGVyaW5nLlxuICovXG52YXIgRGlhZ0xvZ0xldmVsO1xuKGZ1bmN0aW9uIChEaWFnTG9nTGV2ZWwpIHtcbiAgICAvKiogRGlhZ25vc3RpYyBMb2dnaW5nIGxldmVsIHNldHRpbmcgdG8gZGlzYWJsZSBhbGwgbG9nZ2luZyAoZXhjZXB0IGFuZCBmb3JjZWQgbG9ncykgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiTk9ORVwiXSA9IDBdID0gXCJOT05FXCI7XG4gICAgLyoqIElkZW50aWZpZXMgYW4gZXJyb3Igc2NlbmFyaW8gKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiRVJST1JcIl0gPSAzMF0gPSBcIkVSUk9SXCI7XG4gICAgLyoqIElkZW50aWZpZXMgYSB3YXJuaW5nIHNjZW5hcmlvICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIldBUk5cIl0gPSA1MF0gPSBcIldBUk5cIjtcbiAgICAvKiogR2VuZXJhbCBpbmZvcm1hdGlvbmFsIGxvZyBtZXNzYWdlICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIklORk9cIl0gPSA2MF0gPSBcIklORk9cIjtcbiAgICAvKiogR2VuZXJhbCBkZWJ1ZyBsb2cgbWVzc2FnZSAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJERUJVR1wiXSA9IDcwXSA9IFwiREVCVUdcIjtcbiAgICAvKipcbiAgICAgKiBEZXRhaWxlZCB0cmFjZSBsZXZlbCBsb2dnaW5nIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGRldmVsb3BtZW50LCBzaG91bGQgb25seSBiZSBzZXRcbiAgICAgKiBpbiBhIGRldmVsb3BtZW50IGVudmlyb25tZW50LlxuICAgICAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJWRVJCT1NFXCJdID0gODBdID0gXCJWRVJCT1NFXCI7XG4gICAgLyoqIFVzZWQgdG8gc2V0IHRoZSBsb2dnaW5nIGxldmVsIHRvIGluY2x1ZGUgYWxsIGxvZ2dpbmcgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiQUxMXCJdID0gOTk5OV0gPSBcIkFMTFwiO1xufSkoRGlhZ0xvZ0xldmVsIHx8IChEaWFnTG9nTGV2ZWwgPSB7fSkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlTG9nTGV2ZWxEaWFnTG9nZ2VyKG1heExldmVsLCBsb2dnZXIpIHtcbiAgICBpZiAobWF4TGV2ZWwgPCBEaWFnTG9nTGV2ZWwuTk9ORSkge1xuICAgICAgICBtYXhMZXZlbCA9IERpYWdMb2dMZXZlbC5OT05FO1xuICAgIH1cbiAgICBlbHNlIGlmIChtYXhMZXZlbCA+IERpYWdMb2dMZXZlbC5BTEwpIHtcbiAgICAgICAgbWF4TGV2ZWwgPSBEaWFnTG9nTGV2ZWwuQUxMO1xuICAgIH1cbiAgICAvLyBJbiBjYXNlIHRoZSBsb2dnZXIgaXMgbnVsbCBvciB1bmRlZmluZWRcbiAgICBsb2dnZXIgPSBsb2dnZXIgfHwge307XG4gICAgZnVuY3Rpb24gX2ZpbHRlckZ1bmMoZnVuY05hbWUsIHRoZUxldmVsKSB7XG4gICAgICAgIHZhciB0aGVGdW5jID0gbG9nZ2VyW2Z1bmNOYW1lXTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGVGdW5jID09PSAnZnVuY3Rpb24nICYmIG1heExldmVsID49IHRoZUxldmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhlRnVuYy5iaW5kKGxvZ2dlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3I6IF9maWx0ZXJGdW5jKCdlcnJvcicsIERpYWdMb2dMZXZlbC5FUlJPUiksXG4gICAgICAgIHdhcm46IF9maWx0ZXJGdW5jKCd3YXJuJywgRGlhZ0xvZ0xldmVsLldBUk4pLFxuICAgICAgICBpbmZvOiBfZmlsdGVyRnVuYygnaW5mbycsIERpYWdMb2dMZXZlbC5JTkZPKSxcbiAgICAgICAgZGVidWc6IF9maWx0ZXJGdW5jKCdkZWJ1ZycsIERpYWdMb2dMZXZlbC5ERUJVRyksXG4gICAgICAgIHZlcmJvc2U6IF9maWx0ZXJGdW5jKCd2ZXJib3NlJywgRGlhZ0xvZ0xldmVsLlZFUkJPU0UpLFxuICAgIH07XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkJDIgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSQyID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG52YXIgQVBJX05BTUUkMiA9ICdkaWFnJztcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBpbnRlcm5hbFxuICogZGlhZ25vc3RpYyBBUElcbiAqL1xudmFyIERpYWdBUEkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCBjb25zdHJ1Y3RvclxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZnVuY3Rpb24gRGlhZ0FQSSgpIHtcbiAgICAgICAgZnVuY3Rpb24gX2xvZ1Byb3h5KGZ1bmNOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgbG9nZ2VyID0gZ2V0R2xvYmFsKCdkaWFnJyk7XG4gICAgICAgICAgICAgICAgLy8gc2hvcnRjdXQgaWYgbG9nZ2VyIG5vdCBzZXRcbiAgICAgICAgICAgICAgICBpZiAoIWxvZ2dlcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2dnZXJbZnVuY05hbWVdLmFwcGx5KGxvZ2dlciwgX19zcHJlYWRBcnJheSQyKFtdLCBfX3JlYWQkMihhcmdzKSwgZmFsc2UpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXNpbmcgc2VsZiBsb2NhbCB2YXJpYWJsZSBmb3IgbWluaWZpY2F0aW9uIHB1cnBvc2VzIGFzICd0aGlzJyBjYW5ub3QgYmUgbWluaWZpZWRcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICAvLyBEaWFnQVBJIHNwZWNpZmljIGZ1bmN0aW9uc1xuICAgICAgICB2YXIgc2V0TG9nZ2VyID0gZnVuY3Rpb24gKGxvZ2dlciwgb3B0aW9uc09yTG9nTGV2ZWwpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnNPckxvZ0xldmVsID09PSB2b2lkIDApIHsgb3B0aW9uc09yTG9nTGV2ZWwgPSB7IGxvZ0xldmVsOiBEaWFnTG9nTGV2ZWwuSU5GTyB9OyB9XG4gICAgICAgICAgICBpZiAobG9nZ2VyID09PSBzZWxmKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlcmUgaXNuJ3QgbXVjaCB3ZSBjYW4gZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAvLyBMb2dnaW5nIHRvIHRoZSBjb25zb2xlIG1pZ2h0IGJyZWFrIHRoZSB1c2VyIGFwcGxpY2F0aW9uLlxuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBsb2cgdG8gc2VsZi4gSWYgYSBsb2dnZXIgd2FzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBpdCB3aWxsIHJlY2VpdmUgdGhlIGxvZy5cbiAgICAgICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdDYW5ub3QgdXNlIGRpYWcgYXMgdGhlIGxvZ2dlciBmb3IgaXRzZWxmLiBQbGVhc2UgdXNlIGEgRGlhZ0xvZ2dlciBpbXBsZW1lbnRhdGlvbiBsaWtlIENvbnNvbGVEaWFnTG9nZ2VyIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uJyk7XG4gICAgICAgICAgICAgICAgc2VsZi5lcnJvcigoX2EgPSBlcnIuc3RhY2spICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNPckxvZ0xldmVsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNPckxvZ0xldmVsID0ge1xuICAgICAgICAgICAgICAgICAgICBsb2dMZXZlbDogb3B0aW9uc09yTG9nTGV2ZWwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBvbGRMb2dnZXIgPSBnZXRHbG9iYWwoJ2RpYWcnKTtcbiAgICAgICAgICAgIHZhciBuZXdMb2dnZXIgPSBjcmVhdGVMb2dMZXZlbERpYWdMb2dnZXIoKF9iID0gb3B0aW9uc09yTG9nTGV2ZWwubG9nTGV2ZWwpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IERpYWdMb2dMZXZlbC5JTkZPLCBsb2dnZXIpO1xuICAgICAgICAgICAgLy8gVGhlcmUgYWxyZWFkeSBpcyBhbiBsb2dnZXIgcmVnaXN0ZXJlZC4gV2UnbGwgbGV0IGl0IGtub3cgYmVmb3JlIG92ZXJ3cml0aW5nIGl0LlxuICAgICAgICAgICAgaWYgKG9sZExvZ2dlciAmJiAhb3B0aW9uc09yTG9nTGV2ZWwuc3VwcHJlc3NPdmVycmlkZU1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhY2sgPSAoX2MgPSBuZXcgRXJyb3IoKS5zdGFjaykgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogJzxmYWlsZWQgdG8gZ2VuZXJhdGUgc3RhY2t0cmFjZT4nO1xuICAgICAgICAgICAgICAgIG9sZExvZ2dlci53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBiZSBvdmVyd3JpdHRlbiBmcm9tIFwiICsgc3RhY2spO1xuICAgICAgICAgICAgICAgIG5ld0xvZ2dlci53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBvdmVyd3JpdGUgb25lIGFscmVhZHkgcmVnaXN0ZXJlZCBmcm9tIFwiICsgc3RhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyR2xvYmFsKCdkaWFnJywgbmV3TG9nZ2VyLCBzZWxmLCB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5zZXRMb2dnZXIgPSBzZXRMb2dnZXI7XG4gICAgICAgIHNlbGYuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHVucmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUkMiwgc2VsZik7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYuY3JlYXRlQ29tcG9uZW50TG9nZ2VyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGlhZ0NvbXBvbmVudExvZ2dlcihvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi52ZXJib3NlID0gX2xvZ1Byb3h5KCd2ZXJib3NlJyk7XG4gICAgICAgIHNlbGYuZGVidWcgPSBfbG9nUHJveHkoJ2RlYnVnJyk7XG4gICAgICAgIHNlbGYuaW5mbyA9IF9sb2dQcm94eSgnaW5mbycpO1xuICAgICAgICBzZWxmLndhcm4gPSBfbG9nUHJveHkoJ3dhcm4nKTtcbiAgICAgICAgc2VsZi5lcnJvciA9IF9sb2dQcm94eSgnZXJyb3InKTtcbiAgICB9XG4gICAgLyoqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBEaWFnQVBJIEFQSSAqL1xuICAgIERpYWdBUEkuaW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IERpYWdBUEkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gICAgfTtcbiAgICByZXR1cm4gRGlhZ0FQSTtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKiogR2V0IGEga2V5IHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgY29udGV4dCB2YWx1ZSAqL1xuZnVuY3Rpb24gY3JlYXRlQ29udGV4dEtleShkZXNjcmlwdGlvbikge1xuICAgIC8vIFRoZSBzcGVjaWZpY2F0aW9uIHN0YXRlcyB0aGF0IGZvciB0aGUgc2FtZSBpbnB1dCwgbXVsdGlwbGUgY2FsbHMgc2hvdWxkXG4gICAgLy8gcmV0dXJuIGRpZmZlcmVudCBrZXlzLiBEdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgSlMgZGVwZW5kZW5jeSBtYW5hZ2VtZW50XG4gICAgLy8gc3lzdGVtLCB0aGlzIGNyZWF0ZXMgcHJvYmxlbXMgd2hlcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2Ygc29tZSBwYWNrYWdlXG4gICAgLy8gY291bGQgaG9sZCBkaWZmZXJlbnQga2V5cyBmb3IgdGhlIHNhbWUgcHJvcGVydHkuXG4gICAgLy9cbiAgICAvLyBUaGVyZWZvcmUsIHdlIHVzZSBTeW1ib2wuZm9yIHdoaWNoIHJldHVybnMgdGhlIHNhbWUga2V5IGZvciB0aGUgc2FtZSBpbnB1dC5cbiAgICByZXR1cm4gU3ltYm9sLmZvcihkZXNjcmlwdGlvbik7XG59XG52YXIgQmFzZUNvbnRleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0IGEgbmV3IGNvbnRleHQgd2hpY2ggaW5oZXJpdHMgdmFsdWVzIGZyb20gYW4gb3B0aW9uYWwgcGFyZW50IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyZW50Q29udGV4dCBhIGNvbnRleHQgZnJvbSB3aGljaCB0byBpbmhlcml0IHZhbHVlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIEJhc2VDb250ZXh0KHBhcmVudENvbnRleHQpIHtcbiAgICAgICAgLy8gZm9yIG1pbmlmaWNhdGlvblxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHNlbGYuX2N1cnJlbnRDb250ZXh0ID0gcGFyZW50Q29udGV4dCA/IG5ldyBNYXAocGFyZW50Q29udGV4dCkgOiBuZXcgTWFwKCk7XG4gICAgICAgIHNlbGYuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBzZWxmLl9jdXJyZW50Q29udGV4dC5nZXQoa2V5KTsgfTtcbiAgICAgICAgc2VsZi5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBCYXNlQ29udGV4dChzZWxmLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50Q29udGV4dC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5kZWxldGVWYWx1ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IEJhc2VDb250ZXh0KHNlbGYuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRDb250ZXh0LmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBCYXNlQ29udGV4dDtcbn0oKSk7XG4vKiogVGhlIHJvb3QgY29udGV4dCBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhcmVudCBjb250ZXh0IHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIGNvbnRleHQgKi9cbnZhciBST09UX0NPTlRFWFQgPSBuZXcgQmFzZUNvbnRleHQoKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX3JlYWQkMSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5JDEgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbnZhciBOb29wQ29udGV4dE1hbmFnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9vcENvbnRleHRNYW5hZ2VyKCkge1xuICAgIH1cbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFJPT1RfQ09OVEVYVDtcbiAgICB9O1xuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uIChfY29udGV4dCwgZm4sIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAzOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAzXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZuLmNhbGwuYXBwbHkoZm4sIF9fc3ByZWFkQXJyYXkkMShbdGhpc0FyZ10sIF9fcmVhZCQxKGFyZ3MpLCBmYWxzZSkpO1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKF9jb250ZXh0LCB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9O1xuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICByZXR1cm4gTm9vcENvbnRleHRNYW5hZ2VyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX3JlYWQgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xudmFyIEFQSV9OQU1FJDEgPSAnY29udGV4dCc7XG52YXIgTk9PUF9DT05URVhUX01BTkFHRVIgPSBuZXcgTm9vcENvbnRleHRNYW5hZ2VyKCk7XG4vKipcbiAqIFNpbmdsZXRvbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIE9wZW5UZWxlbWV0cnkgQ29udGV4dCBBUElcbiAqL1xudmFyIENvbnRleHRBUEkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqIEVtcHR5IHByaXZhdGUgY29uc3RydWN0b3IgcHJldmVudHMgZW5kIHVzZXJzIGZyb20gY29uc3RydWN0aW5nIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBUEkgKi9cbiAgICBmdW5jdGlvbiBDb250ZXh0QVBJKCkge1xuICAgIH1cbiAgICAvKiogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIENvbnRleHQgQVBJICovXG4gICAgQ29udGV4dEFQSS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgQ29udGV4dEFQSSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY3VycmVudCBjb250ZXh0IG1hbmFnZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZXh0IG1hbmFnZXIgd2FzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLCBlbHNlIGZhbHNlXG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuc2V0R2xvYmFsQ29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbiAoY29udGV4dE1hbmFnZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FJDEsIGNvbnRleHRNYW5hZ2VyLCBEaWFnQVBJLmluc3RhbmNlKCkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvbnRleHRcbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmFjdGl2ZSgpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZSBhIGZ1bmN0aW9uIHdpdGggYW4gYWN0aXZlIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gYmUgYWN0aXZlIGR1cmluZyBmdW5jdGlvbiBleGVjdXRpb25cbiAgICAgKiBAcGFyYW0gZm4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBpbiBhIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gdGhpc0FyZyBvcHRpb25hbCByZWNlaXZlciB0byBiZSB1c2VkIGZvciBjYWxsaW5nIGZuXG4gICAgICogQHBhcmFtIGFyZ3Mgb3B0aW9uYWwgYXJndW1lbnRzIGZvcndhcmRlZCB0byBmblxuICAgICAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbiAoY29udGV4dCwgZm4sIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDM7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDNdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKSkud2l0aC5hcHBseShfYSwgX19zcHJlYWRBcnJheShbY29udGV4dCwgZm4sIHRoaXNBcmddLCBfX3JlYWQoYXJncyksIGZhbHNlKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGEgY29udGV4dCB0byBhIHRhcmdldCBmdW5jdGlvbiBvciBldmVudCBlbWl0dGVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGJpbmQgdG8gdGhlIGV2ZW50IGVtaXR0ZXIgb3IgZnVuY3Rpb24uIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IGZ1bmN0aW9uIG9yIGV2ZW50IGVtaXR0ZXIgdG8gYmluZFxuICAgICAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoY29udGV4dCwgdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmJpbmQoY29udGV4dCwgdGFyZ2V0KTtcbiAgICB9O1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLl9nZXRDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEdsb2JhbChBUElfTkFNRSQxKSB8fCBOT09QX0NPTlRFWFRfTUFOQUdFUjtcbiAgICB9O1xuICAgIC8qKiBEaXNhYmxlIGFuZCByZW1vdmUgdGhlIGdsb2JhbCBjb250ZXh0IG1hbmFnZXIgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmRpc2FibGUoKTtcbiAgICAgICAgdW5yZWdpc3Rlckdsb2JhbChBUElfTkFNRSQxLCBEaWFnQVBJLmluc3RhbmNlKCkpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbnRleHRBUEk7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFRyYWNlRmxhZ3M7XG4oZnVuY3Rpb24gKFRyYWNlRmxhZ3MpIHtcbiAgICAvKiogUmVwcmVzZW50cyBubyBmbGFnIHNldC4gKi9cbiAgICBUcmFjZUZsYWdzW1RyYWNlRmxhZ3NbXCJOT05FXCJdID0gMF0gPSBcIk5PTkVcIjtcbiAgICAvKiogQml0IHRvIHJlcHJlc2VudCB3aGV0aGVyIHRyYWNlIGlzIHNhbXBsZWQgaW4gdHJhY2UgZmxhZ3MuICovXG4gICAgVHJhY2VGbGFnc1tUcmFjZUZsYWdzW1wiU0FNUExFRFwiXSA9IDFdID0gXCJTQU1QTEVEXCI7XG59KShUcmFjZUZsYWdzIHx8IChUcmFjZUZsYWdzID0ge30pKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBJTlZBTElEX1NQQU5JRCA9ICcwMDAwMDAwMDAwMDAwMDAwJztcbnZhciBJTlZBTElEX1RSQUNFSUQgPSAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnO1xudmFyIElOVkFMSURfU1BBTl9DT05URVhUID0ge1xuICAgIHRyYWNlSWQ6IElOVkFMSURfVFJBQ0VJRCxcbiAgICBzcGFuSWQ6IElOVkFMSURfU1BBTklELFxuICAgIHRyYWNlRmxhZ3M6IFRyYWNlRmxhZ3MuTk9ORSxcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKipcbiAqIFRoZSBOb25SZWNvcmRpbmdTcGFuIGlzIHRoZSBkZWZhdWx0IHtAbGluayBTcGFufSB0aGF0IGlzIHVzZWQgd2hlbiBubyBTcGFuXG4gKiBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUuIEFsbCBvcGVyYXRpb25zIGFyZSBuby1vcCBpbmNsdWRpbmcgY29udGV4dFxuICogcHJvcGFnYXRpb24uXG4gKi9cbnZhciBOb25SZWNvcmRpbmdTcGFuID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vblJlY29yZGluZ1NwYW4oX3NwYW5Db250ZXh0KSB7XG4gICAgICAgIGlmIChfc3BhbkNvbnRleHQgPT09IHZvaWQgMCkgeyBfc3BhbkNvbnRleHQgPSBJTlZBTElEX1NQQU5fQ09OVEVYVDsgfVxuICAgICAgICB0aGlzLl9zcGFuQ29udGV4dCA9IF9zcGFuQ29udGV4dDtcbiAgICB9XG4gICAgLy8gUmV0dXJucyBhIFNwYW5Db250ZXh0LlxuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnNwYW5Db250ZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3BhbkNvbnRleHQ7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChfa2V5LCBfdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnNldEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoX2F0dHJpYnV0ZXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmFkZEV2ZW50ID0gZnVuY3Rpb24gKF9uYW1lLCBfYXR0cmlidXRlcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmFkZExpbmsgPSBmdW5jdGlvbiAoX2xpbmspIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5hZGRMaW5rcyA9IGZ1bmN0aW9uIChfbGlua3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnNldFN0YXR1cyA9IGZ1bmN0aW9uIChfc3RhdHVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS51cGRhdGVOYW1lID0gZnVuY3Rpb24gKF9uYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoX2VuZFRpbWUpIHsgfTtcbiAgICAvLyBpc1JlY29yZGluZyBhbHdheXMgcmV0dXJucyBmYWxzZSBmb3IgTm9uUmVjb3JkaW5nU3Bhbi5cbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5pc1JlY29yZGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5yZWNvcmRFeGNlcHRpb24gPSBmdW5jdGlvbiAoX2V4Y2VwdGlvbiwgX3RpbWUpIHsgfTtcbiAgICByZXR1cm4gTm9uUmVjb3JkaW5nU3Bhbjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKipcbiAqIHNwYW4ga2V5XG4gKi9cbnZhciBTUEFOX0tFWSA9IGNyZWF0ZUNvbnRleHRLZXkoJ09wZW5UZWxlbWV0cnkgQ29udGV4dCBLZXkgU1BBTicpO1xuLyoqXG4gKiBSZXR1cm4gdGhlIHNwYW4gaWYgb25lIGV4aXN0c1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gZ2V0IHNwYW4gZnJvbVxuICovXG5mdW5jdGlvbiBnZXRTcGFuKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dC5nZXRWYWx1ZShTUEFOX0tFWSkgfHwgdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBHZXRzIHRoZSBzcGFuIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCwgaWYgb25lIGV4aXN0cy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aXZlU3BhbigpIHtcbiAgICByZXR1cm4gZ2V0U3BhbihDb250ZXh0QVBJLmdldEluc3RhbmNlKCkuYWN0aXZlKCkpO1xufVxuLyoqXG4gKiBTZXQgdGhlIHNwYW4gb24gYSBjb250ZXh0XG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byB1c2UgYXMgcGFyZW50XG4gKiBAcGFyYW0gc3BhbiBzcGFuIHRvIHNldCBhY3RpdmVcbiAqL1xuZnVuY3Rpb24gc2V0U3Bhbihjb250ZXh0LCBzcGFuKSB7XG4gICAgcmV0dXJuIGNvbnRleHQuc2V0VmFsdWUoU1BBTl9LRVksIHNwYW4pO1xufVxuLyoqXG4gKiBSZW1vdmUgY3VycmVudCBzcGFuIHN0b3JlZCBpbiB0aGUgY29udGV4dFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gZGVsZXRlIHNwYW4gZnJvbVxuICovXG5mdW5jdGlvbiBkZWxldGVTcGFuKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dC5kZWxldGVWYWx1ZShTUEFOX0tFWSk7XG59XG4vKipcbiAqIFdyYXAgc3BhbiBjb250ZXh0IGluIGEgTm9vcFNwYW4gYW5kIHNldCBhcyBzcGFuIGluIGEgbmV3XG4gKiBjb250ZXh0XG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBzZXQgYWN0aXZlIHNwYW4gb25cbiAqIEBwYXJhbSBzcGFuQ29udGV4dCBzcGFuIGNvbnRleHQgdG8gYmUgd3JhcHBlZFxuICovXG5mdW5jdGlvbiBzZXRTcGFuQ29udGV4dChjb250ZXh0LCBzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiBzZXRTcGFuKGNvbnRleHQsIG5ldyBOb25SZWNvcmRpbmdTcGFuKHNwYW5Db250ZXh0KSk7XG59XG4vKipcbiAqIEdldCB0aGUgc3BhbiBjb250ZXh0IG9mIHRoZSBzcGFuIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGdldCB2YWx1ZXMgZnJvbVxuICovXG5mdW5jdGlvbiBnZXRTcGFuQ29udGV4dChjb250ZXh0KSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBnZXRTcGFuKGNvbnRleHQpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3BhbkNvbnRleHQoKTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBWQUxJRF9UUkFDRUlEX1JFR0VYID0gL14oWzAtOWEtZl17MzJ9KSQvaTtcbnZhciBWQUxJRF9TUEFOSURfUkVHRVggPSAvXlswLTlhLWZdezE2fSQvaTtcbmZ1bmN0aW9uIGlzVmFsaWRUcmFjZUlkKHRyYWNlSWQpIHtcbiAgICByZXR1cm4gVkFMSURfVFJBQ0VJRF9SRUdFWC50ZXN0KHRyYWNlSWQpICYmIHRyYWNlSWQgIT09IElOVkFMSURfVFJBQ0VJRDtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRTcGFuSWQoc3BhbklkKSB7XG4gICAgcmV0dXJuIFZBTElEX1NQQU5JRF9SRUdFWC50ZXN0KHNwYW5JZCkgJiYgc3BhbklkICE9PSBJTlZBTElEX1NQQU5JRDtcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoaXMge0BsaW5rIFNwYW5Db250ZXh0fSBpcyB2YWxpZC5cbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIHtAbGluayBTcGFuQ29udGV4dH0gaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGlzU3BhbkNvbnRleHRWYWxpZChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiAoaXNWYWxpZFRyYWNlSWQoc3BhbkNvbnRleHQudHJhY2VJZCkgJiYgaXNWYWxpZFNwYW5JZChzcGFuQ29udGV4dC5zcGFuSWQpKTtcbn1cbi8qKlxuICogV3JhcCB0aGUgZ2l2ZW4ge0BsaW5rIFNwYW5Db250ZXh0fSBpbiBhIG5ldyBub24tcmVjb3JkaW5nIHtAbGluayBTcGFufVxuICpcbiAqIEBwYXJhbSBzcGFuQ29udGV4dCBzcGFuIGNvbnRleHQgdG8gYmUgd3JhcHBlZFxuICogQHJldHVybnMgYSBuZXcgbm9uLXJlY29yZGluZyB7QGxpbmsgU3Bhbn0gd2l0aCB0aGUgcHJvdmlkZWQgY29udGV4dFxuICovXG5mdW5jdGlvbiB3cmFwU3BhbkNvbnRleHQoc3BhbkNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IE5vblJlY29yZGluZ1NwYW4oc3BhbkNvbnRleHQpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIGNvbnRleHRBcGkgPSBDb250ZXh0QVBJLmdldEluc3RhbmNlKCk7XG4vKipcbiAqIE5vLW9wIGltcGxlbWVudGF0aW9ucyBvZiB7QGxpbmsgVHJhY2VyfS5cbiAqL1xudmFyIE5vb3BUcmFjZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9vcFRyYWNlcigpIHtcbiAgICB9XG4gICAgLy8gc3RhcnRTcGFuIHN0YXJ0cyBhIG5vb3Agc3Bhbi5cbiAgICBOb29wVHJhY2VyLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgY29udGV4dCkge1xuICAgICAgICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSB7IGNvbnRleHQgPSBjb250ZXh0QXBpLmFjdGl2ZSgpOyB9XG4gICAgICAgIHZhciByb290ID0gQm9vbGVhbihvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucm9vdCk7XG4gICAgICAgIGlmIChyb290KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE5vblJlY29yZGluZ1NwYW4oKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50RnJvbUNvbnRleHQgPSBjb250ZXh0ICYmIGdldFNwYW5Db250ZXh0KGNvbnRleHQpO1xuICAgICAgICBpZiAoaXNTcGFuQ29udGV4dChwYXJlbnRGcm9tQ29udGV4dCkgJiZcbiAgICAgICAgICAgIGlzU3BhbkNvbnRleHRWYWxpZChwYXJlbnRGcm9tQ29udGV4dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbihwYXJlbnRGcm9tQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE5vblJlY29yZGluZ1NwYW4oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTm9vcFRyYWNlci5wcm90b3R5cGUuc3RhcnRBY3RpdmVTcGFuID0gZnVuY3Rpb24gKG5hbWUsIGFyZzIsIGFyZzMsIGFyZzQpIHtcbiAgICAgICAgdmFyIG9wdHM7XG4gICAgICAgIHZhciBjdHg7XG4gICAgICAgIHZhciBmbjtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgZm4gPSBhcmcyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIG9wdHMgPSBhcmcyO1xuICAgICAgICAgICAgZm4gPSBhcmczO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3B0cyA9IGFyZzI7XG4gICAgICAgICAgICBjdHggPSBhcmczO1xuICAgICAgICAgICAgZm4gPSBhcmc0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJlbnRDb250ZXh0ID0gY3R4ICE9PSBudWxsICYmIGN0eCAhPT0gdm9pZCAwID8gY3R4IDogY29udGV4dEFwaS5hY3RpdmUoKTtcbiAgICAgICAgdmFyIHNwYW4gPSB0aGlzLnN0YXJ0U3BhbihuYW1lLCBvcHRzLCBwYXJlbnRDb250ZXh0KTtcbiAgICAgICAgdmFyIGNvbnRleHRXaXRoU3BhblNldCA9IHNldFNwYW4ocGFyZW50Q29udGV4dCwgc3Bhbik7XG4gICAgICAgIHJldHVybiBjb250ZXh0QXBpLndpdGgoY29udGV4dFdpdGhTcGFuU2V0LCBmbiwgdW5kZWZpbmVkLCBzcGFuKTtcbiAgICB9O1xuICAgIHJldHVybiBOb29wVHJhY2VyO1xufSgpKTtcbmZ1bmN0aW9uIGlzU3BhbkNvbnRleHQoc3BhbkNvbnRleHQpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBzcGFuQ29udGV4dCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdHlwZW9mIHNwYW5Db250ZXh0WydzcGFuSWQnXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgdHlwZW9mIHNwYW5Db250ZXh0Wyd0cmFjZUlkJ10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgIHR5cGVvZiBzcGFuQ29udGV4dFsndHJhY2VGbGFncyddID09PSAnbnVtYmVyJyk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgTk9PUF9UUkFDRVIgPSBuZXcgTm9vcFRyYWNlcigpO1xuLyoqXG4gKiBQcm94eSB0cmFjZXIgcHJvdmlkZWQgYnkgdGhlIHByb3h5IHRyYWNlciBwcm92aWRlclxuICovXG52YXIgUHJveHlUcmFjZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUHJveHlUcmFjZXIoX3Byb3ZpZGVyLCBuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3Byb3ZpZGVyID0gX3Byb3ZpZGVyO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cbiAgICBQcm94eVRyYWNlci5wcm90b3R5cGUuc3RhcnRTcGFuID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRyYWNlcigpLnN0YXJ0U3BhbihuYW1lLCBvcHRpb25zLCBjb250ZXh0KTtcbiAgICB9O1xuICAgIFByb3h5VHJhY2VyLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbiAoX25hbWUsIF9vcHRpb25zLCBfY29udGV4dCwgX2ZuKSB7XG4gICAgICAgIHZhciB0cmFjZXIgPSB0aGlzLl9nZXRUcmFjZXIoKTtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkodHJhY2VyLnN0YXJ0QWN0aXZlU3BhbiwgdHJhY2VyLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogVHJ5IHRvIGdldCBhIHRyYWNlciBmcm9tIHRoZSBwcm94eSB0cmFjZXIgcHJvdmlkZXIuXG4gICAgICogSWYgdGhlIHByb3h5IHRyYWNlciBwcm92aWRlciBoYXMgbm8gZGVsZWdhdGUsIHJldHVybiBhIG5vb3AgdHJhY2VyLlxuICAgICAqL1xuICAgIFByb3h5VHJhY2VyLnByb3RvdHlwZS5fZ2V0VHJhY2VyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHJhY2VyID0gdGhpcy5fcHJvdmlkZXIuZ2V0RGVsZWdhdGVUcmFjZXIodGhpcy5uYW1lLCB0aGlzLnZlcnNpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIGlmICghdHJhY2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gTk9PUF9UUkFDRVI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSB0cmFjZXI7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICB9O1xuICAgIHJldHVybiBQcm94eVRyYWNlcjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSB7QGxpbmsgVHJhY2VyUHJvdmlkZXJ9IHdoaWNoIHJldHVybnMgYW4gaW1wb3RlbnRcbiAqIFRyYWNlciBmb3IgYWxsIGNhbGxzIHRvIGBnZXRUcmFjZXJgLlxuICpcbiAqIEFsbCBvcGVyYXRpb25zIGFyZSBuby1vcC5cbiAqL1xudmFyIE5vb3BUcmFjZXJQcm92aWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wVHJhY2VyUHJvdmlkZXIoKSB7XG4gICAgfVxuICAgIE5vb3BUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24gKF9uYW1lLCBfdmVyc2lvbiwgX29wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb29wVHJhY2VyKCk7XG4gICAgfTtcbiAgICByZXR1cm4gTm9vcFRyYWNlclByb3ZpZGVyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBOT09QX1RSQUNFUl9QUk9WSURFUiA9IG5ldyBOb29wVHJhY2VyUHJvdmlkZXIoKTtcbi8qKlxuICogVHJhY2VyIHByb3ZpZGVyIHdoaWNoIHByb3ZpZGVzIHtAbGluayBQcm94eVRyYWNlcn1zLlxuICpcbiAqIEJlZm9yZSBhIGRlbGVnYXRlIGlzIHNldCwgdHJhY2VycyBwcm92aWRlZCBhcmUgTm9PcC5cbiAqICAgV2hlbiBhIGRlbGVnYXRlIGlzIHNldCwgdHJhY2VzIGFyZSBwcm92aWRlZCBmcm9tIHRoZSBkZWxlZ2F0ZS5cbiAqICAgV2hlbiBhIGRlbGVnYXRlIGlzIHNldCBhZnRlciB0cmFjZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHByb3ZpZGVkLFxuICogICBhbGwgdHJhY2VycyBhbHJlYWR5IHByb3ZpZGVkIHdpbGwgdXNlIHRoZSBwcm92aWRlZCBkZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xudmFyIFByb3h5VHJhY2VyUHJvdmlkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUHJveHlUcmFjZXJQcm92aWRlcigpIHtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGEge0BsaW5rIFByb3h5VHJhY2VyfVxuICAgICAqL1xuICAgIFByb3h5VHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uIChuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLmdldERlbGVnYXRlVHJhY2VyKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBuZXcgUHJveHlUcmFjZXIodGhpcywgbmFtZSwgdmVyc2lvbiwgb3B0aW9ucykpO1xuICAgIH07XG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0RGVsZWdhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2RlbGVnYXRlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBOT09QX1RSQUNFUl9QUk9WSURFUjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFNldCB0aGUgZGVsZWdhdGUgdHJhY2VyIHByb3ZpZGVyXG4gICAgICovXG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuc2V0RGVsZWdhdGUgPSBmdW5jdGlvbiAoZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICB9O1xuICAgIFByb3h5VHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLmdldERlbGVnYXRlVHJhY2VyID0gZnVuY3Rpb24gKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5fZGVsZWdhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRUcmFjZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICByZXR1cm4gUHJveHlUcmFjZXJQcm92aWRlcjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgU3BhbktpbmQ7XG4oZnVuY3Rpb24gKFNwYW5LaW5kKSB7XG4gICAgLyoqIERlZmF1bHQgdmFsdWUuIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGlzIHVzZWQgaW50ZXJuYWxseS4gKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIklOVEVSTkFMXCJdID0gMF0gPSBcIklOVEVSTkFMXCI7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gY292ZXJzIHNlcnZlci1zaWRlIGhhbmRsaW5nIG9mIGFuIFJQQyBvciBvdGhlclxuICAgICAqIHJlbW90ZSByZXF1ZXN0LlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiU0VSVkVSXCJdID0gMV0gPSBcIlNFUlZFUlwiO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGNvdmVycyB0aGUgY2xpZW50LXNpZGUgd3JhcHBlciBhcm91bmQgYW4gUlBDIG9yXG4gICAgICogb3RoZXIgcmVtb3RlIHJlcXVlc3QuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJDTElFTlRcIl0gPSAyXSA9IFwiQ0xJRU5UXCI7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gZGVzY3JpYmVzIHByb2R1Y2VyIHNlbmRpbmcgYSBtZXNzYWdlIHRvIGFcbiAgICAgKiBicm9rZXIuIFVubGlrZSBjbGllbnQgYW5kIHNlcnZlciwgdGhlcmUgaXMgbm8gZGlyZWN0IGNyaXRpY2FsIHBhdGggbGF0ZW5jeVxuICAgICAqIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHByb2R1Y2VyIGFuZCBjb25zdW1lciBzcGFucy5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIlBST0RVQ0VSXCJdID0gM10gPSBcIlBST0RVQ0VSXCI7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gZGVzY3JpYmVzIGNvbnN1bWVyIHJlY2VpdmluZyBhIG1lc3NhZ2UgZnJvbSBhXG4gICAgICogYnJva2VyLiBVbmxpa2UgY2xpZW50IGFuZCBzZXJ2ZXIsIHRoZXJlIGlzIG5vIGRpcmVjdCBjcml0aWNhbCBwYXRoIGxhdGVuY3lcbiAgICAgKiByZWxhdGlvbnNoaXAgYmV0d2VlbiBwcm9kdWNlciBhbmQgY29uc3VtZXIgc3BhbnMuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJDT05TVU1FUlwiXSA9IDRdID0gXCJDT05TVU1FUlwiO1xufSkoU3BhbktpbmQgfHwgKFNwYW5LaW5kID0ge30pKTtcblxuLyoqXG4gKiBBbiBlbnVtZXJhdGlvbiBvZiBzdGF0dXMgY29kZXMuXG4gKi9cbnZhciBTcGFuU3RhdHVzQ29kZTtcbihmdW5jdGlvbiAoU3BhblN0YXR1c0NvZGUpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzdGF0dXMuXG4gICAgICovXG4gICAgU3BhblN0YXR1c0NvZGVbU3BhblN0YXR1c0NvZGVbXCJVTlNFVFwiXSA9IDBdID0gXCJVTlNFVFwiO1xuICAgIC8qKlxuICAgICAqIFRoZSBvcGVyYXRpb24gaGFzIGJlZW4gdmFsaWRhdGVkIGJ5IGFuIEFwcGxpY2F0aW9uIGRldmVsb3BlciBvclxuICAgICAqIE9wZXJhdG9yIHRvIGhhdmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAgICAgKi9cbiAgICBTcGFuU3RhdHVzQ29kZVtTcGFuU3RhdHVzQ29kZVtcIk9LXCJdID0gMV0gPSBcIk9LXCI7XG4gICAgLyoqXG4gICAgICogVGhlIG9wZXJhdGlvbiBjb250YWlucyBhbiBlcnJvci5cbiAgICAgKi9cbiAgICBTcGFuU3RhdHVzQ29kZVtTcGFuU3RhdHVzQ29kZVtcIkVSUk9SXCJdID0gMl0gPSBcIkVSUk9SXCI7XG59KShTcGFuU3RhdHVzQ29kZSB8fCAoU3BhblN0YXR1c0NvZGUgPSB7fSkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gU3BsaXQgbW9kdWxlLWxldmVsIHZhcmlhYmxlIGRlZmluaXRpb24gaW50byBzZXBhcmF0ZSBmaWxlcyB0byBhbGxvd1xuLy8gdHJlZS1zaGFraW5nIG9uIGVhY2ggYXBpIGluc3RhbmNlLlxuLyoqIEVudHJ5cG9pbnQgZm9yIGNvbnRleHQgQVBJICovXG52YXIgY29udGV4dCA9IENvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBBUElfTkFNRSA9ICd0cmFjZSc7XG4vKipcbiAqIFNpbmdsZXRvbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIE9wZW5UZWxlbWV0cnkgVHJhY2luZyBBUElcbiAqL1xudmFyIFRyYWNlQVBJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKiBFbXB0eSBwcml2YXRlIGNvbnN0cnVjdG9yIHByZXZlbnRzIGVuZCB1c2VycyBmcm9tIGNvbnN0cnVjdGluZyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQVBJICovXG4gICAgZnVuY3Rpb24gVHJhY2VBUEkoKSB7XG4gICAgICAgIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgUHJveHlUcmFjZXJQcm92aWRlcigpO1xuICAgICAgICB0aGlzLndyYXBTcGFuQ29udGV4dCA9IHdyYXBTcGFuQ29udGV4dDtcbiAgICAgICAgdGhpcy5pc1NwYW5Db250ZXh0VmFsaWQgPSBpc1NwYW5Db250ZXh0VmFsaWQ7XG4gICAgICAgIHRoaXMuZGVsZXRlU3BhbiA9IGRlbGV0ZVNwYW47XG4gICAgICAgIHRoaXMuZ2V0U3BhbiA9IGdldFNwYW47XG4gICAgICAgIHRoaXMuZ2V0QWN0aXZlU3BhbiA9IGdldEFjdGl2ZVNwYW47XG4gICAgICAgIHRoaXMuZ2V0U3BhbkNvbnRleHQgPSBnZXRTcGFuQ29udGV4dDtcbiAgICAgICAgdGhpcy5zZXRTcGFuID0gc2V0U3BhbjtcbiAgICAgICAgdGhpcy5zZXRTcGFuQ29udGV4dCA9IHNldFNwYW5Db250ZXh0O1xuICAgIH1cbiAgICAvKiogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIFRyYWNlIEFQSSAqL1xuICAgIFRyYWNlQVBJLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBUcmFjZUFQSSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY3VycmVudCBnbG9iYWwgdHJhY2VyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdHJhY2VyIHByb3ZpZGVyIHdhcyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCwgZWxzZSBmYWxzZVxuICAgICAqL1xuICAgIFRyYWNlQVBJLnByb3RvdHlwZS5zZXRHbG9iYWxUcmFjZXJQcm92aWRlciA9IGZ1bmN0aW9uIChwcm92aWRlcikge1xuICAgICAgICB2YXIgc3VjY2VzcyA9IHJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FLCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLCBEaWFnQVBJLmluc3RhbmNlKCkpO1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlci5zZXREZWxlZ2F0ZShwcm92aWRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBnbG9iYWwgdHJhY2VyIHByb3ZpZGVyLlxuICAgICAqL1xuICAgIFRyYWNlQVBJLnByb3RvdHlwZS5nZXRUcmFjZXJQcm92aWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEdsb2JhbChBUElfTkFNRSkgfHwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlcjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB0cmFjZXIgZnJvbSB0aGUgZ2xvYmFsIHRyYWNlciBwcm92aWRlci5cbiAgICAgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24gKG5hbWUsIHZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhY2VyUHJvdmlkZXIoKS5nZXRUcmFjZXIobmFtZSwgdmVyc2lvbik7XG4gICAgfTtcbiAgICAvKiogUmVtb3ZlIHRoZSBnbG9iYWwgdHJhY2VyIHByb3ZpZGVyICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHVucmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgICAgIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgUHJveHlUcmFjZXJQcm92aWRlcigpO1xuICAgIH07XG4gICAgcmV0dXJuIFRyYWNlQVBJO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIFNwbGl0IG1vZHVsZS1sZXZlbCB2YXJpYWJsZSBkZWZpbml0aW9uIGludG8gc2VwYXJhdGUgZmlsZXMgdG8gYWxsb3dcbi8vIHRyZWUtc2hha2luZyBvbiBlYWNoIGFwaSBpbnN0YW5jZS5cbi8qKiBFbnRyeXBvaW50IGZvciB0cmFjZSBBUEkgKi9cbnZhciB0cmFjZSA9IFRyYWNlQVBJLmdldEluc3RhbmNlKCk7XG5cbmNvbnN0IGNyZWF0ZUNERVNwYW4gPSBhc3luYyAoY2RlQ29ubiwgZGF0YSwgb3BlcmF0aW9uKSA9PiB7XG4gIGNvbnN0IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIik7XG4gIGNvbnN0IHBhcmVudENvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICBjb25zdCBzcGFuID0gdHJhY2VyLnN0YXJ0U3BhbihcbiAgICBgY2RlLiR7ZGF0YS50eXBlfWAsXG4gICAge1xuICAgICAga2luZDogU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBcIm1lc3NhZ2UudHlwZVwiOiBkYXRhLnR5cGUsXG4gICAgICAgIC4uLmNkZUNvbm4udHJhY2luZ0NvbnRleHQgJiYge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC52ZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LnJlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LnJlZmVycmVyXG4gICAgICAgIH0sXG4gICAgICAgIFwiY2RlLm1lc3NhZ2UudHlwZVwiOiBkYXRhLnR5cGUsXG4gICAgICAgIFwiY2RlLm1lc3NhZ2UucGF5bG9hZFwiOiBKU09OLnN0cmluZ2lmeShkYXRhLnBheWxvYWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBwYXJlbnRDb250ZXh0XG4gICk7XG4gIHJldHVybiBjb250ZXh0LndpdGgodHJhY2Uuc2V0U3BhbihwYXJlbnRDb250ZXh0LCBzcGFuKSwgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcGVyYXRpb24oKTtcbiAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICBtZXNzYWdlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzcGFuLmVuZCgpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgY3JlYXRlVHJhY2tpbmdTcGFuID0gYXN5bmMgKG9wdGlvbnMsIG9wZXJhdGlvbikgPT4ge1xuICBjb25zdCB0cmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICBjb25zdCBwYXJlbnRDb250ZXh0ID0gY29udGV4dC5hY3RpdmUoKTtcbiAgY29uc3Qgc3BhbiA9IHRyYWNlci5zdGFydFNwYW4oXG4gICAgYGZvcm0uJHtvcHRpb25zLnNwYW5OYW1lfWAsXG4gICAge1xuICAgICAga2luZDogU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IG9wdGlvbnMuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogb3B0aW9ucy5kZXZpY2VUb2tlbixcbiAgICAgICAgXCJvanMuZm9ybUlkXCI6IG9wdGlvbnMuZm9ybUlkLFxuICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IG9wdGlvbnMucmVsZWFzZVZlcnNpb24sXG4gICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IG9wdGlvbnMuYmFzZVVybCxcbiAgICAgICAgXCJvanMucmVmZXJyZXJcIjogb3B0aW9ucy5yZWZlcnJlcixcbiAgICAgICAgLi4ub3B0aW9ucy5wYXltZW50Um91dGVJZCAmJiB7IFwicGF5bWVudC5yb3V0ZV9pZFwiOiBvcHRpb25zLnBheW1lbnRSb3V0ZUlkIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcmVudENvbnRleHRcbiAgKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcGVyYXRpb24oKTtcbiAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZVxuICAgIH0pO1xuICAgIHRocm93IGVycm9yO1xuICB9IGZpbmFsbHkge1xuICAgIHNwYW4uZW5kKCk7XG4gIH1cbn07XG5cbmNsYXNzIENkZUVycm9yIGV4dGVuZHMgQ3VzdG9tRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgIGNvbnN0IGZyaWVuZGx5TWVzc2FnZSA9IGAke3Jlc3BvbnNlLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihmcmllbmRseU1lc3NhZ2UpO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgcXVlcnlDREUgPSBhc3luYyAoY2RlQ29ubiwgZGF0YSwgcmVzcG9uc2VTY2hlbWEsIHRyYWNraW5nS2V5KSA9PiB7XG4gIHJldHVybiBjcmVhdGVDREVTcGFuKGNkZUNvbm4sIGRhdGEsIGFzeW5jICgpID0+IHtcbiAgICBpZiAodHJhY2tpbmdLZXkpIHtcbiAgICAgIHRyYWNrKHRyYWNraW5nS2V5LCB7XG4gICAgICAgIC4uLmRhdGFcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNkZUNvbm4uc2VuZChkYXRhKTtcbiAgICBpZiAoaXNDREVSZXNwb25zZUVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgY29uc3QgY29ubmVjdGlvbiA9IG5hdmlnYXRvci5jb25uZWN0aW9uO1xuICAgICAgdHJhY2soXCJjZGVfcmVzcG9uc2VfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcl9tZXNzYWdlOiByZXNwb25zZS5tZXNzYWdlLFxuICAgICAgICBtZXNzYWdlX3R5cGU6IGRhdGEudHlwZSxcbiAgICAgICAgdXNlcl9hZ2VudDogbmF2aWdhdG9yLnVzZXJBZ2VudCxcbiAgICAgICAgb25saW5lOiBuYXZpZ2F0b3Iub25MaW5lLFxuICAgICAgICBoYXNfZm9jdXM6IGRvY3VtZW50Lmhhc0ZvY3VzKCksXG4gICAgICAgIGhyZWY6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgICBkb2N1bWVudF92aXNpYmlsaXR5X3N0YXRlOiBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUsXG4gICAgICAgIGNvbm5lY3Rpb25fZG93bmxpbms6IGNvbm5lY3Rpb24/LmRvd25saW5rLFxuICAgICAgICBjb25uZWN0aW9uX2VmZmVjdGl2ZV90eXBlOiBjb25uZWN0aW9uPy5lZmZlY3RpdmVUeXBlLFxuICAgICAgICBjb25uZWN0aW9uX3J0dDogY29ubmVjdGlvbj8ucnR0LFxuICAgICAgICBjb25uZWN0aW9uX3NhdmVfZGF0YTogY29ubmVjdGlvbj8uc2F2ZURhdGFcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IENkZUVycm9yKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgaWYgKCFjaGVja0lmQ29uZm9ybXNUb1NjaGVtYShyZXNwb25zZSwgcmVzcG9uc2VTY2hlbWEpKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZVNjaGVtYS5zYWZlUGFyc2UocmVzcG9uc2UpO1xuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpO1xuICAgICAgY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgcmVzcG9uc2VTY2hlbWEsIFwiQWN0dWFsOlwiLCByZXNwb25zZSk7XG4gICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgfVxuICAgIGlmICh0cmFja2luZ0tleSkge1xuICAgICAgdHJhY2sodHJhY2tpbmdLZXksIHtcbiAgICAgICAgLi4ucmVzcG9uc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0pO1xufTtcbmNvbnN0IGNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hID0gKHZhbHVlLCBzY2hlbWEpID0+IHtcbiAgcmV0dXJuIHNjaGVtYS5zYWZlUGFyc2UodmFsdWUpLnN1Y2Nlc3M7XG59O1xuY29uc3QgaXNDREVSZXNwb25zZUVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gIHJldHVybiBDREVSZXNwb25zZUVycm9yLnNhZmVQYXJzZShyZXNwb25zZSkuc3VjY2Vzcztcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXcgPSBhc3luYyAoY2RlQ29ubiwgcmVxdWVzdCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHJlcXVlc3QgfSwgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IGdldFByZWZpbGwgPSBhc3luYyAoY2RlQ29ubikgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIFBheW1lbnRGb3JtUHJlZmlsbCk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJ2Ml9zdGFydF9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZCB9LFxuICAgIFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcInN0YXJ0X3BheW1lbnRfZmxvd1wiXG4gICk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvckNDID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZCB9LFxuICAgIFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlLFxuICAgIFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiXG4gICk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvclBSID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgdHJhY2soXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHtcbiAgICAuLi5wYXlsb2FkXG4gIH0pO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gIHRyYWNrKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wcl9yZXN1bHRcIiwge1xuICAgIC4uLnJlc3VsdFxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5jb25zdCBjb25maXJtUGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZCB9LFxuICAgIENvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlLFxuICAgIFwiY29uZmlybV9wYXltZW50X2Zsb3dcIlxuICApO1xufTtcbmNvbnN0IGZpbmFsaXplU2V0dXBQYXltZW50TWV0aG9kID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQgfSxcbiAgICBTZXR1cENoZWNrb3V0UmVzcG9uc2UsXG4gICAgXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiXG4gICk7XG59O1xuY29uc3QgY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCIsIHBheWxvYWQgfSxcbiAgICBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlLFxuICAgIFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCJcbiAgKTtcbn07XG5jb25zdCBnZXRDaGVja291dFZhbHVlID0gYXN5bmMgKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBwcm9tb0NvZGUpID0+IHtcbiAgY29uc3QgY2hlY2tvdXRQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3KGNkZUNvbm4sIHtcbiAgICBzZWN1cmVfdG9rZW46IHNlY3VyZVRva2VuLFxuICAgIHByb21vdGlvbl9jb2RlOiBwcm9tb0NvZGVcbiAgfSk7XG4gIGNvbnN0IGN1cnJlbmNpZXMgPSBuZXcgU2V0KGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYuY3VycmVuY3kpKTtcbiAgaWYgKGN1cnJlbmNpZXMuc2l6ZSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke2N1cnJlbmNpZXMuc2l6ZX1gKTtcbiAgfVxuICBjb25zdCBjdXJyZW5jeSA9IGN1cnJlbmNpZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCI7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBzdW0oY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeSxcbiAgICBhbW91bnRBdG9tXG4gIH07XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50ID0gYXN5bmMgKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBpc1NldHVwTW9kZSwgcHJvbW9Db2RlKSA9PiB7XG4gIGlmIChpc1NldHVwTW9kZSkge1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIH0gZWxzZSB7XG4gICAgcHJvbW9Db2RlID0gIXByb21vQ29kZSA/IHZvaWQgMCA6IHByb21vQ29kZTtcbiAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKSAmJiAhcHJvbW9Db2RlKSB7XG4gICAgICBwcm9tb0NvZGUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwicHJvbW9Db2RlXCIpO1xuICAgIH1cbiAgICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFZhbHVlKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBwcm9tb0NvZGUpO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGNoZWNrb3V0UHJldmlldy5hbW91bnRBdG9tLCBjdXJyZW5jeTogY2hlY2tvdXRQcmV2aWV3LmN1cnJlbmN5IH07XG4gIH1cbn07XG5jb25zdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zID0gYXN5bmMgKGFsbENkZUNvbm5lY3Rpb25zLCBwYXlsb2FkKSA9PiB7XG4gIGlmIChhbGxDZGVDb25uZWN0aW9ucy5zaXplID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oYWxsQ2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpLm1hcChcbiAgICAgIChjZGVDb25uKSA9PiBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkIH0sIFRva2VuaXplQ2FyZFJlc3BvbnNlKVxuICAgIClcbiAgKTtcbiAgcmV0dXJuIHJlc3BvbnNlcztcbn07XG5jb25zdCBjaGVja291dENhcmRFbGVtZW50cyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQgfSxcbiAgICBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSxcbiAgICBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIlxuICApO1xufTtcbmNvbnN0IHNldHVwQ2hlY2tvdXQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInNldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQgfSwgU2V0dXBDaGVja291dFJlc3BvbnNlLCBcInNldHVwX2NoZWNrb3V0XCIpO1xufTtcbmNvbnN0IHBlcmZvcm1DaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSwgXCJwZXJmb3JtX2NoZWNrb3V0XCIpO1xufTtcbmNvbnN0IENERV9QT0xMSU5HX0lOVEVSVkFMID0gMWUzO1xuY29uc3QgcGluZ0NkZUZvclN0YXR1cyA9IGFzeW5jIChpZnJhbWUsIGNoaWxkT3JpZ2luLCB0eXBlLCByZXNwb25zZU1vZGVsKSA9PiB7XG4gIGNvbnNvbGUubG9nKGNoaWxkT3JpZ2luKTtcbiAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWUsXG4gICAgZGVidWc6IHRydWUsXG4gICAgdGltZW91dDogQ0RFX1BPTExJTkdfSU5URVJWQUwsXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pO1xuICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBxdWVyeUNERShjb25uZWN0aW9uT2JqLCB7IHR5cGUgfSwgcmVzcG9uc2VNb2RlbCk7XG4gIGNvbnNvbGUubG9nKFwi8J+foiBDREUgY29ubmVjdGlvbiBzdWNjZXNzZnVsISBTdG9wcGluZyBwb2xsaW5nLi4uIFJlc3VsdDpcIiwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5jb25zdCBwcmVwYXJlUGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZCB9LFxuICAgIFByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLFxuICAgIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuICApO1xufTtcbmNvbnN0IHNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZSA9IGFzeW5jIChjZGVDb25uLCBlcnJvck1lc3NhZ2UpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkID0geyBtZXNzYWdlOiBlcnJvck1lc3NhZ2UgfTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHF1ZXJ5Q0RFKFxuICAgICAgY2RlQ29ubixcbiAgICAgIHsgdHlwZTogXCJnZXRfc3RhbmRhcmRpemVkX2Vycm9yX2NvZGVcIiwgcGF5bG9hZCB9LFxuICAgICAgQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2VcbiAgICApO1xuICAgIHJldHVybiByZXNwb25zZS5lcnJvcl9jb2RlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbY2RlLWNsaWVudF0gRXJyb3IgZHVyaW5nIGdldFN0YW5kYXJkaXplZEVycm9yQ29kZTpcIiwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgcmV0dXJuIFwiUEFZTUVOVF9GQUlMRURfR0VORVJJQ1wiO1xuICB9XG59O1xuY29uc3Qgc2V0VXNlckRldmljZVRva2VuID0gYXN5bmMgKGNkZUNvbm4sIGRldmljZVRva2VuKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJzZXRfdXNlcl9kZXZpY2VfdG9rZW5cIiwgcGF5bG9hZDogeyBkZXZpY2VfdG9rZW46IGRldmljZVRva2VuIH0gfSxcbiAgICBTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZVxuICApO1xufTtcblxuY29uc3QgY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdCA9IGFzeW5jIChvYmopID0+IHtcbiAgaWYgKHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgfHwgIW9iaikgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0IHBpbmcgPSB7IHR5cGU6IFwicGluZ1wiIH07XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb2JqLnNlbmQocGluZyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIENERSBjb25uZWN0aW9uIGNoZWNrOmAsIGUpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGlzUmVzdWx0VmFsaWQgPSAob2JqLCBpc1ZhbGlkKSA9PiB7XG4gIHJldHVybiAhIW9iaiAmJiBpc1ZhbGlkO1xufTtcblxuY29uc3QgRlJBTUVfQkFTRV9VUkwgPSBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCI7XG5cbi8vIFRoZXNlIHZhbHVlcyBzaG91bGQgTkVWRVIgY2hhbmdlLiBUaGUgdmFsdWVzIGFyZSBwcmVjaXNlbHkgZm9yXG4vLyBnZW5lcmF0aW5nIFVMSURzLlxuY29uc3QgRU5DT0RJTkcgPSBcIjAxMjM0NTY3ODlBQkNERUZHSEpLTU5QUVJTVFZXWFlaXCI7IC8vIENyb2NrZm9yZCdzIEJhc2UzMlxuY29uc3QgRU5DT0RJTkdfTEVOID0gMzI7IC8vIGZyb20gRU5DT0RJTkcubGVuZ3RoO1xuY29uc3QgUkFORE9NX0xFTiA9IDE2O1xuY29uc3QgVElNRV9MRU4gPSAxMDtcbmNvbnN0IFRJTUVfTUFYID0gMjgxNDc0OTc2NzEwNjU1OyAvLyBmcm9tIE1hdGgucG93KDIsIDQ4KSAtIDE7XG5cbnZhciBVTElERXJyb3JDb2RlO1xuKGZ1bmN0aW9uIChVTElERXJyb3JDb2RlKSB7XG4gICAgVUxJREVycm9yQ29kZVtcIkJhc2UzMkluY29ycmVjdEVuY29kaW5nXCJdID0gXCJCMzJfRU5DX0lOVkFMSURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiRGVjb2RlVGltZUludmFsaWRDaGFyYWN0ZXJcIl0gPSBcIkRFQ19USU1FX0NIQVJcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiRGVjb2RlVGltZVZhbHVlTWFsZm9ybWVkXCJdID0gXCJERUNfVElNRV9NQUxGT1JNRURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiRW5jb2RlVGltZU5lZ2F0aXZlXCJdID0gXCJFTkNfVElNRV9ORUdcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiRW5jb2RlVGltZVNpemVFeGNlZWRlZFwiXSA9IFwiRU5DX1RJTUVfU0laRV9FWENFRURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkXCJdID0gXCJFTkNfVElNRV9NQUxGT1JNRURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiUFJOR0RldGVjdEZhaWx1cmVcIl0gPSBcIlBSTkdfREVURUNUXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlVMSURJbnZhbGlkXCJdID0gXCJVTElEX0lOVkFMSURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiVW5leHBlY3RlZFwiXSA9IFwiVU5FWFBFQ1RFRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJVVUlESW52YWxpZFwiXSA9IFwiVVVJRF9JTlZBTElEXCI7XG59KShVTElERXJyb3JDb2RlIHx8IChVTElERXJyb3JDb2RlID0ge30pKTtcbmNsYXNzIFVMSURFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvckNvZGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIoYCR7bWVzc2FnZX0gKCR7ZXJyb3JDb2RlfSlgKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJVTElERXJyb3JcIjtcbiAgICAgICAgdGhpcy5jb2RlID0gZXJyb3JDb2RlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmFuZG9tQ2hhcihwcm5nKSB7XG4gICAgLy8gQ3VycmVudGx5IFBSTkdzIGdlbmVyYXRlIGZyYWN0aW9ucyBmcm9tIDAgdG8gX2xlc3MgdGhhbl8gMSwgc28gbm8gXCIlXCIgaXMgbmVjZXNzYXJ5LlxuICAgIC8vIEhvd2V2ZXIsIGp1c3QgaW4gY2FzZSBhIGZ1dHVyZSBQUk5HIGNhbiBnZW5lcmF0ZSAxLFxuICAgIC8vIHdlIGFyZSBhcHBseWluZyBcIiUgRU5DT0RJTkcgTEVOXCIgdG8gd3JhcCBiYWNrIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXJcbiAgICBjb25zdCByYW5kb21Qb3NpdGlvbiA9IE1hdGguZmxvb3IocHJuZygpICogRU5DT0RJTkdfTEVOKSAlIEVOQ09ESU5HX0xFTjtcbiAgICByZXR1cm4gRU5DT0RJTkcuY2hhckF0KHJhbmRvbVBvc2l0aW9uKTtcbn1cbi8qKlxuICogRGV0ZWN0IHRoZSBiZXN0IFBSTkcgKHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcilcbiAqIEBwYXJhbSByb290IFRoZSByb290IHRvIGNoZWNrIGZyb20gKGdsb2JhbC93aW5kb3cpXG4gKiBAcmV0dXJucyBUaGUgUFJORyBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBkZXRlY3RQUk5HKHJvb3QpIHtcbiAgICBjb25zdCByb290TG9va3VwID0gZGV0ZWN0Um9vdCgpO1xuICAgIGNvbnN0IGdsb2JhbENyeXB0byA9IChyb290TG9va3VwICYmIChyb290TG9va3VwLmNyeXB0byB8fCByb290TG9va3VwLm1zQ3J5cHRvKSkgfHxcbiAgICAgICAgKG51bGwpO1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsQ3J5cHRvPy5nZXRSYW5kb21WYWx1ZXMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMSk7XG4gICAgICAgICAgICBnbG9iYWxDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGJ1ZmZlcik7XG4gICAgICAgICAgICByZXR1cm4gYnVmZmVyWzBdIC8gMHhmZjtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGdsb2JhbENyeXB0bz8ucmFuZG9tQnl0ZXMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gKCkgPT4gZ2xvYmFsQ3J5cHRvLnJhbmRvbUJ5dGVzKDEpLnJlYWRVSW50OCgpIC8gMHhmZjtcbiAgICB9XG4gICAgZWxzZSA7XG4gICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLlBSTkdEZXRlY3RGYWlsdXJlLCBcIkZhaWxlZCB0byBmaW5kIGEgcmVsaWFibGUgUFJOR1wiKTtcbn1cbmZ1bmN0aW9uIGRldGVjdFJvb3QoKSB7XG4gICAgaWYgKGluV2ViV29ya2VyKCkpXG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gZ2xvYmFsVGhpcztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBlbmNvZGVSYW5kb20obGVuLCBwcm5nKSB7XG4gICAgbGV0IHN0ciA9IFwiXCI7XG4gICAgZm9yICg7IGxlbiA+IDA7IGxlbi0tKSB7XG4gICAgICAgIHN0ciA9IHJhbmRvbUNoYXIocHJuZykgKyBzdHI7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG4vKipcbiAqIEVuY29kZSB0aGUgdGltZSBwb3J0aW9uIG9mIGEgVUxJRFxuICogQHBhcmFtIG5vdyBUaGUgY3VycmVudCB0aW1lc3RhbXBcbiAqIEBwYXJhbSBsZW4gTGVuZ3RoIHRvIGdlbmVyYXRlXG4gKiBAcmV0dXJucyBUaGUgZW5jb2RlZCB0aW1lXG4gKi9cbmZ1bmN0aW9uIGVuY29kZVRpbWUobm93LCBsZW4gPSBUSU1FX0xFTikge1xuICAgIGlmIChpc05hTihub3cpKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYSBudW1iZXI6ICR7bm93fWApO1xuICAgIH1cbiAgICBlbHNlIGlmIChub3cgPiBUSU1FX01BWCkge1xuICAgICAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuRW5jb2RlVGltZVNpemVFeGNlZWRlZCwgYENhbm5vdCBlbmNvZGUgYSB0aW1lIGxhcmdlciB0aGFuICR7VElNRV9NQVh9OiAke25vd31gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm93IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuRW5jb2RlVGltZU5lZ2F0aXZlLCBgVGltZSBtdXN0IGJlIHBvc2l0aXZlOiAke25vd31gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoTnVtYmVyLmlzSW50ZWdlcihub3cpID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGFuIGludGVnZXI6ICR7bm93fWApO1xuICAgIH1cbiAgICBsZXQgbW9kLCBzdHIgPSBcIlwiO1xuICAgIGZvciAobGV0IGN1cnJlbnRMZW4gPSBsZW47IGN1cnJlbnRMZW4gPiAwOyBjdXJyZW50TGVuLS0pIHtcbiAgICAgICAgbW9kID0gbm93ICUgRU5DT0RJTkdfTEVOO1xuICAgICAgICBzdHIgPSBFTkNPRElORy5jaGFyQXQobW9kKSArIHN0cjtcbiAgICAgICAgbm93ID0gKG5vdyAtIG1vZCkgLyBFTkNPRElOR19MRU47XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5mdW5jdGlvbiBpbldlYldvcmtlcigpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGU7XG59XG4vKipcbiAqIEdlbmVyYXRlIGEgVUxJRFxuICogQHBhcmFtIHNlZWRUaW1lIE9wdGlvbmFsIHRpbWUgc2VlZFxuICogQHBhcmFtIHBybmcgT3B0aW9uYWwgUFJORyBmdW5jdGlvblxuICogQHJldHVybnMgQSBVTElEIHN0cmluZ1xuICogQGV4YW1wbGVcbiAqICB1bGlkKCk7IC8vIFwiMDFITlpYRDA3TTVDRU41WEE2NkVNWlNSWldcIlxuICovXG5mdW5jdGlvbiB1bGlkKHNlZWRUaW1lLCBwcm5nKSB7XG4gICAgY29uc3QgY3VycmVudFBSTkcgPSBkZXRlY3RQUk5HKCk7XG4gICAgY29uc3Qgc2VlZCA9IERhdGUubm93KCkgO1xuICAgIHJldHVybiBlbmNvZGVUaW1lKHNlZWQsIFRJTUVfTEVOKSArIGVuY29kZVJhbmRvbShSQU5ET01fTEVOLCBjdXJyZW50UFJORyk7XG59XG5cbmNvbnN0IENPT0tJRV9OQU1FID0gXCJvcF9hbmFseXRpY3NfZGV2aWNlX3Rva2VuXCI7XG5jb25zdCBnZXREZXZpY2VUb2tlbiA9ICgpID0+IHtcbiAgY29uc3QgZXhpc3RpbmdDb29raWUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpLmZpbmQoKGNvb2tpZSkgPT4gY29va2llLmluY2x1ZGVzKENPT0tJRV9OQU1FKSk7XG4gIGlmIChleGlzdGluZ0Nvb2tpZSkge1xuICAgIHJldHVybiBleGlzdGluZ0Nvb2tpZS5zcGxpdChcIj1cIilbMV07XG4gIH1cbiAgY29uc3QgdG9rZW4gPSB1bGlkKCk7XG4gIHNldERldmljZVRva2VuKHRva2VuKTtcbiAgcmV0dXJuIHRva2VuO1xufTtcbmNvbnN0IHNldERldmljZVRva2VuID0gKHRva2VuKSA9PiB7XG4gIGNvbnN0IG9uZVllYXJGcm9tTm93ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gIG9uZVllYXJGcm9tTm93LnNldEZ1bGxZZWFyKG9uZVllYXJGcm9tTm93LmdldEZ1bGxZZWFyKCkgKyAxKTtcbiAgZG9jdW1lbnQuY29va2llID0gYCR7Q09PS0lFX05BTUV9PSR7dG9rZW59OyBwYXRoPS87IGV4cGlyZXM9JHtvbmVZZWFyRnJvbU5vdy50b1VUQ1N0cmluZygpfWA7XG59O1xuXG5jb25zdCBleHRyYWN0SXNzdWVzUGVyRmllbGQgPSAoZXJyb3IpID0+IHtcbiAgY29uc3QgaXNzdWVzUGVyRmllbGQgPSB7fTtcbiAgT2JqZWN0LmVudHJpZXMoZXJyb3IpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBGaWVsZE5hbWVFbnVtLnBhcnNlKGtleSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLl9lcnJvcnMpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZS5fZXJyb3JzO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc3N1ZXNQZXJGaWVsZDtcbn07XG5cbmNvbnN0IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSA9IChmb3JtRGl2LCBpbml0aWFsRGljdCkgPT4ge1xuICBjb25zdCBpbmNsdWRlZElucHV0cyA9IEFycmF5LmZyb20oZm9ybURpdi5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pO1xuICBjb25zdCBleHRyYURhdGEgPSBpbmNsdWRlZElucHV0cy5yZWR1Y2UoKGFjYywgaW5wdXQpID0+IHtcbiAgICBjb25zdCBrZXkgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gICAgaWYgKCFrZXkpIHJldHVybiBhY2M7XG4gICAgY29uc3QgdmFsdWUgPSBpbnB1dC50eXBlID09PSBcImNoZWNrYm94XCIgPyBpbnB1dC5jaGVja2VkIDogaW5wdXQudmFsdWU7XG4gICAgcmV0dXJuIHsgLi4uYWNjLCBba2V5XTogdmFsdWUgfTtcbiAgfSwge30pO1xuICByZXR1cm4gZXh0cmFEYXRhO1xufTtcbmNvbnN0IHBhcnNlRXZlbnRQYXlsb2FkID0gKGV2ZW50RGF0YSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBFbGVtZW50RXZlbnQucGFyc2UoZXZlbnREYXRhKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCBldmVudERhdGEsIGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuY29uc3QgZ2VuZXJhdGVBbm9ueW1vdXNWYWx1ZXMgPSAoKSA9PiB7XG4gIGNvbnN0IGlkID0gdjQoKS5zcGxpdChcIi1cIilbMF07XG4gIHJldHVybiB7XG4gICAgZmlyc3ROYW1lOiBgeHhfJHtpZH1gLFxuICAgIGxhc3ROYW1lOiBgeHhfJHtpZH1gLFxuICAgIGVtYWlsOiBgeHhfJHtpZH1AZW1haWwuY29tYCxcbiAgICB6aXBDb2RlOiBgeHhfJHtpZH1gLFxuICAgIGNvdW50cnk6IGBVU2BcbiAgfTtcbn07XG5jb25zdCBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyA9IChmaWVsZHMpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBsaW5lMTogZmllbGRzW0ZpZWxkTmFtZS5MSU5FMV0sXG4gICAgbGluZTI6IGZpZWxkc1tGaWVsZE5hbWUuTElORTJdLFxuICAgIGxpbmUzOiBmaWVsZHNbRmllbGROYW1lLkxJTkUzXSxcbiAgICBjaXR5OiBmaWVsZHNbRmllbGROYW1lLkNJVFldLFxuICAgIHN0YXRlOiBmaWVsZHNbRmllbGROYW1lLlNUQVRFXSxcbiAgICBjb3VudHJ5OiBmaWVsZHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgIHppcF9jb2RlOiBmaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXVxuICB9O1xufTtcbmNvbnN0IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyA9IChmaWVsZHMsIGNoZWNrb3V0X3NldHRpbmdzKSA9PiB7XG4gIGlmICghY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MpIHJldHVybjtcbiAgcmV0dXJuIHtcbiAgICBsaW5lMTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0sXG4gICAgbGluZTI6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdLFxuICAgIGxpbmUzOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSxcbiAgICBjaXR5OiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldLFxuICAgIHN0YXRlOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSxcbiAgICBjb3VudHJ5OiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldLFxuICAgIHppcF9jb2RlOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXVxuICB9O1xufTtcbmNvbnN0IGdldEZ1bGxOYW1lID0gKGZpcnN0TmFtZSwgbGFzdE5hbWUpID0+IHtcbiAgcmV0dXJuIFtmaXJzdE5hbWUsIGxhc3ROYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG59O1xuXG5jb25zdCBzdHlsZXMgPSAoeyB3aWR0aCwgaGVpZ2h0IH0pID0+IGBcbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuXG4ub3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ4ICFpbXBvcnRhbnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG4uY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAke3dpZHRoID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7aGVpZ2h0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGFuaW1hdGlvbjogZmFkZUluIDAuM3MgZWFzZS1vdXQ7XG59XG4uZnJhbWUsICNhZHllbi1jb250YWluZXIsICNhZHllbi1jb250YWluZXIgPiAqIHtcbiAgbWF4LXdpZHRoOiAke3dpZHRoID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7aGVpZ2h0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlcjogbm9uZTtcbn1cbi5jYW5jZWwtYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LXNpemU6IDFyZW07XG4gIGNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRvcDogLTEuNXJlbTtcbiAgcGFkZGluZzogMDtcbiAgcmlnaHQ6IDA7XG59XG5gO1xuY29uc3QgYmFua1NlbGVjdG9yU3R5bGVzID0gKHsgd2lkdGgsIGhlaWdodCB9KSA9PiBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogJHt3aWR0aCA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke2hlaWdodCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYW5pbWF0aW9uOiBmYWRlSW4gMC4zcyBlYXNlLW91dDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBib3gtc2hhZG93OiAwIDEwcHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG4uYmFuay1zZWxlY3Rvci1jb250ZW50IHtcbiAgcGFkZGluZzogMjRweDtcbiAgbWF4LWhlaWdodDogY2FsYygke2hlaWdodCA/PyBcIjYwMHB4XCJ9IC0gNDhweCk7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG4uYmFuay1zZWxlY3Rvci1oZWFkZXIge1xuICBmb250LXNpemU6IDEuMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGNvbG9yOiAjMWExYTFhO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uYmFuay1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAxMnB4O1xufVxuLmJhbmstaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNWU1ZTU7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xufVxuLmJhbmstaXRlbTpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogIzNiODJmNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmFmYztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xuICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5iYW5rLWl0ZW06YWN0aXZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xufVxuLmJhbmstbG9nbyB7XG4gIHdpZHRoOiA0MHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTllY2VmO1xufVxuLmJhbmstbG9nby1wbGFjZWhvbGRlciB7XG4gIHdpZHRoOiA0MHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiAgY29sb3I6ICM2Yzc1N2Q7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG4uYmFuay1pbmZvIHtcbiAgZmxleDogMTtcbn1cbi5iYW5rLWRpc3BsYXktbmFtZSB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICMxYTFhMWE7XG4gIG1hcmdpbi1ib3R0b206IDJweDtcbn1cbi5iYW5rLW5hbWUge1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBjb2xvcjogIzZjNzU3ZDtcbn1cbi5jYW5jZWwtYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LXNpemU6IDFyZW07XG4gIGNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRvcDogLTEuNXJlbTtcbiAgcGFkZGluZzogMDtcbiAgcmlnaHQ6IDA7XG59XG5gO1xuY29uc3QgY3JlYXRlQW5kT3BlbkZyYW1lID0gKHVybCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7IGlkLCB0aXRsZSwgd2lkdGgsIGhlaWdodCwgbmFtZSB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gIHRlbXBsYXRlLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke3N0eWxlcyh7IHdpZHRoLCBoZWlnaHQgfSl9XG4gICAgPC9zdHlsZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8aWZyYW1lIHNyYz1cIiR7dXJsfVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cIiR7aWQgPz8gXCJ0aHJlZS1kcy1pZnJhbWVcIn1cIiB0aXRsZT1cIiR7dGl0bGUgPz8gXCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCJ9XCIgYWxsb3c9XCJwYXltZW50XCIgbmFtZT1cIiR7bmFtZSA/PyBcInRocmVlLWRzLWlmcmFtZVwifVwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gIGNvbnN0IGlmcmFtZSA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIik7XG4gIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICByZXR1cm4geyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9O1xufTtcbmNvbnN0IGNyZWF0ZUFuZE9wZW5CYW5rU2VsZWN0b3IgPSAoYmFua3MsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB0aXRsZSB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICBjb25zdCBiYW5rTGlzdEh0bWwgPSBiYW5rcy5tYXAoKGJhbmssIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBsb2dvSHRtbCA9IGJhbmsucmVzb3VyY2VzLmxvZ29fdXJsID8gYDxpbWcgc3JjPVwiJHtiYW5rLnJlc291cmNlcy5sb2dvX3VybH1cIiBhbHQ9XCIke2JhbmsuZGlzcGxheV9uYW1lfVwiIGNsYXNzPVwiYmFuay1sb2dvXCIgLz5gIDogYDxkaXYgY2xhc3M9XCJiYW5rLWxvZ28tcGxhY2Vob2xkZXJcIj4ke2JhbmsuZGlzcGxheV9uYW1lLnN1YnN0cmluZygwLCAyKS50b1VwcGVyQ2FzZSgpfTwvZGl2PmA7XG4gICAgICByZXR1cm4gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pdGVtXCIgZGF0YS1iYW5rLWluZGV4PVwiJHtpbmRleH1cIj5cbiAgICAgICAgICAke2xvZ29IdG1sfVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWluZm9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWRpc3BsYXktbmFtZVwiPiR7YmFuay5kaXNwbGF5X25hbWV9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1uYW1lXCI+JHtiYW5rLmJhbmtfbmFtZX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgIH0pLmpvaW4oXCJcIik7XG4gICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgICAgPHN0eWxlPlxuICAgICAgICAke2JhbmtTZWxlY3RvclN0eWxlcyh7IHdpZHRoLCBoZWlnaHQgfSl9XG4gICAgICA8L3N0eWxlPlxuICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstc2VsZWN0b3ItY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstc2VsZWN0b3ItaGVhZGVyXCI+JHt0aXRsZSA/PyBcIlNlbGVjdCB5b3VyIGJhbmtcIn08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWxpc3RcIj5cbiAgICAgICAgICAgICAgJHtiYW5rTGlzdEh0bWx9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICAgIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBob3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICAgIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICAgIGNvbnN0IGJhbmtJdGVtcyA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcIi5iYW5rLWl0ZW1cIik7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaG9zdCk7XG4gICAgfTtcbiAgICBjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIikpO1xuICAgIH0pO1xuICAgIGJhbmtJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIHJlc29sdmUoYmFua3NbaW5kZXhdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdCk7XG4gIH0pO1xufTtcbmNvbnN0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtID0gKHBheW1lbnRNZXRob2RUeXBlLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgYmFzZVVybCB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChgYXBwL2RpcmVjdF9kZWJpdC9taWNyb19kZXBvc2l0Lz90eXBlPSR7cGF5bWVudE1ldGhvZFR5cGV9YCwgYmFzZVVybCkudG9TdHJpbmcoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBlbGVtZW50cyA9IGNyZWF0ZUFuZE9wZW5GcmFtZSh1cmwsIHsgd2lkdGgsIGhlaWdodCwgdGl0bGU6IFwiTWljcm8gRGVwb3NpdCBGb3JtXCIgfSk7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKSk7XG4gICAgfTtcbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAocmVzcG9uc2UpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IFwic3VjY2Vzc1wiICYmIHJlc3BvbnNlLnBheWxvYWQpIHtcbiAgICAgICAgaWYgKFwiZXJyb3JcIiBpbiByZXNwb25zZS5wYXlsb2FkKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihyZXNwb25zZS5wYXlsb2FkLmVycm9yKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5wYXlsb2FkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBmYWlsZWRcIikpO1xuICAgICAgfVxuICAgIH07XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHN0YXJ0UG9sbGluZyhcbiAgICAgIGVsZW1lbnRzLmlmcmFtZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG5ldyBVUkwoYmFzZVVybCkub3JpZ2luLFxuICAgICAgXCJtaWNyby1kZXBvc2l0LXN0YXR1c1wiLFxuICAgICAgTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2VcbiAgICApO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9ICgpID0+IHtcbiAgICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICB9O1xuICAgIGNvbnN0IG9yaWdpbmFsSGFuZGxlQ2FuY2VsID0gaGFuZGxlQ2FuY2VsO1xuICAgIGNvbnN0IHdyYXBwZWRIYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgIG9yaWdpbmFsSGFuZGxlQ2FuY2VsKCk7XG4gICAgfTtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB3cmFwcGVkSGFuZGxlQ2FuY2VsKTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBzdGFydFBvbGxpbmcoaWZyYW1lLCBvblN1Y2Nlc3MsIGNoaWxkT3JpZ2luLCB0eXBlLCByZXNwb25zZU1vZGVsKSB7XG4gIGNvbnN0IGhhbmRsZVBvbGxpbmcgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHBpbmdDZGVGb3JTdGF0dXMoaWZyYW1lLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCk7XG4gICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICAgICAgb25TdWNjZXNzKHN0YXR1cyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB9XG4gIH07XG4gIGhhbmRsZVBvbGxpbmcoKTtcbiAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwoaGFuZGxlUG9sbGluZywgQ0RFX1BPTExJTkdfSU5URVJWQUwpO1xuICByZXR1cm4gcG9sbGluZ0ludGVydmFsO1xufVxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzKHtcbiAgZWxlbWVudHMsXG4gIHBvbGxpbmdJbnRlcnZhbCxcbiAgcmVzb2x2ZVxufSkge1xuICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgY29uc3QgY2xlYW51cEV2ZW50TGlzdGVuZXJzID0gKCkgPT4ge1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgfTtcbiAgcmV0dXJuIGNsZWFudXBFdmVudExpc3RlbmVycztcbn1cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHBhcmFtcykge1xuICBjb25zdCB7IHVybCwgYmFzZVVybCwgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIGZyYW1lVGl0bGUgfSA9IHBhcmFtcztcbiAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsLCB7IHdpZHRoOiBmcmFtZVdpZHRoLCBoZWlnaHQ6IGZyYW1lSGVpZ2h0LCB0aXRsZTogZnJhbWVUaXRsZSB9KTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHN0YXR1cykgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpO1xuICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgY2xlYW51cEV2ZW50TGlzdGVuZXJzPy4oKTtcbiAgICB9O1xuICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHN0YXJ0UG9sbGluZyhcbiAgICAgIGVsZW1lbnRzLmlmcmFtZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG5ldyBVUkwoYmFzZVVybCkub3JpZ2luLFxuICAgICAgXCJwaW5nLTNkcy1zdGF0dXNcIixcbiAgICAgIFBpbmczRFNTdGF0dXNSZXNwb25zZVxuICAgICk7XG4gICAgY29uc3QgY2xlYW51cEV2ZW50TGlzdGVuZXJzID0gaGFuZGxlRXZlbnRzKHtcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgcG9sbGluZ0ludGVydmFsLFxuICAgICAgcmVzb2x2ZVxuICAgIH0pO1xuICB9KTtcbn1cbmNvbnN0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0ID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbihwYXJhbXMpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzICE9PSBUaHJlZURTU3RhdHVzLlNVQ0NFU1MpIHtcbiAgICBhc3NlcnROZXZlcihyZXN1bHQuc3RhdHVzKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGhyZWY6IHJlc3VsdC5ocmVmXG4gIH07XG59O1xuY29uc3Qgb3BlblBvcHVwV2luZG93ID0gKHBvcHVwTmFtZSwgdXJsKSA9PiB7XG4gIGNvbnN0IHBvcHVwV2luZG93ID0gd2luZG93Lm9wZW4odXJsLCBcIl9ibGFua1wiKTtcbiAgaWYgKCFwb3B1cFdpbmRvdykge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtwb3B1cE5hbWV9IHBvcHVwIHdpbmRvdyBibG9ja2VkLiBQbGVhc2UgYWxsb3cgcG9wdXBzIGZvciB0aGlzIHNpdGUuYCk7XG4gIH1cbiAgcmV0dXJuIHBvcHVwV2luZG93O1xufTtcbmNvbnN0IHN0YXJ0UG9wdXBXaW5kb3dWZXJpZmljYXRpb25TdHJpY3QgPSBhc3luYyAocG9wdXBOYW1lLCBjZGVDb25uLCBleHBlY3RlZFZlcmlmeVRva2VuLCB1cmwpID0+IHtcbiAgY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcG9wdXBXaW5kb3cgPSBvcGVuUG9wdXBXaW5kb3cocG9wdXBOYW1lLCB1cmwpO1xuICAgIGNvbnN0IHBvbGxpbmcgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB2ZXJpZnlSZXN1bHQgPSBhd2FpdCBjaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZChjZGVDb25uLCBleHBlY3RlZFZlcmlmeVRva2VuKTtcbiAgICAgICAgaWYgKHZlcmlmeVJlc3VsdC5wcmVzZW50KSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nKTtcbiAgICAgICAgICBwb3B1cFdpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgIHJlc29sdmUoeyBocmVmOiB2ZXJpZnlSZXN1bHQuaHJlZiB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChwb3B1cFdpbmRvdy5jbG9zZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyhnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nKTtcbiAgICAgICAgcmVqZWN0KGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufTtcblxuY29uc3QgZGV0ZWN0TGFuZ3VhZ2UgPSAoKSA9PiB7XG4gIGNvbnN0IGxhbmd1YWdlcyA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzIDogW25hdmlnYXRvci5sYW5ndWFnZV07XG4gIGxldCBsYW5ndWFnZSA9IGxhbmd1YWdlcz8uWzBdO1xuICBpZiAobGFuZ3VhZ2UpIHtcbiAgICBsYW5ndWFnZSA9IGxhbmd1YWdlLnNwbGl0KFwiLVwiKVswXTtcbiAgfVxuICByZXR1cm4gbGFuZ3VhZ2U7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyR3LCBlcnJfXzogZXJyX18kdyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSA9ICh7XG4gIHJlcXVpcmVfemlwX2NvZGUsXG4gIHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MsXG4gIHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzLFxuICBwYXltZW50X21ldGhvZCxcbiAgaXNCdXNpbmVzc1B1cmNoYXNlXG59LCBub25DZGVGb3JtSW5wdXRzKSA9PiB7XG4gIGNvbnN0IGNvbmRpdGlvbmFsRmllbGRzID0ge307XG4gIGlmIChwYXltZW50X21ldGhvZCA9PT0gXCJhY2hcIikge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IHouc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSB6LnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICB9XG4gIGlmIChyZXF1aXJlX3ppcF9jb2RlKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkxJTkUxXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5DSVRZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TVEFURV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX0JVU0lORVNTX1BVUkNIQVNFXSA/PyBpc0J1c2luZXNzUHVyY2hhc2UpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQlVTSU5FU1NfTkFNRV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAoT2JqZWN0LmtleXMoY29uZGl0aW9uYWxGaWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHM7XG4gIH1cbiAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcy5leHRlbmQoY29uZGl0aW9uYWxGaWVsZHMpO1xufTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvciwgZGVmYXVsdEZpZWxkVmFsdWVzID0ge30pID0+IHtcbiAgaWYgKGRlZmF1bHRGaWVsZFZhbHVlcykge1xuICAgIGxvZ19fJHcoYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWVsZFZhbHVlcyl9YCk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZmF1bHRGaWVsZFZhbHVlcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgY29uc3QgdmFsdWUgPSBkZWZhdWx0RmllbGRWYWx1ZXNba2V5XTtcbiAgICAgIGlmICghbm9uQ2RlRm9ybUlucHV0c1trZXldKSB7XG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddID0gISFub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddO1xuICBpZiAobm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSkge1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUxXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTNdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ0lUWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU1RBVEVdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdO1xuICB9XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYShkZWZhdWx0RmllbGRWYWx1ZXMsIG5vbkNkZUZvcm1JbnB1dHMpO1xuICBjb25zdCByZXN1bHQgPSB2YWxpZGF0aW9uU2NoZW1hLnNhZmVQYXJzZShub25DZGVGb3JtSW5wdXRzKTtcbiAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHJlc3VsdC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBjb25zdCBpc3N1ZUtleXMgPSBPYmplY3Qua2V5cyhpc3N1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXNzdWVLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBpc3N1ZUtleXNbaV07XG4gICAgICBjb25zdCBlcnJvcnMgPSBpc3N1ZXNbZmllbGROYW1lXTtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyR3KFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbG1vc3QgdGhlcmUhIEp1c3QgYSBmZXcgdGhpbmdzIGhpZ2hsaWdodGVkIGFib3ZlIHRvIGZpeCBiZWZvcmUgeW91IGNhbiBzdWJtaXQuXCIpO1xuICB9XG4gIHJldHVybiByZXN1bHQuZGF0YTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHYsIGVycl9fOiBlcnJfXyR2IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzO1xuY29uc3QgdmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzID0gKHRva2VuaXplUmVzdWx0cywgb25WYWxpZGF0aW9uRXJyb3IpID0+IHtcbiAgZm9yIChjb25zdCB0b2tlbml6ZVJlc3VsdCBvZiB0b2tlbml6ZVJlc3VsdHMpIHtcbiAgICBpZiAodG9rZW5pemVSZXN1bHQuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgIHRva2VuaXplUmVzdWx0LmVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBBbGxGaWVsZE5hbWVzLnNhZmVQYXJzZShlcnJvci5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBlcnJfXyR2KGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7ZXJyb3IuZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHBhcnNlZC5kYXRhO1xuICAgICAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3IuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyR2KGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeSh0b2tlbml6ZVJlc3VsdC5lcnJvcnMpfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IHsgZXJyX186IGVycl9fJHUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uXCIpO1xuY29uc3QgcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke3Jlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIH1cbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufTtcbmNvbnN0IGZpbmRDcG1NYXRjaGluZ1R5cGUgPSAoYWxsQ1BNcywgem9kTW9kZWwpID0+IHtcbiAgY29uc3QgY3BtID0gYWxsQ1BNcy5maW5kKChjcG0yKSA9PiB6b2RNb2RlbC5zYWZlUGFyc2UoY3BtMikuc3VjY2Vzcyk7XG4gIGlmICghY3BtKSB7XG4gICAgZXJyX18kdShgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6YCwgYWxsQ1BNcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbGApO1xuICB9XG4gIHJldHVybiB6b2RNb2RlbC5wYXJzZShjcG0pO1xufTtcbmNvbnN0IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0gPSAoZmllbGRzLCBjaGVja291dF9zZXR0aW5ncykgPT4ge1xuICByZXR1cm4ge1xuICAgIG5ld19jdXN0b21lcl9lbWFpbDogZmllbGRzLmVtYWlsLFxuICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGZpZWxkcy5sYXN0TmFtZSxcbiAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogZmllbGRzLmZpcnN0TmFtZSxcbiAgICBjdXN0b21lcl9idXNpbmVzc19uYW1lOiBmaWVsZHMuYnVzaW5lc3NOYW1lLFxuICAgIGN1c3RvbWVyX3RheF9pZDogZmllbGRzLnRheElkLFxuICAgIGN1c3RvbWVyX3RheF9pZF90eXBlOiBmaWVsZHMudGF4SWRUeXBlLFxuICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhmaWVsZHMpLFxuICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMoZmllbGRzLCBjaGVja291dF9zZXR0aW5ncyksXG4gICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKCksXG4gICAgbmV3X2N1c3RvbWVyX3Bob25lOiBmaWVsZHMucGhvbmVcbiAgfTtcbn07XG5jb25zdCBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwID0gYXN5bmMgKGFyZ3MpID0+IHtcbiAgY29uc3QgeyBsb2dfXzogbG9nX18yIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhhcmdzLmxvZ1ByZWZpeCk7XG4gIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFyZ3MuYW55Q2RlQ29ubmVjdGlvbik7XG4gIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShhcmdzLmNvbmZpcm1SZXN1bHQpO1xuICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICBsb2dfXzIoYFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QuLi5gKTtcbiAgICBjb25zdCBzZXR1cFJlc3VsdCA9IGF3YWl0IGZpbmFsaXplU2V0dXBQYXltZW50TWV0aG9kKGFyZ3MuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcG1faWQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHNldHVwUmVzdWx0IH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKGFyZ3MudXNlUGF5Rmlyc3RGbG93KSB7XG4gICAgICBsb2dfXzIoYFVzaW5nIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgICBpZiAoIWFyZ3MuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgICBlcnJfXyR1KFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgYXJncy5jb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogYXJncy5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7IHByb3ZpZGVyX3R5cGU6IGFyZ3MuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogYXJncy5yZXF1aXJlZEZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzKSxcbiAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhhcmdzLnJlcXVpcmVkRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBwcm9tb3Rpb25fY29kZTogYXJncy5yZXF1aXJlZEZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICB1c2VfY29uZmlybWVkX3BtX2lkOiBjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBhcmdzLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH07XG4gICAgbG9nX18yKGBEb2luZyBjaGVja291dC4uLmAsIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFyZ3MuYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICB9XG59O1xuXG5jb25zdCBQYXltZW50UHJvY2Vzc29yID0gei5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIiwgXCJhZHllblwiLCBcInBheXBhbFwiLCBcInBvY2t5dFwiLCBcImxvb3BcIl0pO1xuKHtcbiAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlfSk7XG5jb25zdCBsb2FkU2NyaXB0ID0gKHtcbiAgc2NyaXB0SWQsXG4gIHNyYyxcbiAgY2hlY2tMb2FkZWRGblxufSkgPT4ge1xuICBjb25zdCBldmVudExpc3RlbmVyQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzY3JpcHQuc3JjID0gc3JjO1xuICAgIHNjcmlwdC5pZCA9IHNjcmlwdElkO1xuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgY29uc3QgZXhpc3RpbmdTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzY3JpcHRJZCk7XG4gICAgaWYgKGNoZWNrTG9hZGVkRm4oKSkge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdTY3JpcHQpIHtcbiAgICAgIHNjcmlwdCA9IGV4aXN0aW5nU2NyaXB0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJsb2FkXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuc2lnbmFsIH1cbiAgICApO1xuICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJlcnJvclwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBldmVudExpc3RlbmVyQ29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICByZWplY3QoXCJGYWlsZWQgdG8gbG9hZCB0aGUgc2NyaXB0XCIpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBldmVudExpc3RlbmVyQ29udHJvbGxlci5zaWduYWwgfVxuICAgICk7XG4gIH0pO1xufTtcblxuY29uc3QgZ2V0UGF5bWVudERhdGFSZXF1ZXN0ID0gKHtcbiAgZ2F0ZXdheSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQsXG4gIG1lcmNoYW50TmFtZSxcbiAgbWVyY2hhbnRJZCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIHByZWZpbGxcbn0pID0+IHtcbiAgY29uc3QgYW1vdW50QXRvbSA9IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uYW1vdW50QXRvbSA/PyBpbml0aWFsUHJldmlldz8uYW1vdW50QXRvbSA/PyAwO1xuICBjb25zdCB0b3RhbFByaWNlID0gTWF0aC5tYXgoYW1vdW50QXRvbSAvIDEwMCwgMCk7XG4gIGNvbnN0IGN1cnJlbmN5Q29kZSA9IChvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmN1cnJlbmN5ID8/IHByZWZpbGw/LmN1cnJlbmN5ID8/IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBiYXNlUmVxdWVzdCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IFwiRlVMTFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGxvd0NyZWRpdENhcmRzOiB0cnVlLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXksXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogdHJ1ZSxcbiAgICBzaGlwcGluZ0FkZHJlc3NSZXF1aXJlZDogcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyxcbiAgICBtZXJjaGFudEluZm86IHtcbiAgICAgIC8vIFBST0QgZW52IHdpbGwgbmVlZCB0aGlzXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wYXkvYXBpL3dlYi9yZWZlcmVuY2UvcmVxdWVzdC1vYmplY3RzI01lcmNoYW50SW5mb1xuICAgICAgbWVyY2hhbnRJZDogbWVyY2hhbnRJZCA/PyBcIlwiLFxuICAgICAgbWVyY2hhbnROYW1lXG4gICAgfSxcbiAgICB0cmFuc2FjdGlvbkluZm86IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICB0b3RhbFByaWNlU3RhdHVzOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5wZW5kaW5nID8gXCJFU1RJTUFURURcIiA6IFwiRklOQUxcIixcbiAgICAgIHRvdGFsUHJpY2U6IHRvdGFsUHJpY2UudG9GaXhlZCgyKVxuICAgIH1cbiAgfTtcbiAgaWYgKCFvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5nb29nbGVQYXlQYXltZW50UmVxdWVzdCkgcmV0dXJuIGJhc2VSZXF1ZXN0O1xuICBpZiAodHlwZW9mIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB7IC4uLmJhc2VSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0KGJhc2VSZXF1ZXN0KSB9O1xuICB9XG4gIHJldHVybiB7IC4uLmJhc2VSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH07XG59O1xuY29uc3QgbG9hZEdvb2dsZVBheVNjcmlwdCA9ICgpID0+IHtcbiAgcmV0dXJuIGxvYWRTY3JpcHQoe1xuICAgIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgICBzcmM6IFwiaHR0cHM6Ly9wYXkuZ29vZ2xlLmNvbS9ncC9wL2pzL3BheS5qc1wiLFxuICAgIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaVxuICB9KTtcbn07XG5sZXQgcGF5bWVudHNDbGllbnQgPSBudWxsO1xuY29uc3QgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQgPSBhc3luYyAoYmFzZVVybCkgPT4ge1xuICBjb25zdCBlbnYgPSBhd2FpdCBnZXRDdXJyZW50RW52KGJhc2VVcmwpO1xuICByZXR1cm4gZW52ID09PSBcInByb2RcIiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCI7XG59O1xuY29uc3QgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQgPSBhc3luYyAoYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoYmFzZVVybCk7XG4gIGlmIChwYXltZW50c0NsaWVudCA9PT0gbnVsbCkge1xuICAgIHBheW1lbnRzQ2xpZW50ID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgbWVyY2hhbnRJbmZvOiBwYXltZW50RGF0YVJlcXVlc3QubWVyY2hhbnRJbmZvXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBheW1lbnRzQ2xpZW50O1xufTtcbmNvbnN0IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghY29tbW9uQWN0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShjb21tb25BY3Rpb24pO1xufTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5ID0gKGZvcm1JbnB1dHMsIHBheW1lbnREYXRhKSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy5pbmZvPy5iaWxsaW5nQWRkcmVzcztcbiAgY29uc3Qgc2hpcHBpbmdBZGRyZXNzID0gcGF5bWVudERhdGEuc2hpcHBpbmdBZGRyZXNzO1xuICBpZiAoYmlsbGluZ0FkZHJlc3MpIHtcbiAgICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLmxhc3ROYW1lUGFydHNdID0gYmlsbGluZ0FkZHJlc3MubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICAgIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBsYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHBheW1lbnREYXRhLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxJTkUxXSA9IGlucHV0c1tGaWVsZE5hbWUuTElORTFdIHx8IGJpbGxpbmdBZGRyZXNzLmFkZHJlc3MxIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl0gPSBpbnB1dHNbRmllbGROYW1lLkxJTkUyXSB8fCBiaWxsaW5nQWRkcmVzcy5hZGRyZXNzMiB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTElORTNdID0gaW5wdXRzW0ZpZWxkTmFtZS5MSU5FM10gfHwgYmlsbGluZ0FkZHJlc3MuYWRkcmVzczMgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNJVFldID0gaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSB8fCBiaWxsaW5nQWRkcmVzcy5sb2NhbGl0eSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TVEFURV0gfHwgYmlsbGluZ0FkZHJlc3MuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0FkZHJlc3MuY291bnRyeUNvZGUgfHwgXCJVU1wiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgYmlsbGluZ0FkZHJlc3MucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJcIjtcbiAgICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICAgIH1cbiAgfVxuICBpZiAoc2hpcHBpbmdBZGRyZXNzKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRkcmVzczEgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdIHx8IHNoaXBwaW5nQWRkcmVzcy5hZGRyZXNzMiB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FM10gfHwgc2hpcHBpbmdBZGRyZXNzLmFkZHJlc3MzIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gfHwgc2hpcHBpbmdBZGRyZXNzLmxvY2FsaXR5IHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSB8fCBzaGlwcGluZ0FkZHJlc3MucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gfHwgc2hpcHBpbmdBZGRyZXNzLmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgfVxuICByZXR1cm4gaW5wdXRzO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kdSwgZXJyX186IGVycl9fJHQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWJhY3NcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhCQUNTRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwidHJ1ZWxheWVyXCI7XG4gICAgbGV0IG1pY3JvRGVwb3NpdERhdGEgPSBudWxsO1xuICAgIGlmICh2ZXJpZmljYXRpb25NZXRob2QgPT09IFwibWljcm9fZGVwb3NpdFwiKSB7XG4gICAgICBsb2dfXyR1KFwiTWljcm8gZGVwb3NpdCB2ZXJpZmljYXRpb24gc2VsZWN0ZWQsIHNob3dpbmcgZm9ybS4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1pY3JvRGVwb3NpdERhdGEgPSBhd2FpdCBjcmVhdGVBbmRPcGVuTWljcm9EZXBvc2l0Rm9ybShcImJhY3NfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCIzNTBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kdShcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyR1KFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkO1xuICAgIGNvbnN0IGF2YWlsYWJsZUJhbmtzID0gc3RhcnRGbG93TmV4dEFjdGlvbnM/LmF2YWlsYWJsZV9iYW5rcztcbiAgICBsZXQgc2VsZWN0ZWRCYW5rO1xuICAgIGlmICh2ZXJpZmljYXRpb25NZXRob2QgPT09IFwidHJ1ZWxheWVyXCIgJiYgYXZhaWxhYmxlQmFua3MgJiYgYXZhaWxhYmxlQmFua3MubGVuZ3RoID49IDEpIHtcbiAgICAgIGxvZ19fJHUoXCJNdWx0aXBsZSBiYW5rcyBhdmFpbGFibGUsIHNob3dpbmcgYmFuayBzZWxlY3Rvci4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNlbGVjdGVkQmFuayA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5CYW5rU2VsZWN0b3IoYXZhaWxhYmxlQmFua3MsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MDBweFwiLFxuICAgICAgICAgIHRpdGxlOiBcIlNlbGVjdCBiYW5rXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHUoYEJhbmsgc2VsZWN0ZWQ6ICR7c2VsZWN0ZWRCYW5rLmRpc3BsYXlfbmFtZX1gKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ19fJHUoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBkaXJlY3REZWJpdERhdGEgPSB7XG4gICAgICB0eXBlOiBcImJhY3NfZGlyZWN0X2RlYml0XCIsXG4gICAgICBiYWNzX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAvLyBUcnVlTGF5ZXJcbiAgICAgICAgYmFua19uYW1lOiBzZWxlY3RlZEJhbms/LmJhbmtfbmFtZSxcbiAgICAgICAgLy8gTWljcm9kZXBvc2l0XG4gICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY291bnRyeV9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgYWNjb3VudF9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/LmFjY291bnRfbnVtYmVyLFxuICAgICAgICBzb3J0X2NvZGU6IG1pY3JvRGVwb3NpdERhdGE/LnNvcnRfY29kZSxcbiAgICAgICAgYWRkcmVzczogeyAuLi5iaWxsaW5nQWRkcmVzcywgdG93bjogYmlsbGluZ0FkZHJlc3MuY2l0eSwgcG9zdGNvZGU6IGJpbGxpbmdBZGRyZXNzLnppcF9jb2RlIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogdmVyaWZpY2F0aW9uTWV0aG9kLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YTogZGlyZWN0RGViaXREYXRhXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIGxvZ19fJHUoXCJCQUNTIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQkFDUyB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyR1KGDilbAgQkFDUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCQUNTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYmFjc1wiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyR0KFwiQkFDUyBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHQsIGVycl9fOiBlcnJfXyRzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1lZnRcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhFRlRGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJwbGFpZFwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kdChcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJlZnRfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI0NTBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kdChcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyR0KFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkO1xuICAgIGNvbnN0IGRpcmVjdERlYml0RGF0YSA9IHtcbiAgICAgIHR5cGU6IFwiZWZ0X2RpcmVjdF9kZWJpdFwiLFxuICAgICAgZWZ0X2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAvLyBQbGFpZFxuICAgICAgICBidXNpbmVzc19hY2NvdW50OiBjdXN0b21QYXJhbXMuaXNCdXNpbmVzc0FjY291bnQgPz8gZmFsc2UsXG4gICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgLy8gTWljcm9kZXBvc2l0XG4gICAgICAgIGluc3RpdHV0aW9uX251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uaW5zdGl0dXRpb25fbnVtYmVyLFxuICAgICAgICB0cmFuc2l0X251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8udHJhbnNpdF9udW1iZXIsXG4gICAgICAgIGFjY291bnRfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hY2NvdW50X251bWJlclxuICAgICAgICAvLyBtYW5kYXRlX3ZlcnNpb246IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IGRpcmVjdERlYml0RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyR0KFwiRUZUIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiRUZUIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJHQoYOKVsCBFRlQgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV3Q29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1lZnRcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG5ld0NvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kcyhcIkVGVCBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHMsIGVycl9fOiBlcnJfXyRyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1zZXBhXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4U0VQQUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWV0aG9kID0gY3VzdG9tUGFyYW1zLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kcyhcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJzZXBhX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMzAwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHMoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kcyhcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBhdmFpbGFibGVCYW5rcyA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IHNlbGVjdGVkQmFuaztcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcInRydWVsYXllclwiICYmIGF2YWlsYWJsZUJhbmtzICYmIGF2YWlsYWJsZUJhbmtzLmxlbmd0aCA+PSAxKSB7XG4gICAgICBsb2dfXyRzKFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBzZWxlY3RlZEJhbmsgPSBhd2FpdCBjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yKGF2YWlsYWJsZUJhbmtzLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNTAwcHhcIixcbiAgICAgICAgICB0aXRsZTogXCJTZWxlY3QgYmFua1wiXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRzKGBCYW5rIHNlbGVjdGVkOiAke3NlbGVjdGVkQmFuay5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyRzKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogdmVyaWZpY2F0aW9uTWV0aG9kLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwic2VwYV9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBzZXBhX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAgICAgLy8gdHJ1ZWxheWVyXG4gICAgICAgICAgICBiYW5rX25hbWU6IHNlbGVjdGVkQmFuaz8uYmFua19uYW1lLFxuICAgICAgICAgICAgY291bnRyeV9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgICAgIC8vIG1pY3JvZGVwb3NpdFxuICAgICAgICAgICAgb3duZXJfbmFtZTogZ2V0RnVsbE5hbWUobm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sIG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgICAgIGliYW46IG1pY3JvRGVwb3NpdERhdGE/LmliYW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmIChyZWRpcmVjdFVybCkge1xuICAgICAgbG9nX18kcyhcIlNFUEEgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJTRVBBIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJHMoYOKVsCBTRVBBIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU0VQQSB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNFUEEgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV3Q29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1zZXBhXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBuZXdDb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJHIoXCJTRVBBIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kciwgZXJyX186IGVycl9fJHEgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWlyd2FsbGV4LWNjXCIpO1xuY29uc3QgQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWA7XG4gICAgZXJyX18kcShkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBwYXJzZUludGVudElkRnJvbTNkc0hyZWYgPSAoaHJlZikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGludGVudElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIWludGVudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIH1cbiAgICBsb2dfXyRyKGBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbSW50ZW50IElEOiAke2ludGVudElkfV1gKTtcbiAgICByZXR1cm4gaW50ZW50SWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyTXNnID0gYEVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyRxKGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgcnVuQWlyd2FsbGV4M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMkMyhlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0KHsgdXJsOiBoZWFkZXJzW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmwgfSk7XG4gIGNvbnN0IGludGVudElkID0gcGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBpbml0aWFsSW50ZW50SWQgPSBoZWFkZXJzW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAoaW5pdGlhbEludGVudElkICE9PSBpbnRlbnRJZCkge1xuICAgIGNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuICAgIGNvbnN0IGRldkVyciA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtpbnRlbnRJZH0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtpbml0aWFsSW50ZW50SWR9KS5gO1xuICAgIGVycl9fJHEoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIGNvbnN0IGV4dHJhTWV0YWRhdGFGb3JDaGVja291dCA9IHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGludGVudElkLFxuICAgICAgY29uc2VudF9pZDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xuICByZXR1cm4gZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0O1xufTtcbmNvbnN0IEFwcGxlUGF5Q3BtJDIgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0kMiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmNvbnN0IGxvYWRBcHBsZVBheVNjcmlwdCA9ICgpID0+IHtcbiAgcmV0dXJuIGxvYWRTY3JpcHQoe1xuICAgIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfYXBwbGVfcGF5X3Nka1wiLFxuICAgIHNyYzogXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLFxuICAgIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvblxuICB9KTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5ID0gKGZvcm1JbnB1dHMsIGFwcGxlUGF5UGF5bWVudCkgPT4ge1xuICBjb25zdCBwbUJpbGxpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3Q7XG4gIGNvbnN0IGJpbGxpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LmJpbGxpbmdDb250YWN0O1xuICBjb25zdCBzaGlwcGluZ0NvbnRhY3QgPSBhcHBsZVBheVBheW1lbnQuc2hpcHBpbmdDb250YWN0O1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgaWYgKHBtQmlsbGluZ0NvbnRhY3QgfHwgYmlsbGluZ0NvbnRhY3QgfHwgc2hpcHBpbmdDb250YWN0KSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBwbUJpbGxpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgYmlsbGluZ0NvbnRhY3Q/LmVtYWlsQWRkcmVzcyB8fCBzaGlwcGluZ0NvbnRhY3Q/LmVtYWlsQWRkcmVzcyB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmNvdW50cnlDb2RlIHx8IGJpbGxpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LnBvc3RhbENvZGUgfHwgYmlsbGluZ0NvbnRhY3Q/LnBvc3RhbENvZGUgfHwgc2hpcHBpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgICBjb25zdCBmaXJzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IHNoaXBwaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IFwiXCI7XG4gICAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgXCJcIjtcbiAgICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5wdXRzO1xufTtcbnoub2JqZWN0KHtcbiAgZGF0YTogei5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgICBlcnJvcnM6IHouYXJyYXkoei5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHouc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHoubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCBjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCA9ICh7XG4gIHRvdGFsLFxuICBwcmVmaWxsXG59KSA9PiB7XG4gIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogdG90YWwuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7cHJlZmlsbC50b2tlbn1gLCBGUkFNRV9CQVNFX1VSTCkudG9TdHJpbmcoKVxuICAgIH07XG4gIH1cbiAgY29uc3QgbGluZUl0ZW0gPSBwcmVmaWxsLmxpbmVfaXRlbXM/LlswXTtcbiAgaWYgKCFsaW5lSXRlbSkgcmV0dXJuIHZvaWQgMDtcbiAgcmV0dXJuIHtcbiAgICBwYXltZW50RGVzY3JpcHRpb246IGxpbmVJdGVtPy5kZXNjcmlwdGlvbiA/PyBcIlwiLFxuICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICBhbW91bnQ6IHRvdGFsLmFtb3VudCxcbiAgICAgIGxhYmVsOiBsaW5lSXRlbT8uZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbFVuaXQ6IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsQ291bnQ6IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsX2NvdW50ID8/IHZvaWQgMCxcbiAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICB9LFxuICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHtwcmVmaWxsLnRva2VufWBcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVBcHBsZVBheVRvdGFsID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIHByZWZpbGwsXG4gIGRlZmF1bHRMYWJlbCA9IFwiVG90YWxcIlxufSkgPT4ge1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSAob3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5jdXJyZW5jeSA/PyBwcmVmaWxsPy5jdXJyZW5jeSA/PyBpbml0aWFsUHJldmlldy5jdXJyZW5jeSkudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgYW1vdW50QXRvbSA9IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uYW1vdW50QXRvbSA/PyBpbml0aWFsUHJldmlldz8uYW1vdW50QXRvbSA/PyAwO1xuICBjb25zdCBhbW91bnQgPSAoYW1vdW50QXRvbSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5sYWJlbCA/PyBkZWZhdWx0TGFiZWwgPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGdldEFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBpbml0aWFsUHJldmlldyxcbiAgcHJlZmlsbCxcbiAgZGVmYXVsdExhYmVsXG59KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVuY3lDb2RlLCB0b3RhbCB9ID0gY3JlYXRlQXBwbGVQYXlUb3RhbCh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICBpbml0aWFsUHJldmlldyxcbiAgICBwcmVmaWxsLFxuICAgIGRlZmF1bHRMYWJlbFxuICB9KTtcbiAgbGV0IHBheW1lbnRSZXF1ZXN0ID0ge1xuICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgY3VycmVuY3lDb2RlLFxuICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcbiAgICAgIFwiZW1haWxcIixcbiAgICAgIC4uLnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MgPyBbXCJwb3N0YWxBZGRyZXNzXCJdIDogW11cbiAgICBdLFxuICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiLCBcImpjYlwiXSxcbiAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1wic3VwcG9ydHMzRFNcIiwgXCJzdXBwb3J0c0NyZWRpdFwiLCBcInN1cHBvcnRzRGViaXRcIl0sXG4gICAgdG90YWxcbiAgfTtcbiAgY29uc3QgaXNBbGxSZWN1cnJpbmcgPSBwcmVmaWxsLmxpbmVfaXRlbXMuZXZlcnkoKGl0ZW0pID0+IGl0ZW0uYmlsbGluZ19pbnRlcnZhbCAmJiBpdGVtLmJpbGxpbmdfaW50ZXJ2YWxfY291bnQpO1xuICBpZiAoaXNBbGxSZWN1cnJpbmcpIHtcbiAgICBwYXltZW50UmVxdWVzdC5yZWN1cnJpbmdQYXltZW50UmVxdWVzdCA9IGNyZWF0ZVJlY3VycmluZ1BheW1lbnRSZXF1ZXN0KHtcbiAgICAgIHRvdGFsLFxuICAgICAgcHJlZmlsbFxuICAgIH0pO1xuICB9XG4gIGlmICghb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYXBwbGVQYXlQYXltZW50UmVxdWVzdCkgcmV0dXJuIHBheW1lbnRSZXF1ZXN0O1xuICBpZiAodHlwZW9mIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcGF5bWVudFJlcXVlc3QgPSB7XG4gICAgICAuLi5wYXltZW50UmVxdWVzdCxcbiAgICAgIC4uLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QuYXBwbGVQYXlQYXltZW50UmVxdWVzdChwYXltZW50UmVxdWVzdClcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHBheW1lbnRSZXF1ZXN0ID0geyAuLi5wYXltZW50UmVxdWVzdCwgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5hcHBsZVBheVBheW1lbnRSZXF1ZXN0IH07XG4gIH1cbiAgcmV0dXJuIHBheW1lbnRSZXF1ZXN0O1xufTtcblxuY29uc3QgQWR5ZW5FbnZpcm9ubWVudCA9IHouZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG5jb25zdCBBZHllbkxvY2FsZSA9IHouZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKTtcbmNvbnN0IHsgbG9nX186IGxvZ19fJHEsIGVycl9fOiBlcnJfXyRwIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFkeWVuLWNjXCIpO1xuY29uc3QgQWR5ZW4zZHNSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMkMiA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IEFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzLnNhZmVQYXJzZShlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGVycl9fJHAoYEFkeWVuIDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgZGVjb2RlQWR5ZW5BY3Rpb24gPSAoYWN0aW9uKSA9PiB7XG4gIGNvbnN0IGRlc2VyaWFsaXplZCA9IEpTT04ucGFyc2UoYWN0aW9uKTtcbiAgcmV0dXJuIGRlc2VyaWFsaXplZDtcbn07XG5jb25zdCBpc0FkeWVuQXZhaWxhYmxlID0gKCkgPT4ge1xuICByZXR1cm4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3dbXCJBZHllbldlYlwiXTtcbn07XG5jb25zdCBnZXRBZHllbkNoZWNrb3V0ID0gYXN5bmMgKCkgPT4ge1xuICBsb2dfXyRxKFwiV2FpdGluZyBmb3IgQWR5ZW4gU0RLIHRvIGxvYWQuLi5cIik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNBZHllbkF2YWlsYWJsZSgpKSB7XG4gICAgICBhd2FpdCBzbGVlcCg1MDApO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzQWR5ZW5BdmFpbGFibGUoKSkge1xuICAgIGVycl9fJHAoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIGxvZ19fJHEoXCJBZHllbiBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgcmV0dXJuIHdpbmRvd1tcIkFkeWVuV2ViXCJdW1wiQWR5ZW5DaGVja291dFwiXTtcbn07XG5jb25zdCBoYW5kbGVBZHllbjNkcyA9IChwYXJhbXMpID0+IHtcbiAgY29uc3QgeyBoZWFkZXJzLCBsb2NhbGUsIGNvdW50cnlDb2RlLCBjb21wb25lbnQsIGhvc3QsIGNhbmNlbEJ1dHRvbiB9ID0gcGFyYW1zO1xuICBjb25zdCBhY3Rpb24gPSBkZWNvZGVBZHllbkFjdGlvbihoZWFkZXJzW1wib3AtYWR5ZW4tYWN0aW9uXCJdKTtcbiAgbG9nX18kcShgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7YWN0aW9uLnR5cGV9YCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBsb2dfXyRxKFwiQ2xlYW5pbmcgdXAgQWR5ZW4gM0RTIGZsb3dcIik7XG4gICAgICBjYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICAgIGhvc3QucmVtb3ZlKCk7XG4gICAgfTtcbiAgICBjb25zdCBvblBheW1lbnRGYWlsZWQgPSAoc3RhdGUpID0+IHtcbiAgICAgIGVycl9fJHAoXCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIFJlc3VsdDpcIiwgc3RhdGUpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5GQUlMVVJFLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25FcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgZXJyX18kcChcIkFkeWVuIGVycm9yOlwiLCBlcnJvcik7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkZBSUxVUkUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkNhbmNlbCA9ICgpID0+IHtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVELCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNhbmNlbCk7XG4gICAgY29uc3Qgb25BZGRpdGlvbmFsRGV0YWlscyA9IChzdGF0ZSwgXywgX18pID0+IHtcbiAgICAgIGhvc3QucmVtb3ZlKCk7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLlNVQ0NFU1MsIGFkZGl0aW9uYWxEZXRhaWxzOiBzdGF0ZSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGdldEFkeWVuQ2hlY2tvdXQoKS50aGVuKFxuICAgICAgKGFkeWVuQ2hlY2tvdXQpID0+IGFkeWVuQ2hlY2tvdXQoe1xuICAgICAgICBjbGllbnRLZXk6IGhlYWRlcnNbXCJvcC1hZHllbi1jbGllbnQta2V5XCJdLFxuICAgICAgICBlbnZpcm9ubWVudDogaGVhZGVyc1tcIm9wLWFkeWVuLWVudmlyb25tZW50XCJdLFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGNvdW50cnlDb2RlLFxuICAgICAgICBvbkFkZGl0aW9uYWxEZXRhaWxzLFxuICAgICAgICBvblBheW1lbnRGYWlsZWQsXG4gICAgICAgIG9uRXJyb3JcbiAgICAgIH0pXG4gICAgKS50aGVuKChjaGVja291dCkgPT4ge1xuICAgICAgY2hlY2tvdXQuY3JlYXRlRnJvbUFjdGlvbihhY3Rpb24sIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KGNvbXBvbmVudCk7XG4gICAgfSk7XG4gIH0pO1xufTtcbmNvbnN0IGRldGVybWluZUxvY2FsZSA9IChwcmVmaWxsTG9jYWxlKSA9PiB7XG4gIGNvbnN0IGJyb3dzZXJMb2NhbGUgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlc1swXSA6IG5hdmlnYXRvci5sYW5ndWFnZTtcbiAgY29uc3QgbG9jYWxlID0gcHJlZmlsbExvY2FsZSA/PyBicm93c2VyTG9jYWxlO1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IEFkeWVuTG9jYWxlLnNhZmVQYXJzZShsb2NhbGUpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRwKGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHtsb2NhbGV9LiBEZWZhdWx0aW5nIHRvIGVuLVVTLmApO1xuICAgIHJldHVybiBcImVuLVVTXCI7XG4gIH1cbiAgbG9nX18kcShgUmVzb2x2ZWQgbG9jYWxlOiAke3BhcnNlUmVzdWx0LmRhdGF9YCk7XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0FkeWVuM2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtYWR5ZW4tYWN0aW9uXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcnVuQWR5ZW4zZHNGbG93ID0gYXN5bmMgKGNvdW50cnlDb2RlLCBlcnJvclJlc3BvbnNlSGVhZGVycywgcHJlZmlsbExvY2FsZSkgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMkMihlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGNvbnN0IGNvbXBvbmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbXBvbmVudC5pZCA9IFwiYWR5ZW4tY29udGFpbmVyXCI7XG4gIGNvbnN0IHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfSA9IGNyZWF0ZUFuZE9wZW5GcmFtZShcImh0dHA6Ly9leGFtcGxlLmNvbVwiKTtcbiAgaWZyYW1lLnJlcGxhY2VXaXRoKGNvbXBvbmVudCk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZUFkeWVuM2RzKHtcbiAgICBoZWFkZXJzLFxuICAgIGxvY2FsZTogZGV0ZXJtaW5lTG9jYWxlKHByZWZpbGxMb2NhbGUpLFxuICAgIGNvdW50cnlDb2RlLFxuICAgIGNvbXBvbmVudCxcbiAgICBob3N0LFxuICAgIGNhbmNlbEJ1dHRvblxuICB9KTtcbiAgcmVzdWx0LmNsZWFudXAoKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5TVUNDRVNTKSB7XG4gICAgaWYgKCFyZXN1bHQuYWRkaXRpb25hbERldGFpbHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkIGJ1dCBubyBhZGRpdGlvbmFsIGRldGFpbHMgd2VyZSByZXR1cm5lZFwiKTtcbiAgICB9XG4gICAgbG9nX18kcShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBleGlzdGluZ19jYzoge1xuICAgICAgICBhZGRpdGlvbmFsX2RldGFpbHM6IHJlc3VsdC5hZGRpdGlvbmFsRGV0YWlscy5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnROZXZlcihyZXN1bHQuc3RhdHVzKTtcbiAgfVxufTtcbmNvbnN0IEFwcGxlUGF5Q3BtJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IEdvb2dsZVBheUNwbSQxID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRwIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDIoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHByZXBhcmVQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXlfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBldmVudC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IGNvbnRleHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgY29uc3QgcGF5bWVudFNlc3Npb25SZXNwb25zZSA9IG5leHRBY3Rpb25NZXRhZGF0YT8uW1wiYXBwbGVfcGF5X3Nlc3Npb25cIl07XG4gICAgaWYgKCFwYXltZW50U2Vzc2lvblJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50U2Vzc2lvblJlc3BvbnNlKTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLnBheW1lbnRTZXNzaW9uUmVzcG9uc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29udGV4dC5zZXNzaW9uLmFib3J0KCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVQYXltZW50QXV0aG9yaXplZCQyKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bWVudERhdGEgPSBldmVudC5wYXltZW50O1xuICAgIGNvbnN0IGZvcm1JbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5KGNvbnRleHQubm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIGZvcm1JbnB1dHMsXG4gICAgICBjb250ZXh0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgY29udGV4dC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIGNvbnRleHQucHJlZmlsbC5jaGVja291dF9zZXR0aW5ncylcbiAgICB9KTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGJyb3dzZXJfaW5mbzogZ2V0RnJhdWRNZXRhZGF0YSgpLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShwYXltZW50RGF0YS50b2tlbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGxvZ19fJHAoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICBjb25zdCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICBsb2dQcmVmaXg6IFwiYWR5ZW4tYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRvLCBlcnJfXzogZXJyX18kbyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhZHllbi1hcHBsZS1wYXlcIik7XG5jb25zdCBpbml0QWR5ZW5BcHBsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0kMSk7XG4gICAgaWYgKCFhcHBsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRvKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpO1xuICAgIGF3YWl0IGxvYWRBcHBsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKSB7XG4gICAgICBsb2dfXyRvKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kbyhcIkFwcGxlIFBheSBMb2FkZWRcIik7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnRzID0gYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpO1xuICAgIGlmICghY2FuTWFrZVBheW1lbnRzKSB7XG4gICAgICBsb2dfXyRvKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gYXBwbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25BcHBsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IE9qc0Zsb3dzLmFkeWVuQXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYXBwbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kbyhcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkFwcGxlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFkeWVuQXBwbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgZm9ybUNhbGxiYWNrc1xuICB9KSA9PiB7XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0kMSk7XG4gICAgY29uc3QgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LCBpbml0aWFsUHJldmlldyB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBwYXltZW50UmVxdWVzdCA9IGdldEFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi5wcmVmaWxsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiBhcHBsZVBheUNwbT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBwYXltZW50UmVxdWVzdCk7XG4gICAgY29uc3Qgc2Vzc2lvbkNvbnRleHQgPSB7XG4gICAgICBzZXNzaW9uLFxuICAgICAgY29ubmVjdGlvbjogY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGFwcGxlUGF5Q3BtLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgIGRlZmF1bHRGaWVsZFZhbHVlczogY3VzdG9tUGFyYW1zPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICB9O1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZXhjbHVkZVByb3BzKHByZWZpbGwsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBsb2dfXyRvKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQyKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFByZXZpZXcyID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IGNyZWF0ZUFwcGxlUGF5VG90YWwoe1xuICAgICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY3VzdG9tUGFyYW1zLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogaW5pdGlhbFByZXZpZXcyLFxuICAgICAgICAgICAgZGVmYXVsdExhYmVsOiBhcHBsZVBheUNwbT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgICAgICBwcmVmaWxsXG4gICAgICAgICAgfSkudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odXBkYXRlKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDIoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbmNhbmNlbCA9IGhhbmRsZUNhbmNlbDtcbiAgICAgIHNlc3Npb24uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBlcnJfXyRvKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kbiwgZXJyX186IGVycl9fJG4gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWR5ZW4tZ29vZ2xlLXBheVwiKTtcbmNvbnN0IGluaXRBZHllbkdvb2dsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSQxKTtcbiAgICBpZiAoIWdvb2dsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRuKFwiR29vZ2xlIFBheSBDUE1cIiwgZ29vZ2xlUGF5Q3BtKTtcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgZXJyX18kbihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJG4oXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpO1xuICAgIGF3YWl0IGxvYWRHb29nbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5nb29nbGU/LnBheW1lbnRzPy5hcGkpIHtcbiAgICAgIGVycl9fJG4oXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IGF3YWl0IGdldEdvb2dsZVBheUVudmlyb25tZW50KGNvbnRleHQuYmFzZVVybCk7XG4gICAgaWYgKGVudmlyb25tZW50ID09PSBcIlBST0RVQ1RJT05cIiAmJiAhcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkKSB7XG4gICAgICBlcnJfXyRuKFwiR29vZ2xlIFBheSBtZXJjaGFudCBJRCBpcyByZXF1aXJlZCBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kbihcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgIHByZWZpbGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWR5ZW5cIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgY2xpZW50LmlzUmVhZHlUb1BheShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kbihcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRuKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3Qgb25Hb29nbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBPanNGbG93cy5hZHllbkdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kbihcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25Hb29nbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQWR5ZW5Hb29nbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kbihcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDEpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgIHByZWZpbGwsXG4gICAgICBnYXRld2F5OiBcImFkeWVuXCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICB0cmFjayhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBnb29nbGVQYXlDcG0ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGEgPSBhd2FpdCBjbGllbnQubG9hZFBheW1lbnREYXRhKHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBsb2dfXyRuKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkobm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgICBtZXJnZWRJbnB1dHMsXG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKTtcbiAgICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNyeXB0ZWRQYXltZW50VG9rZW4gPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW47XG4gICAgICBpZiAoIWVuY3J5cHRlZFBheW1lbnRUb2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncylcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgbG9nX18kbihcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHN0YXJ0Rmxvd05leHRBY3Rpb25zKTtcbiAgICAgIGxldCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgYnJvd3Nlcl9pbmZvOiBnZXRGcmF1ZE1ldGFkYXRhKCksXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kbihcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgbGV0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFkeWVuLTNkc1wiKTtcbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBsb2dfXyRuKFwiQWR5ZW4gM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRuKGDilbAgQWR5ZW4gM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmICFvdXJQbUlkKSB7XG4gICAgICAgIGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kbihcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlIGFmdGVyIDNEU1wiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgfVxuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgbWV0aG9kIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYWR5ZW4tZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJG4oXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJG0sIGVycl9fOiBlcnJfXyRtIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hY2hcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhBQ0hGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJwbGFpZFwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kbShcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJhY2hfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI0MDBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kbShcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyRtKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkO1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogdmVyaWZpY2F0aW9uTWV0aG9kLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYWNoX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgICAgIGFjaF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgICAgIC8vcGxhaWQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogY3VzdG9tUGFyYW1zLmlzQnVzaW5lc3NBY2NvdW50ID8/IGZhbHNlLFxuICAgICAgICAgICAgb3duZXJfbmFtZTogZ2V0RnVsbE5hbWUobm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sIG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgICAgIC8vQUNIIG1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgICAgICAgYWNjb3VudF9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/LmFjY291bnRfbnVtYmVyLFxuICAgICAgICAgICAgYWJhX3JvdXRpbmdfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hYmFfcm91dGluZ19udW1iZXJcbiAgICAgICAgICAgIC8vIG1hbmRhdGVfdmVyc2lvbjogJzEuMCcsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIGxvZ19fJG0oXCJQbGFpZCB2ZXJpZmljYXRpb24gUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkFDSCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyRtKGDilbAgUGxhaWQgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsYWlkIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYWNoXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBuZXdDb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJG0oXCJBQ0ggcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRsIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDEoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHByZXBhcmVQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGV2ZW50LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogY29udGV4dC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50U2Vzc2lvblJlc3BvbnNlID0gbmV4dEFjdGlvbk1ldGFkYXRhPy5bXCJhcHBsZV9wYXlfc2Vzc2lvblwiXTtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHBheW1lbnRTZXNzaW9uUmVzcG9uc2UpO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ucGF5bWVudFNlc3Npb25SZXNwb25zZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZTNEUyhuZXh0QWN0aW9uTWV0YWRhdGEsIGNvbnRleHQpIHtcbiAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICB9XG4gIGxvZ19fJGwoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgfSk7XG4gIGxvZ19fJGwoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIGxvZ19fJGwoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgcmV0dXJuIGNvbmZpcm1SZXN1bHQ7XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bWVudERhdGEgPSBldmVudC5wYXltZW50O1xuICAgIGNvbnN0IGZvcm1JbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5KGNvbnRleHQubm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIGZvcm1JbnB1dHMsXG4gICAgICBjb250ZXh0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgY29udGV4dC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIGNvbnRleHQucHJlZmlsbC5jaGVja291dF9zZXR0aW5ncylcbiAgICB9KTtcbiAgICBjb25zdCByZXF1aXJlZFVzZXJBY3Rpb25zID0gc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXTtcbiAgICBjb25zdCBjb25zZW50SWQgPSByZXF1aXJlZFVzZXJBY3Rpb25zLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFjb25zZW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGxldCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KHBheW1lbnREYXRhLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGxvZ19fJGwoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICBsZXQgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhPy5yZWRpcmVjdF91cmwgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWQgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkKSB7XG4gICAgICBjb25maXJtUmVzdWx0ID0gYXdhaXQgaGFuZGxlM0RTKG5leHRBY3Rpb25NZXRhZGF0YSwgY29udGV4dCk7XG4gICAgICBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgfVxuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGssIGVycl9fOiBlcnJfXyRsIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hcHBsZS1wYXlcIik7XG5jb25zdCBpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQyKTtcbiAgICBpZiAoIWFwcGxlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGsoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJGsoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRrKFwiQXBwbGUgUGF5IExvYWRlZFwiKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJGsoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYXBwbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kbChcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BaXJ3YWxsZXhBcHBsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBmb3JtQ2FsbGJhY2tzXG4gIH0pID0+IHtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQyKTtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldzogY3VzdG9tUGFyYW1zLmluaXRpYWxQcmV2aWV3LFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi5wcmVmaWxsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiBhcHBsZVBheUNwbT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBwYXltZW50UmVxdWVzdCk7XG4gICAgY29uc3Qgc2Vzc2lvbkNvbnRleHQgPSB7XG4gICAgICBzZXNzaW9uLFxuICAgICAgY29ubmVjdGlvbjogY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGFwcGxlUGF5Q3BtLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgIGRlZmF1bHRGaWVsZFZhbHVlczogY3VzdG9tUGFyYW1zPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICB9O1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZXhjbHVkZVByb3BzKHByZWZpbGwsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBsb2dfXyRrKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSBoYW5kbGVDYW5jZWw7XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMShldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IGNyZWF0ZUFwcGxlUGF5VG90YWwoe1xuICAgICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY3VzdG9tUGFyYW1zLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgICAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICAgICAgcHJlZmlsbFxuICAgICAgICAgIH0pLnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBlcnJfXyRsKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kaiwgZXJyX186IGVycl9fJGsgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWdvb2dsZS1wYXlcIik7XG5jb25zdCBpbml0QWlyd2FsbGV4R29vZ2xlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSQyKTtcbiAgICBpZiAoIWdvb2dsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRqKFwiR29vZ2xlIFBheSBDUE1cIiwgZ29vZ2xlUGF5Q3BtKTtcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgZXJyX18kayhcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGooXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpO1xuICAgIGF3YWl0IGxvYWRHb29nbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5nb29nbGU/LnBheW1lbnRzPy5hcGkpIHtcbiAgICAgIGVycl9fJGsoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IGF3YWl0IGdldEdvb2dsZVBheUVudmlyb25tZW50KGNvbnRleHQuYmFzZVVybCk7XG4gICAgaWYgKGVudmlyb25tZW50ID09PSBcIlBST0RVQ1RJT05cIiAmJiAhcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkKSB7XG4gICAgICBlcnJfXyRrKFwiR29vZ2xlIFBheSBtZXJjaGFudCBJRCBpcyByZXF1aXJlZCBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaihcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgIHByZWZpbGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiBpc1JlYWR5VG9QYXkgfSA9IGF3YWl0IGNsaWVudC5pc1JlYWR5VG9QYXkocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGlmICghaXNSZWFkeVRvUGF5KSB7XG4gICAgICAgIGxvZ19fJGooXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKTtcbiAgICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kayhcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IG9uR29vZ2xlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRrKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25Hb29nbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQWlyd2FsbGV4R29vZ2xlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJGooXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSQyKTtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGdvb2dsZVBheUNwbS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJGooXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICAgIG1lcmdlZElucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgbG9nX18kaihcIl9fX1wiLCBub25DZGVGb3JtRmllbGRzKTtcbiAgICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNyeXB0ZWRQYXltZW50VG9rZW4gPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW47XG4gICAgICBpZiAoIWVuY3J5cHRlZFBheW1lbnRUb2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncylcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgbG9nX18kaihcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHN0YXJ0Rmxvd05leHRBY3Rpb25zKTtcbiAgICAgIGxldCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBlbmNyeXB0ZWRQYXltZW50VG9rZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kaihcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgbGV0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICAgICk7XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmIG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgbG9nX18kaihcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgICAgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kaihg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiAhb3VyUG1JZCkge1xuICAgICAgICBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCxcbiAgICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEuY29uc2VudF9pZFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJGooXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgfVxuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRrKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRpLCBlcnJfXzogZXJyX18kaiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJrbGFybmFcIik7XG5jb25zdCBBaXJ3YWxsZXhLbGFybmFDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJrbGFybmFcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7fSkubnVsbGlzaCgpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpXG59KTtcbmNvbnN0IGluaXRBaXJ3YWxsZXhLbGFybmFGbG93ID0gYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gIGNvbnN0IGtsYXJuYUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBaXJ3YWxsZXhLbGFybmFDcG0pO1xuICBpZiAoIWtsYXJuYUNwbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIktsYXJuYSBDUE0gbm90IGZvdW5kIGluIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHNcIik7XG4gIH1cbiAgY29uc3Qgc3RhcnRGbG93ID0gKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhLbGFybmEucnVuKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGtsYXJuYUNwbSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogY3VzdG9tUGFyYW1zID8/IHt9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBzdGFydEZsb3dcbiAgfTtcbn07XG5jb25zdCBydW5BaXJ3YWxsZXhLbGFybmFGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGxvZ19fJGkoYFJ1bm5pbmcgS2xhcm5hIGZsb3cuLi5gLCBjdXN0b21QYXJhbXMpO1xuICAgICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgICAgY29uc3QgaXNBbm9ueW1vdXMgPSBmYWxzZTtcbiAgICAgIGxvZ19fJGkoYFZlcmlmeWluZyBDUE0uLi5gKTtcbiAgICAgIGNvbnN0IGNwbSA9IEFpcndhbGxleEtsYXJuYUNwbS5wYXJzZShjaGVja291dFBheW1lbnRNZXRob2QpO1xuICAgICAgbG9nX18kaShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc2ApO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLCB7XG4gICAgICAgIC4uLmlzQW5vbnltb3VzID8gZ2VuZXJhdGVBbm9ueW1vdXNWYWx1ZXMoKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXdDdXN0b21lckZpZWxkcyA9IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgICBsb2dfXyRpKFwiTmV3IGN1c3RvbWVyIGZpZWxkc1wiLCBuZXdDdXN0b21lckZpZWxkcyk7XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KTtcbiAgICAgIGNvbnNvbGUubG9nKFwic3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJrbGFybmFcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjcG0sXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kczogW11cbiAgICAgICAgfSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRqKFwiS2xhcm5hIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBwYXltZW50X21ldGhvZDogXCJrbGFybmFcIiwgZXJyb3I6IGVyciB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgQXBwbGVQYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHByZXBhcmVQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKGZvcm1JbnB1dHMsIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIGNvbnRleHQucHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IG1vYmlsZVdhbGxldFBheW1lbnREYXRhID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4ucGF5bWVudERhdGEpKVxuICAgIH07XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogbW9iaWxlV2FsbGV0UGF5bWVudERhdGFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGgsIGVycl9fOiBlcnJfXyRpIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF1dGhuZXQtYXBwbGVwYXlcIik7XG5jb25zdCBpbml0QXV0aG5ldEFwcGxlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtKTtcbiAgICBpZiAoIWFwcGxlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGgoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJGgoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJGgoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYXBwbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kaShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBlcnJcbiAgICAgICAgfSk7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uQXBwbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQXV0aG5ldEFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBwcmVmaWxsLFxuICAgICAgZGVmYXVsdExhYmVsOiBhcHBsZVBheUNwbT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2Vzc2lvbi5vbmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kaChcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbml0aWFsUHJldmlldzIgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogY3JlYXRlQXBwbGVQYXlUb3RhbCh7XG4gICAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiBpbml0aWFsUHJldmlldzIsXG4gICAgICAgICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgICAgIHByZWZpbGxcbiAgICAgICAgICB9KS50b3RhbFxuICAgICAgICB9O1xuICAgICAgICBzZXNzaW9uLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih1cGRhdGUpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGVycl9fJGkoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRnLCBlcnJfXzogZXJyX18kaCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhdXRobmV0LWdvb2dsZXBheVwiKTtcbmNvbnN0IGluaXRBdXRobmV0R29vZ2xlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJGcoXCJJbml0aWFsaXppbmcgQXV0aG5ldCBHb29nbGVQYXkgZmxvd1wiKTtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtKTtcbiAgICBpZiAoIWdvb2dsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRnKFwiR29vZ2xlIFBheSBDUE1cIiwgZ29vZ2xlUGF5Q3BtKTtcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgZXJyX18kaChcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGcoXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpO1xuICAgIGF3YWl0IGxvYWRHb29nbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5nb29nbGU/LnBheW1lbnRzPy5hcGkpIHtcbiAgICAgIGVycl9fJGgoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRnKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgcHJlZmlsbCxcbiAgICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgY2xpZW50LmlzUmVhZHlUb1BheShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kZyhcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRoKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3Qgb25Hb29nbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBPanNGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZ29vZ2xlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGgoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBlcnJcbiAgICAgICAgfSk7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uR29vZ2xlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkF1dGhuZXRHb29nbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3QgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgIHByZWZpbGwsXG4gICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgdHJhY2soXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgY2xpZW50LmxvYWRQYXltZW50RGF0YShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgbG9nX18kZyhcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5KG5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNyeXB0ZWRQYXltZW50VG9rZW4gPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW47XG4gICAgICBpZiAoIWVuY3J5cHRlZFBheW1lbnRUb2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGcoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkdPT0dMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICAgICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKGVuY3J5cHRlZFBheW1lbnRUb2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kaChcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZiwgZXJyX186IGVycl9fJGcgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY3licy1mcmFtZVwiKTtcbmNvbnN0IGF0dGFjaERldmljZURhdGFDb2xsZWN0b3IgPSAocG9zdFVybCwgYWNjZXNzVG9rZW4pID0+IHtcbiAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgaWZyYW1lLm5hbWUgPSBcImNhcmRpbmFsX2NvbGxlY3Rpb25faWZyYW1lXCI7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gIGlmcmFtZS5zdHlsZS53aWR0aCA9IFwiMTBweFwiO1xuICBpZnJhbWUuc3R5bGUuaGVpZ2h0ID0gXCIxMHB4XCI7XG4gIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgZm9ybS5hY3Rpb24gPSBwb3N0VXJsO1xuICBmb3JtLm1ldGhvZCA9IFwiUE9TVFwiO1xuICBmb3JtLnRhcmdldCA9IGlmcmFtZS5uYW1lO1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgaW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gIGlucHV0Lm5hbWUgPSBcIkpXVFwiO1xuICBpbnB1dC52YWx1ZSA9IGFjY2Vzc1Rva2VuO1xuICBmb3JtLmFwcGVuZENoaWxkKGlucHV0KTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZvcm0pO1xuICBjb25zdCBkZXRhY2ggPSAoKSA9PiB7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZm9ybSk7XG4gIH07XG4gIHJldHVybiB7IGZvcm0sIGRldGFjaCB9O1xufTtcbmNvbnN0IHJ1bkRldmljZURhdGFDb2xsZWN0aW9uID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHsgcG9zdFVybCwgYWNjZXNzVG9rZW4gfSA9IHBhcmFtcztcbiAgICBjb25zdCBleHBlY3RlZE9yaWdpbiA9IG5ldyBVUkwocG9zdFVybCkub3JpZ2luO1xuICAgIGNvbnN0IHsgZm9ybSwgZGV0YWNoIH0gPSBhdHRhY2hEZXZpY2VEYXRhQ29sbGVjdG9yKHBvc3RVcmwsIGFjY2Vzc1Rva2VuKTtcbiAgICBsb2dfXyRmKFwiQXR0YWNoZWQgZGV2aWNlIGRhdGEgY29sbGVjdG9yXCIpO1xuICAgIGNvbnN0IGhhbmRsZUNvbGxlY3Rpb25FdmVudCA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50Lm9yaWdpbiAhPT0gZXhwZWN0ZWRPcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG4gICAgICBsb2dfXyRmKFwiUmVjZWl2ZWQgZXZlbnQgZnJvbSBkZXZpY2UgZGF0YSBjb2xsZWN0b3I6XCIsIGRhdGEpO1xuICAgICAgaWYgKGRhdGFbXCJNZXNzYWdlVHlwZVwiXSA9PT0gXCJwcm9maWxlLmNvbXBsZXRlZFwiKSB7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGRldGFjaCgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZUNvbGxlY3Rpb25FdmVudCk7XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZUNvbGxlY3Rpb25FdmVudCk7XG4gICAgICBsb2dfXyRmKFwiQXR0YWNoZWQgbGlzdGVuZXIgdG8gd2luZG93XCIpO1xuICAgICAgZm9ybS5zdWJtaXQoKTtcbiAgICAgIGxvZ19fJGYoXCJTdWJtaXR0ZWQgZm9ybVwiKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyX18kZyhcIkVycm9yIHN1Ym1pdHRpbmcgZm9ybTpcIiwgZXJyb3IpO1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IHJ1blBheWVyQXV0aCA9IChwYXJhbXMpID0+IHtcbiAgY29uc3QgeyBzdGVwVXBVcmwsIGFjY2Vzc1Rva2VuLCBtZXJjaGFudERhdGEsIGlmcmFtZSwgaG9zdCB9ID0gcGFyYW1zO1xuICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZvcm1cIik7XG4gIGZvcm0uYWN0aW9uID0gc3RlcFVwVXJsO1xuICBmb3JtLm1ldGhvZCA9IFwiUE9TVFwiO1xuICBmb3JtLnRhcmdldCA9IGlmcmFtZS5uYW1lO1xuICBjb25zdCB0b2tlbklucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICB0b2tlbklucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICB0b2tlbklucHV0Lm5hbWUgPSBcIkpXVFwiO1xuICB0b2tlbklucHV0LnZhbHVlID0gYWNjZXNzVG9rZW47XG4gIGNvbnN0IG1kSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIG1kSW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gIG1kSW5wdXQubmFtZSA9IFwiTURcIjtcbiAgbWRJbnB1dC52YWx1ZSA9IG1lcmNoYW50RGF0YTtcbiAgZm9ybS5hcHBlbmRDaGlsZCh0b2tlbklucHV0KTtcbiAgZm9ybS5hcHBlbmRDaGlsZChtZElucHV0KTtcbiAgaG9zdC5hcHBlbmRDaGlsZChmb3JtKTtcbiAgcmV0dXJuIGZvcm07XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRlLCBlcnJfXzogZXJyX18kZiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjeWJzXCIpO1xuY29uc3QgQ3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkID0gei5vYmplY3Qoe1xuICBzdGVwX3VwX3VybDogei5zdHJpbmcoKSxcbiAgYWNjZXNzX3Rva2VuOiB6LnN0cmluZygpLFxuICBkZF91cmw6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgZGRfdG9rZW46IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgbWVyY2hhbnRfZGF0YTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBGUklFTkRMWV9FUlIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQxID0gKHVzZXJBY3Rpb24pID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBDeWJlcnNvdXJjZUFjdGlvblBheWxvYWQuc2FmZVBhcnNlKHVzZXJBY3Rpb24pO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRmKGBDeWJlcnNvdXJjZSAzRFMgaXMgcmVxdWlyZWQgYnV0IHVzZXIgYWN0aW9uIGlzIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihGUklFTkRMWV9FUlIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0N5YmVyc291cmNlM2RzID0gKHVzZXJBY3Rpb24pID0+IHtcbiAgcmV0dXJuIHVzZXJBY3Rpb25bXCJ0eXBlXCJdID09PSBcImN5YmVyc291cmNlX3BheWVyX2F1dGhcIjtcbn07XG5jb25zdCBoYW5kbGVDeWJlcnNvdXJjZTNkcyA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3QgeyBzdGVwVXBVcmwsIGFjY2Vzc1Rva2VuLCBtZXJjaGFudERhdGEsIGlmcmFtZSwgaG9zdCwgY2FuY2VsQnV0dG9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGV4cGVjdGVkT3JpZ2luID0gbmV3IFVSTChzdGVwVXBVcmwpLm9yaWdpbjtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGxvZ19fJGUoXCJDbGVhbmluZyB1cCBDeWJlcnNvdXJjZSAzRFMgZmxvd1wiKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgbG9nX18kZShcIkN5YmVyc291cmNlIDNEUyBjYW5jZWxsZWRcIik7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIGxvZ19fJGUoXCJDeWJlcnNvdXJjZSAzRFMgY29tcGxldGVkIHdpdGggc3RhdHVzOlwiLCBzdGF0dXMpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogc3RhdHVzLnN0YXR1cywgY2xlYW51cCB9KTtcbiAgICAgIGNsZWFudXBQb2xsaW5nKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoaWZyYW1lLCBvblN1Y2Nlc3MsIGV4cGVjdGVkT3JpZ2luLCBcInBpbmctM2RzLXN0YXR1c1wiLCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UpO1xuICAgIGNvbnN0IGNsZWFudXBQb2xsaW5nID0gaGFuZGxlRXZlbnRzKHtcbiAgICAgIGVsZW1lbnRzOiB7IGhvc3QsIGNhbmNlbEJ1dHRvbiB9LFxuICAgICAgcG9sbGluZ0ludGVydmFsLFxuICAgICAgcmVzb2x2ZTogKHN0YXR1cykgPT4ge1xuICAgICAgICByZXNvbHZlKHsgc3RhdHVzOiBzdGF0dXMuc3RhdHVzLCBjbGVhbnVwIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgIGNvbnN0IGZvcm0gPSBydW5QYXllckF1dGgoe1xuICAgICAgc3RlcFVwVXJsLFxuICAgICAgYWNjZXNzVG9rZW4sXG4gICAgICBtZXJjaGFudERhdGEsXG4gICAgICBpZnJhbWUsXG4gICAgICBob3N0XG4gICAgfSk7XG4gICAgZm9ybS5zdWJtaXQoKTtcbiAgfSk7XG59O1xuY29uc3QgcnVuQ3liZXJzb3VyY2UzZHNGbG93ID0gYXN5bmMgKHVzZXJBY3Rpb24pID0+IHtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDEodXNlckFjdGlvbik7XG4gIGNvbnN0IHsgc3RlcF91cF91cmwsIGFjY2Vzc190b2tlbiwgZGRfdXJsLCBkZF90b2tlbiwgbWVyY2hhbnRfZGF0YSB9ID0gcGF5bG9hZDtcbiAgaWYgKGRkX3VybCAmJiBkZF90b2tlbikge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZXN1bHQgPSBhd2FpdCBydW5EZXZpY2VEYXRhQ29sbGVjdGlvbih7XG4gICAgICBwb3N0VXJsOiBkZF91cmwsXG4gICAgICBhY2Nlc3NUb2tlbjogZGRfdG9rZW5cbiAgICB9KTtcbiAgICBsb2dfXyRlKFwiRGV2aWNlIGRhdGEgY29sbGVjdGlvbiBjb21wbGV0ZWQgd2l0aCBzdGF0dXM6XCIsIGNvbGxlY3Rpb25SZXN1bHQuU3RhdHVzKTtcbiAgfSBlbHNlIHtcbiAgICBlcnJfXyRmKFwiTm8gZGV2aWNlIGRhdGEgY29sbGVjdGlvbiBVUkwgb3IgdG9rZW4gcHJvdmlkZWRcIik7XG4gIH1cbiAgY29uc3QgeyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9ID0gY3JlYXRlQW5kT3BlbkZyYW1lKFwiXCIsIHsgbmFtZTogXCJjYXJkaW5hbF9hdXRoX2lmcmFtZVwiIH0pO1xuICBsb2dfXyRlKFwiUnVubmluZyBDeWJlcnNvdXJjZSAzRFMgZmxvd1wiKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQ3liZXJzb3VyY2UzZHMoe1xuICAgIHN0ZXBVcFVybDogc3RlcF91cF91cmwsXG4gICAgYWNjZXNzVG9rZW46IGFjY2Vzc190b2tlbixcbiAgICBtZXJjaGFudERhdGE6IG1lcmNoYW50X2RhdGEsXG4gICAgaWZyYW1lLFxuICAgIGhvc3QsXG4gICAgY2FuY2VsQnV0dG9uXG4gIH0pO1xuICByZXN1bHQuY2xlYW51cCgpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLlNVQ0NFU1MpIHtcbiAgICBsb2dfXyRlKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIik7XG4gICAgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRkLCBlcnJfXzogZXJyX18kZSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb2NreXQtY2NcIik7XG5jb25zdCBQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWA7XG4gICAgZXJyX18kZShkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgcGFyc2VWYXVsdElkRnJvbTNkc0hyZWYgPSAoaHJlZikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHZhdWx0SWQgPSBuZXcgVVJMKGhyZWYgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCF2YXVsdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgbG9nX18kZChgM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbVmF1bHQgSUQ6ICR7dmF1bHRJZH1dYCk7XG4gICAgcmV0dXJuIHZhdWx0SWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyTXNnID0gYEVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5gO1xuICAgIGVycl9fJGUoZXJyTXNnLCBgUmVzdWx0aW5nIFVSTDogJHtocmVmfS5cbkVycm9yOiAke2dldEVycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gIH1cbn07XG5jb25zdCBwYXJzZUFyZ0Zyb21IcmVmID0gKGhyZWYsIGFyZ05hbWUpID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChocmVmKTtcbiAgcmV0dXJuIHVybC5zZWFyY2hQYXJhbXMuZ2V0KGFyZ05hbWUpO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLXBvY2t5dC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcnVuUG9ja3l0M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCh7IHVybDogaGVhZGVyc1tcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsIH0pO1xuICBjb25zdCB2YXVsdElkID0gcGFyc2VWYXVsdElkRnJvbTNkc0hyZWYocmVzdWx0LmhyZWYgPz8gXCJcIik7XG4gIGNvbnN0IGV4dHJhTWV0YWRhdGFGb3JDaGVja291dCA9IHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgdmF1bHRfaWQ6IHZhdWx0SWQsXG4gICAgICB0cmFuc2FjdGlvbl9ubzogaGVhZGVyc1tcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IGhlYWRlcnNbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xuICByZXR1cm4gZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0O1xufTtcblxuY29uc3QgeyBsb2dfXzogc3RyaXBlTG9nX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWNjXCIpO1xuY29uc3QgU3RyaXBlM0RTTWV0YWRhdGFQYXlsb2FkID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBzdHJpcGVDQzNEU0Zsb3cgPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhKSA9PiB7XG4gIHRyYWNrKFwiM2RzX3N0cmlwZV9yZWRpcmVjdFwiLCB7XG4gICAgLi4ubmV4dEFjdGlvbk1ldGFkYXRhXG4gIH0pO1xuICBzdHJpcGVMb2dfXyhg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApO1xuICBhd2FpdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93KG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gIHRyYWNrKFwiM2RzX3N0cmlwZV9jb21wbGV0ZVwiKTtcbiAgc3RyaXBlTG9nX18oXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59O1xuY29uc3QgcGFyc2VVc2VyRkVQYXlsb2FkID0gKHBheWxvYWQpID0+IHtcbiAgY29uc3QgcGFyc2VkID0gU3RyaXBlM0RTTWV0YWRhdGFQYXlsb2FkLnNhZmVQYXJzZShwYXlsb2FkKTtcbiAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIDNEUyBtZXRhZGF0YSBoYXMgdW5leHBlY3RlZCBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkocGFyc2VkLmVycm9yLmVycm9ycyl9YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdHJpcGVfcGs6IHBhcnNlZC5kYXRhLnN0cmlwZV9wayxcbiAgICBjbGllbnRfc2VjcmV0OiBwYXJzZWQuZGF0YS5jbGllbnRfc2VjcmV0LFxuICAgIHN0cmlwZV9wbV9pZDogcGFyc2VkLmRhdGEuc3RyaXBlX3BtX2lkXG4gIH07XG59O1xuXG5jb25zdCBNQVhfQ09ORklSTV9MT09QX0lURVJBVElPTlMgPSA0O1xuY29uc3QgeyBsb2dfXzogbG9nX18kYywgZXJyX186IGVycl9fJGQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwidW5pZmllZC1jY1wiKTtcbmNvbnN0IHVuc2FmZWx5UnVuVW5pZmllZENjRmxvdyA9IGFzeW5jICh7XG4gIGNvbnRleHQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgZm9ybUNhbGxiYWNrcyxcbiAgY3VzdG9tUGFyYW1zXG59KSA9PiB7XG4gIGxvZ19fJGMoYOKUnCBSdW5uaW5nIHVuaWZpZWQgQ0MgZmxvdy4uLmAsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kIH0pO1xuICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgbG9nX18kYyhg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBjb21tb25DaGVja291dFBhcmFtcyA9IHtcbiAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luLFxuICAgICAgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBpbiB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBsb2dzXG4gICAgICBkZXZpY2VUb2tlbjogZ2V0RGV2aWNlVG9rZW4oKVxuICAgIH0sXG4gICAgdXNlX3VuaWZpZWRfY2NfZmxvdzogdHJ1ZSxcbiAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHtcbiAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgIH0sXG4gICAgcGF5bWVudF9yb3V0ZV9pZDogY3VzdG9tUGFyYW1zLnBheW1lbnRSb3V0ZUlkXG4gIH07XG4gIGVycl9fJGQoY3VzdG9tUGFyYW1zLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gIGxvZ19fJGMoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBQYXJ0aWFsIFBNcyBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgY29uc3QgdG9rZW5pemVDYXJkUmVzdWx0cyA9IGF3YWl0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMoY3VzdG9tUGFyYW1zLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgfSk7XG4gIHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyh0b2tlbml6ZUNhcmRSZXN1bHRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gIGNvbnN0IHN0YXJ0UGZSZXN1bHQgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICBsb2dfXyRjKGDilJwgc3RhcnRQZiByZXN1bHRgLCBzdGFydFBmUmVzdWx0KTtcbiAgaWYgKHN0YXJ0UGZSZXN1bHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgIHJldHVybiByZXR1cm5TdWNjZXNzUmVzdWx0KHByZWZpbGwubW9kZSwgc3RhcnRQZlJlc3VsdCk7XG4gIH1cbiAgaWYgKCFzdGFydFBmUmVzdWx0LmNoZWNrb3V0X2F0dGVtcHRfaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBjaGVja291dCBhdHRlbXB0IElEIGZyb20gUEYgcmVzdWx0XCIpO1xuICB9XG4gIHJldHVybiBydW5Db25maXJtTG9vcCh7XG4gICAgY29udGV4dCxcbiAgICBwcmVmaWxsLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICBzdGFydFBmUmVzdWx0LFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkOiBzdGFydFBmUmVzdWx0LmNoZWNrb3V0X2F0dGVtcHRfaWRcbiAgfSk7XG59O1xuY29uc3QgcnVuQ29uZmlybUxvb3AgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb250ZXh0LFxuICAgIHByZWZpbGwsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjb21tb25DaGVja291dFBhcmFtcyxcbiAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgIHN0YXJ0UGZSZXN1bHQsXG4gICAgY2hlY2tvdXRBdHRlbXB0SWRcbiAgfSA9IHBhcmFtcztcbiAgbGV0IHBmUmVzdWx0ID0gc3RhcnRQZlJlc3VsdDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBNQVhfQ09ORklSTV9MT09QX0lURVJBVElPTlM7IGkrKykge1xuICAgIGxvZ19fJGMoYOKUnCBSdW5uaW5nIGNvbmZpcm0gbG9vcCBpdGVyYXRpb24gJHtpfWApO1xuICAgIHRyYWNrKFwidW5pZmllZF9jY19jb25maXJtX2xvb3BfaXRlcmF0aW9uXCIsIHsgaXRlcmF0aW9uOiBpIH0pO1xuICAgIGNvbnN0IHsgdXNlckFjdGlvbiB9ID0gdmFsaWRhdGVQZlJlc3VsdFVzZXJBY3Rpb24ocGZSZXN1bHQpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1c2VyQWN0aW9uUmVzdWx0ID0gYXdhaXQgcnVuUmVxdWlyZWRVc2VyQWN0aW9uKGNvbnRleHQuYmFzZVVybCwgdXNlckFjdGlvbiwgcHJlZmlsbCwgbm9uQ2RlRm9ybUlucHV0cyk7XG4gICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YSA9IHtcbiAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEsXG4gICAgICAgIC4uLnVzZXJBY3Rpb25SZXN1bHQubWV0YWRhdGFGb3JDb25maXJtU3RlcFxuICAgICAgfTtcbiAgICAgIGxvZ19fJGMoYOKUnCBOZXcgZXh0cmEgbWV0YWRhdGFgLCBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBlcnJfXyRkKGDilJwgRXJyb3IgaW4gcnVubmluZyB1c2VyIGFjdGlvbiBpbiBpdGVyYXRpb24gJHtpfS4gQ29udGludWluZyB0byBjb25maXJtIHN0ZXAuLi5gLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgdHJhY2soXCJ1bmlmaWVkX2NjX3VzZXJfYWN0aW9uX2Vycm9yXCIsIHsgZXJyb3JfbWVzc2FnZTogZXJyb3JNZXNzYWdlLCBpdGVyYXRpb246IGkgfSk7XG4gICAgfVxuICAgIHBmUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGNoZWNrb3V0QXR0ZW1wdElkLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVxuICAgIH0pO1xuICAgIGxvZ19fJGMoYOKUnCBjb25maXJtUGYgcmVzdWx0IChpdGVyYXRpb24gJHtpfSlgLCBwZlJlc3VsdCk7XG4gICAgaWYgKHBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXR1cm5TdWNjZXNzUmVzdWx0KHByZWZpbGwubW9kZSwgcGZSZXN1bHQpO1xuICAgIH1cbiAgfVxuICB0cmFjayhcInVuaWZpZWRfY2NfdW5leHBlY3RlZF9icmFuY2hcIiwge1xuICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICBjaGVja291dF9hdHRlbXB0X2lkOiBwZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgIGNvbmZpcm1QRlJlc3VsdDogcGZSZXN1bHRcbiAgfSk7XG4gIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGVycm9yLCBwbGVhc2UgdHJ5IGFub3RoZXIgcGF5bWVudCBtZXRob2RcIik7XG59O1xuY29uc3QgcnVuUmVxdWlyZWRVc2VyQWN0aW9uID0gYXN5bmMgKGJhc2VVcmwsIHVzZXJBY3Rpb24sIHByZWZpbGwsIG5vbkNkZUZvcm1JbnB1dHMpID0+IHtcbiAgaWYgKHVzZXJBY3Rpb24uX3VuaWZpZWRfY2NfYWN0aW9uX25hbWUgPT09IFwiM0RTX1JFUVVJUkVEXCIpIHtcbiAgICBpZiAodXNlckFjdGlvbi50eXBlID09PSBcInN0cmlwZV8zZHNcIikge1xuICAgICAgYXdhaXQgc3RyaXBlQ0MzRFNGbG93KHBhcnNlVXNlckZFUGF5bG9hZCh1c2VyQWN0aW9uKSk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzKHVzZXJBY3Rpb24pKSB7XG4gICAgICBjb25zdCBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWlyd2FsbGV4M2RzRmxvdyhiYXNlVXJsLCB1c2VyQWN0aW9uKTtcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHsgYWlyd2FsbGV4OiBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0IH0gfTtcbiAgICB9IGVsc2UgaWYgKGNoZWNrSWZSZXF1aXJlc0FkeWVuM2RzKHVzZXJBY3Rpb24pKSB7XG4gICAgICBjb25zdCBhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5BZHllbjNkc0Zsb3coXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgICAgICB1c2VyQWN0aW9uLFxuICAgICAgICBwcmVmaWxsLmxvY2FsZVxuICAgICAgKTtcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHsgYWR5ZW46IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dCB9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmUmVxdWlyZXNDeWJlcnNvdXJjZTNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgYXdhaXQgcnVuQ3liZXJzb3VyY2UzZHNGbG93KHVzZXJBY3Rpb24pO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB9IGVsc2UgaWYgKGNoZWNrSWZMZWdhY3kzRFNQYXRoKHVzZXJBY3Rpb24pKSB7XG4gICAgICBhd2FpdCBjb21tb25DQzNEU0Zsb3coeyByZXF1aXJlZF91c2VyX2FjdGlvbnM6IFt1c2VyQWN0aW9uXSB9LCBiYXNlVXJsKTtcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHt9IH07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIDNEUyB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh1c2VyQWN0aW9uKX1gKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcmVxdWlyZWQgdXNlciBhY3Rpb246ICR7SlNPTi5zdHJpbmdpZnkodXNlckFjdGlvbil9YCk7XG4gIH1cbn07XG5jb25zdCBjaGVja0lmTGVnYWN5M0RTUGF0aCA9ICh1c2VyQWN0aW9uKSA9PiB7XG4gIHRyeSB7XG4gICAgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoW3VzZXJBY3Rpb25dKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCB2YWxpZGF0ZVBmUmVzdWx0VXNlckFjdGlvbiA9IChwZlJlc3VsdCkgPT4ge1xuICBpZiAoIXBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIHJlcXVpcmVkIHVzZXIgYWN0aW9uc1wiKTtcbiAgfSBlbHNlIGlmIChwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICB9IGVsc2UgaWYgKHBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbXVsdGlwbGUgcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICB9XG4gIGNvbnN0IHVzZXJBY3Rpb24gPSBVc2VyQWN0aW9uRkVQYXlsb2FkLnNhZmVQYXJzZShwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xuICBpZiAoIXVzZXJBY3Rpb24uc3VjY2Vzcykge1xuICAgIGVycl9fJGQoXCJVc2VyIGFjdGlvbiByYXcgcGF5bG9hZFwiLCBwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xuICAgIGVycl9fJGQoXCJQYXJzaW5nIGVycm9yXCIsIHVzZXJBY3Rpb24uZXJyb3IpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IHNjaGVtYSBvZiB1c2VyIGFjdGlvbiBwYXlsb2FkIGlzIG5vdCB2YWxpZFwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHVzZXJBY3Rpb246IHVzZXJBY3Rpb24uZGF0YVxuICB9O1xufTtcbmNvbnN0IHJldHVyblN1Y2Nlc3NSZXN1bHQgPSAocHJlZmlsbE1vZGUsIHBmUmVzdWx0KSA9PiB7XG4gIGlmIChwcmVmaWxsTW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgY29uc3QgcGF5bWVudE1ldGhvZElkID0gcGZSZXN1bHQuY2NfcG1faWQgPz8gcGZSZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0uaWQ7XG4gICAgaWYgKCFwYXltZW50TWV0aG9kSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIENDIFBNIElEIG9yIHBheW1lbnRfbWV0aG9kcyBmb3VuZCBpbiBQRiByZXN1bHRcIik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IHBheW1lbnRNZXRob2RJZFxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFwZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBjaGVja291dCBzdWNjZXNzIHJlc3BvbnNlIGZyb20gc3RhcnRQRlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogcGZSZXN1bHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGIsIGVycl9fOiBlcnJfXyRjIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgcnVuQ29tbW9uQ2NGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kYihg4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5gLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZCB9KTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIHRyYWNrKFwiY29tbW9uX2NjX2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICAuLi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcmVmaWxsXG4gICAgfSk7XG4gICAgY29uc3QgdW5pZmllZENDUm9sbG91dFJhdGlvID0gcHJlZmlsbC5maW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M/LltcInVuaWZpZWRfY2NcIl0gPz8gMDtcbiAgICBsb2dfXyRiKGDilJwgVW5pZmllZCBDQyByb2xsb3V0OiAke01hdGgucm91bmQodW5pZmllZENDUm9sbG91dFJhdGlvICogMTAwKX0lYCk7XG4gICAgY29uc3Qgcm9sbCA9IE1hdGgucmFuZG9tKCk7XG4gICAgY29uc3QgdXNlVW5pZmllZENDRmxvdyA9IHJvbGwgPCB1bmlmaWVkQ0NSb2xsb3V0UmF0aW87XG4gICAgY29uc3QgdWNjUm9sbFRyYWNraW5nTWV0YWRhdGEgPSB7XG4gICAgICByb2xsLFxuICAgICAgdW5pZmllZENDUm9sbG91dFJhdGlvLFxuICAgICAgdXNlVW5pZmllZENDRmxvd1xuICAgIH07XG4gICAgaWYgKHVzZVVuaWZpZWRDQ0Zsb3cpIHtcbiAgICAgIGxvZ19fJGIoYOKUnCBQaWNrZWQgdW5pZmllZCBDQyBmbG93ICgke3JvbGx9IHZzICR7dW5pZmllZENDUm9sbG91dFJhdGlvfSlgKTtcbiAgICAgIHRyYWNrKFwidW5pZmllZF9jY19mbG93X3BpY2tlZFwiLCB1Y2NSb2xsVHJhY2tpbmdNZXRhZGF0YSk7XG4gICAgICByZXR1cm4gdW5zYWZlbHlSdW5VbmlmaWVkQ2NGbG93KHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXMsXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJGIoYOKUnCBQaWNrZWQgbGVnYWN5IENDIGZsb3cgKCR7cm9sbH0gdnMgJHt1bmlmaWVkQ0NSb2xsb3V0UmF0aW99KWApO1xuICAgICAgdHJhY2soXCJsZWdhY3lfY2NfZmxvd19waWNrZWRcIiwgdWNjUm9sbFRyYWNraW5nTWV0YWRhdGEpO1xuICAgIH1cbiAgICBsb2dfXyRiKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3ByZWZpbGwubW9kZX1dYCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgcHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICk7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbW1vbkNoZWNrb3V0UGFyYW1zID0ge1xuICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICB9LFxuICAgICAgdXNlX3VuaWZpZWRfY2NfZmxvdzogZmFsc2UsXG4gICAgICBwYXltZW50X3JvdXRlX2lkOiBjdXN0b21QYXJhbXMucGF5bWVudFJvdXRlSWQsXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKSxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncylcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBsb2dfXyRiKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgdG9rZW5pemVDYXJkUmVzdWx0cyA9IGF3YWl0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMoY3VzdG9tUGFyYW1zLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkXG4gICAgICB9KTtcbiAgICAgIHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyh0b2tlbml6ZUNhcmRSZXN1bHRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgbG9nX18kYihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtwcmVmaWxsLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2V0dXBDaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJGIoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtyZXN1bHQucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kYihg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kYihg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIENkZUVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICAgIGxvZ19fJGIoYOKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dgKTtcbiAgICAgICAgICBsb2dfXyRiKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHRyYWNrKFwiM2RzX3JlcXVpcmVkXCIsIHtcbiAgICAgICAgICAgIC4uLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgICAgIC4uLmVycm9yLnJlc3BvbnNlLmhlYWRlcnNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBlcnJIZWFkZXJzID0gZXJyb3IucmVzcG9uc2UuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgICBpZiAoXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiIGluIGVyckhlYWRlcnMpIHtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4aXN0aW5nX2NjX3BtX2lkID0gZXJySGVhZGVyc1tcIm9wLWV4aXN0aW5nLWNjLXBtLWlkXCJdO1xuICAgICAgICAgICAgbG9nX18kYihg4pScIEV4aXN0aW5nIENDIFBNIElEOiAke2NvbW1vbkNoZWNrb3V0UGFyYW1zLmV4aXN0aW5nX2NjX3BtX2lkfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXF1aXJlc1BvY2t5dDNkcyA9IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyhlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNQb2NreXQzZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1blBvY2t5dDNkc0Zsb3coY29udGV4dC5iYXNlVXJsLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wicG9ja3l0XCJdID0gcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNBaXJ3YWxsZXgzZHMgPSBjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWlyd2FsbGV4M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyRiKGDilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5BaXJ3YWxsZXgzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcImFpcndhbGxleFwiXSA9IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQWR5ZW4zZHMgPSBjaGVja0lmUmVxdWlyZXNBZHllbjNkcyhlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNBZHllbjNkcykge1xuICAgICAgICAgICAgbG9nX18kYihg4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWR5ZW4zZHNGbG93KFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgICAgcHJlZmlsbC5sb2NhbGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcImFkeWVuXCJdID0gYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdGFydFBmUmVzdWx0ID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvckNDKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgICBsb2dfXyRiKGDilJwgU3RhcnQgcGF5bWVudCBmbG93IHJlc3VsdDpgLCBzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICBjb25zdCBjeWJlcnNvdXJjZUFjdGlvbiA9IHN0YXJ0UGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoXG4gICAgICAgICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJjeWJlcnNvdXJjZV9wYXllcl9hdXRoXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChjeWJlcnNvdXJjZUFjdGlvbikge1xuICAgICAgICAgICAgbG9nX18kYihg4pScIEN5YmVyc291cmNlIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEN5YmVyc291cmNlIDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgY3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkID0gQ3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkLnBhcnNlKGN5YmVyc291cmNlQWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGN5YmVyc291cmNlTWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkN5YmVyc291cmNlM2RzRmxvdyh7XG4gICAgICAgICAgICAgIC4uLmN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCxcbiAgICAgICAgICAgICAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IFwiXCIsXG4gICAgICAgICAgICAgIF91bmlmaWVkX2NjX3BjY3NfaWQ6IFwiXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJjeWJlcnNvdXJjZVwiXSA9IGN5YmVyc291cmNlTWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc2hvdWxkVXNlU3RyaXBlRmxvdyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnM/LltcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0gIT09IFwidHJ1ZVwiO1xuICAgICAgICAgIGlmICghcmVxdWlyZXNQb2NreXQzZHMgJiYgIWN5YmVyc291cmNlQWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXNlU3RyaXBlRmxvdykge1xuICAgICAgICAgICAgICBsb2dfXyRiKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93YCk7XG4gICAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2dfXyRiKGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93YCk7XG4gICAgICAgICAgICAgIGF3YWl0IGNvbW1vbkNDM0RTRmxvdyhzdGFydFBmUmVzdWx0LCBjb250ZXh0LmJhc2VVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dfXyRiKGDilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjY1BtSWQgPSBzdGFydFBmUmVzdWx0LmNjX3BtX2lkO1xuICAgICAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgICAgbG9nX18kYihg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtjY1BtSWR9XWApO1xuICAgICAgICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGNjUG1JZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyRiKGDilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpgLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nX18kYihg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHshc2hvdWxkVXNlU3RyaXBlRmxvdyA/IFwibmV3XCIgOiBcImxlZ2FjeVwifV1gKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBjY1BtSWQsXG4gICAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHNob3VsZFVzZVN0cmlwZUZsb3dcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kYihg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyX18kYyhg4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFYCk7XG4gICAgICBlcnJfXyRjKGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IHBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IHN0cmlwZUFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghc3RyaXBlQWN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIH1cbiAgcmV0dXJuIFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShzdHJpcGVBY3Rpb24pO1xufTtcbmNvbnN0IGNvbW1vbjNEU0FjdGlvblR5cGVzID0gW1wiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiLCBcImFkeWVuXCJdO1xuY29uc3QgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PiB7XG4gIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGNvbW1vbjNEU0FjdGlvblR5cGVzLmluY2x1ZGVzKGFjdGlvbi50eXBlKSk7XG4gIGlmICghY29tbW9uQWN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tbW9uIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIH1cbiAgcmV0dXJuIENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShjb21tb25BY3Rpb24pO1xufTtcbmNvbnN0IGNvbW1vbkNDM0RTRmxvdyA9IGFzeW5jIChzdGFydFBmUmVzdWx0LCBiYXNlVXJsKSA9PiB7XG4gIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwgPT09IFwiM0RTX0NPTVBMRVRFXCIpIHtcbiAgICBsb2dfXyRiKGDilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseWApO1xuICAgIHRyYWNrKFwiM2RzX2NvbXBsZXRlXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBsb2dfXyRiKGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93IFtVUkw6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybH1dYCk7XG4gIHRyYWNrKFwiM2RzX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5uZXh0QWN0aW9uTWV0YWRhdGFcbiAgfSk7XG4gIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7IHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCwgYmFzZVVybCB9KTtcbiAgbG9nX18kYihg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0cmFjayhcIjNkc19jYW5jZWxsZWRcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdHJhY2soXCIzZHNfZmFpbHVyZVwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfVxuICB0cmFjayhcImNvbW1vbl8zZHNfY29tcGxldGVkXCIpO1xufTtcblxuY29uc3QgTG9vcENyeXB0b0NwbSA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImxvb3BcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJjcnlwdG9cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCksXG4gICAgZW50aXR5X2lkOiB6LnN0cmluZygpLFxuICAgIGFwaV90b2tlbjogei5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKVxuICB9KVxufSk7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGEsIGVycl9fOiBlcnJfXyRiIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImxvb3AtY3J5cHRvXCIpO1xuY29uc3QgaW5pdExvb3BGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCB9KSA9PiB7XG4gICAgbG9nX18kYShgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBMb29wQ3J5cHRvQ3BtKTtcbiAgICBsb2dfXyRhKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkoY2hlY2tvdXRQYXltZW50TWV0aG9kKX1gKTtcbiAgICBsb2dfXyRhKGBTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uYCk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoY29udGV4dC5hbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoXG4gICAgICBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBwcmVmaWxsLnRva2VuLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICB2b2lkIDBcbiAgICApO1xuICAgIGlmICghaXNTZXR1cE1vZGUgJiYgIWNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhwcmVmaWxsLmN1cnJlbmN5KSkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDdXJyZW5jeSAke3ByZWZpbGwuY3VycmVuY3l9IG5vdCBlbmFibGVkIGZvciBMb29wLiBFbmFibGVkIGN1cnJlbmNpZXM6ICR7Y2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzfWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YSB8fCAhcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YS5uZXh0X2FjdGlvbl9tZXRhZGF0YSkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggbmVjZXNzYXJ5IHNldHVwIGRhdGEgZm9yIExvb3BcIik7XG4gICAgfVxuICAgIGNvbnN0IHBheW1lbnRTZXR1cEluZm8gPSBwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGxldCBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50ID0gcGF5bWVudFNldHVwSW5mb1tcImF1dGhvcml6YXRpb25fYW1vdW50XCJdO1xuICAgIGxldCBtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50ID0gcGF5bWVudFNldHVwSW5mb1tcIm1pbl9hdXRob3JpemF0aW9uX2Ftb3VudFwiXTtcbiAgICBjb25zdCBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoID0gcGF5bWVudFNldHVwSW5mb1tcImFsbG93X2N1c3RvbWVyX3RvX2Nob29zZV9hdXRoXCJdO1xuICAgIGxldCBjaGFyZ2VBbW91bnRVc2RBdG9tO1xuICAgIGlmIChpc1NldHVwTW9kZSkge1xuICAgICAgY2hhcmdlQW1vdW50VXNkQXRvbSA9IDA7XG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50ID0gTWF0aC5tYXgoc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCwgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYXJnZUFtb3VudFVzZEF0b20gPSAoaW5pdGlhbFByZXZpZXcgPyBpbml0aWFsUHJldmlldy5hbW91bnRBdG9tIDogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSkgKiBwYXltZW50U2V0dXBJbmZvW1widG9rZW5fcHJpY2VcIl07XG4gICAgICBtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50ID0gTWF0aC5tYXgobWluQXV0aG9yaXphdGlvblVzZEFtb3VudCwgY2hhcmdlQW1vdW50VXNkQXRvbSk7XG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50ID0gTWF0aC5tYXgoc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCwgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCk7XG4gICAgfVxuICAgIGNvbnN0IHBheW1lbnRVc2RBbW91bnQgPSBjaGFyZ2VBbW91bnRVc2RBdG9tO1xuICAgIGNvbnN0IGN1c3RvbWVyUmVmSWQgPSB2NCgpO1xuICAgIGNvbnN0IHdpZGdldFByb3BzID0ge1xuICAgICAgcGF5bWVudFVzZEFtb3VudCxcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsXG4gICAgICBjdXN0b21lclJlZklkLFxuICAgICAgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCxcbiAgICAgIGFsbG93Q3VzdG9tZXJUb0Nob29zZUF1dGhcbiAgICB9O1xuICAgIGNvbnN0IGluaXRMb29wQ29ubmVjdFByb3BzID0ge1xuICAgICAgYXBpVG9rZW46IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5hcGlfdG9rZW4sXG4gICAgICBlbnRpdHlJZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5tZXJjaGFudF9pZCxcbiAgICAgIGVudmlyb25tZW50OiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuZW52aXJvbm1lbnRcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHdpZGdldFByb3BzLFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHNcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuTG9vcEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyRhKGBSdW5uaW5nIExvb3AgZmxvdy4uLmApO1xuICAgIGxvZ19fJGEoXCJjb250ZXh0XCIsIGNvbnRleHQpO1xuICAgIGxvZ19fJGEoXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICBsb2dfXyRhKFwibm9uQ2RlRm9ybUlucHV0c1wiLCBub25DZGVGb3JtSW5wdXRzKTtcbiAgICBsb2dfXyRhKFwiZmxvd0NhbGxiYWNrc1wiLCBmb3JtQ2FsbGJhY2tzKTtcbiAgICBsb2dfXyRhKFwiY3VzdG9tUGFyYW1zXCIsIGN1c3RvbVBhcmFtcyk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoY29udGV4dC5hbnlDZGVDb25uZWN0aW9uKTtcbiAgICBsb2dfXyRhKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3ByZWZpbGwubW9kZX1dYCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgcHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBpc0NoZWNrb3V0TW9kZSA9IHByZWZpbGwubW9kZSAhPT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGN1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICBpZiAoIWN1c3RvbVBhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBGYWlsZWQgdG8gcHJvcGVybHkgc3VibWl0IGZvcm0gZGF0YS5cIik7XG4gICAgfVxuICAgIGlmICghY3VzdG9tUGFyYW1zLnN1Y2Nlc3MpIHtcbiAgICAgIHRyYWNrKFwibG9vcF9wYXlfZmxvd19mYWlsdXJlXCIsIGN1c3RvbVBhcmFtcyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQuIFN1Y2Nlc3MgaXMgbm90IHRydWUuXCIpO1xuICAgIH1cbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIC4uLmN1c3RvbWVyRmllbGRzLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBpc0NoZWNrb3V0TW9kZSxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaXNDaGVja291dE1vZGUgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBjdXN0b21QYXJhbXMucGF5bWVudE1ldGhvZC5wYXltZW50TWV0aG9kSWQsXG4gICAgICAvLyBOT1RFOiB3ZSBkbyBoYXZlIHRoZSBjaGVja291dCBhdHRlbXB0IGlkIGhlcmUgZXZlbiBpZiBpdHMgYSBzZXR1cCwgYnV0IGZvciBub3cgd2UgZG9uJ3QgaW5jbHVkZSBpdFxuICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGNoZWNrb3V0IGF0dGVtcHQgc3VwcG9ydCBmb3Igc2V0dXAgaW50ZW50cy5cbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzQ2hlY2tvdXRNb2RlID8gc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQgOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgbG9vcF9jdXN0b21lcjogY3VzdG9tUGFyYW1zLmN1c3RvbWVyLFxuICAgICAgICBsb29wX3BheW1lbnRfbWV0aG9kOiBjdXN0b21QYXJhbXMucGF5bWVudE1ldGhvZCxcbiAgICAgICAgbG9vcF9zdWNjZXNzOiBjdXN0b21QYXJhbXMuc3VjY2VzcyxcbiAgICAgICAgbG9vcF9wYXlpbl9pZDogY3VzdG9tUGFyYW1zLnBheWluSWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRhKGBDb25maXJtIHJlc3VsdDogJHtjb25maXJtUmVzdWx0fWApO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kYShgRG9pbmcgcGF5bWVudCBzZXR1cC4uLmApO1xuICAgICAgbG9nX18kYShg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICBsb2dfXyRhKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJGEoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBpZiAoIWNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgICAgZXJyX18kYihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kOSwgZXJyX186IGVycl9fJGEgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicGF5cGFsXCIpO1xuY29uc3QgUGF5cGFsQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwicGF5cGFsXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3QoeyBjbGllbnRfaWQ6IHouc3RyaW5nKCkgfSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuY29uc3QgaW5pdFBheXBhbEZsb3cgPSBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgY29uc3QgcGF5cGFsQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFBheXBhbENwbSk7XG4gIGlmICghcGF5cGFsQ3BtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgfVxuICBjb25zdCBzdGFydEZsb3cgPSAoKSA9PiB7XG4gICAgcmV0dXJuIE9qc0Zsb3dzLnBheXBhbC5ydW4oe1xuICAgICAgY29udGV4dCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcGF5cGFsQ3BtLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBzdGFydEZsb3dcbiAgfTtcbn07XG5jb25zdCBydW5QYXlwYWxGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGxvZ19fJDkoYFJ1bm5pbmcgUGF5UGFsIGZsb3cuLi5gKTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICAgIGNvbnN0IHsgaXNBbm9ueW1vdXMsIHVzZVJlZGlyZWN0RmxvdyB9ID0gY3VzdG9tUGFyYW1zLnNldHRpbmdzID8/IHt9O1xuICAgICAgbG9nX18kOShgVmVyaWZ5aW5nIENQTS4uLmApO1xuICAgICAgY29uc3QgY3BtID0gUGF5cGFsQ3BtLnBhcnNlKGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgICBsb2dfXyQ5KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzYCk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsIHtcbiAgICAgICAgLi4uaXNBbm9ueW1vdXMgPyBnZW5lcmF0ZUFub255bW91c1ZhbHVlcygpIDogdm9pZCAwLFxuICAgICAgICAuLi5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICAgIGxvZ19fJDkoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3ByZWZpbGwubW9kZX1gKTtcbiAgICAgIGNvbnN0IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3cgPSB2NCgpO1xuICAgICAgY29uc3QgaXNQYXlGaXJzdEZsb3cgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0ID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjcG0ucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjcG0sXG4gICAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNQYXlGaXJzdEZsb3csXG4gICAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaXNQYXlGaXJzdEZsb3cgPyB7XG4gICAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgICB9IDogdm9pZCAwLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6IHVzZVJlZGlyZWN0RmxvdyxcbiAgICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0Rmxvd1xuICAgICAgICB9LFxuICAgICAgICAuLi5uZXdDdXN0b21lckZpZWxkc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHByZUFjdGlvblVybCA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGNvbnRleHQuYmFzZVVybCkudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGVuY29kZWRSZXF1ZXN0ID0gYnRvYShKU09OLnN0cmluZ2lmeShzdGFydFBheW1lbnRGbG93UmVxdWVzdCkpO1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIHN0OiBwcmVmaWxsLnRva2VuLFxuICAgICAgICByOiBlbmNvZGVkUmVxdWVzdFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZWRpcmVjdFVybCA9IGAke3ByZUFjdGlvblVybH0/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gO1xuICAgICAgaWYgKHVzZVJlZGlyZWN0Rmxvdykge1xuICAgICAgICBsb2dfXyQ5KFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0VXJsO1xuICAgICAgICBhd2FpdCBzbGVlcCgyMCAqIDFlMyk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGF5cGFsRmxvd1Jlc3VsdCA9IGF3YWl0IHN0YXJ0UG9wdXBXaW5kb3dWZXJpZmljYXRpb25TdHJpY3QoXG4gICAgICAgIFwiUGF5UGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3csXG4gICAgICAgIHJlZGlyZWN0VXJsXG4gICAgICApO1xuICAgICAgbG9nX18kOShcIlBheXBhbCBmbG93IHJlc3VsdFwiLCBwYXlwYWxGbG93UmVzdWx0KTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0QXR0ZW1wdElkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiY2F0dFwiKTtcbiAgICAgIGNvbnN0IGFwcHJvdmFsU2Vzc2lvbklkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiYXBwcm92YWxfc2Vzc2lvbl9pZFwiKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzUGF5Rmlyc3RGbG93ID8gY2hlY2tvdXRBdHRlbXB0SWQgOiB2b2lkIDAsXG4gICAgICAgIHRoZWlyX3BtX2lkOiBpc1BheUZpcnN0RmxvdyA/IGFwcHJvdmFsU2Vzc2lvbklkIDogdm9pZCAwXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDkoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJwYXlwYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjcG0sXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBpc1BheUZpcnN0Rmxvd1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRhKFwiUGF5UGFsIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBwYXltZW50X21ldGhvZDogXCJwYXlwYWxcIiwgZXJyb3I6IGVyciB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kOCwgZXJyX186IGVycl9fJDkgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9ja3l0LXBheXBhbFwiKTtcbmNvbnN0IFBvY2t5dFBheXBhbENwbSA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRQb2NreXRQYXlwYWxGbG93ID0gYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gIGNvbnN0IHBvY2t5dFBheXBhbENwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQb2NreXRQYXlwYWxDcG0pO1xuICBpZiAoIXBvY2t5dFBheXBhbENwbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlBvY2t5dCBQYXlQYWwgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICB9XG4gIGNvbnN0IHN0YXJ0RmxvdyA9ICgpID0+IHtcbiAgICByZXR1cm4gT2pzRmxvd3MucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBwb2NreXRQYXlwYWxDcG0sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHt9IH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIHN0YXJ0Rmxvd1xuICB9O1xufTtcbmNvbnN0IHJ1blBvY2t5dFBheXBhbEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ4KGBSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kOChgVmVyaWZ5aW5nIENQTS4uLmApO1xuICAgIGNvbnN0IGNwbSA9IFBvY2t5dFBheXBhbENwbS5wYXJzZShjaGVja291dFBheW1lbnRNZXRob2QpO1xuICAgIGxvZ19fJDgoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICBjb25zdCBzZXR0aW5ncyA9IGN1c3RvbVBhcmFtcz8uc2V0dGluZ3M7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgc2V0dGluZ3M/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgY29uc3QgbmV3Q3VzdG9tZXJGaWVsZHMgPSBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGxvZ19fJDgoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3ByZWZpbGwubW9kZX1gKTtcbiAgICBjb25zdCBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93ID0gdjQoKTtcbiAgICBjb25zdCBpc1BheUZpcnN0RmxvdyA9IHByZWZpbGwubW9kZSAhPT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0ID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY3BtLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNwbSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNQYXlGaXJzdEZsb3csXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzUGF5Rmlyc3RGbG93ID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhY3VzdG9tUGFyYW1zPy5zZXR0aW5ncz8udXNlUmVkaXJlY3RGbG93LFxuICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0Rmxvd1xuICAgICAgfSxcbiAgICAgIC4uLm5ld0N1c3RvbWVyRmllbGRzXG4gICAgfTtcbiAgICBjb25zdCBwcmVBY3Rpb25VcmwgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZW5jb2RlZFJlcXVlc3QgPSBidG9hKEpTT04uc3RyaW5naWZ5KHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0KSk7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogcHJlZmlsbC50b2tlbixcbiAgICAgIHI6IGVuY29kZWRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBgJHtwcmVBY3Rpb25Vcmx9PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICBpZiAoY3VzdG9tUGFyYW1zPy5zZXR0aW5ncz8udXNlUmVkaXJlY3RGbG93KSB7XG4gICAgICBsb2dfXyQ4KFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFVybDtcbiAgICAgIGF3YWl0IHNsZWVwKDIwICogMWUzKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIH1cbiAgICBsb2dfXyQ4KFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgIGxvZ19fJDgoYE9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLmApO1xuICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSBhd2FpdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0KFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93LFxuICAgICAgcmVkaXJlY3RVcmxcbiAgICApO1xuICAgIGxvZ19fJDgoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgcGF5cGFsRmxvd1Jlc3VsdCk7XG4gICAgY29uc3QgdmF1bHRJZCA9IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZik7XG4gICAgY29uc3QgY2hlY2tvdXRBdHRlbXB0SWQgPSBwYXJzZUFyZ0Zyb21IcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghY2hlY2tvdXRBdHRlbXB0SWQpIHtcbiAgICAgIGVycl9fJDkoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkw6XCIsIHBheXBhbEZsb3dSZXN1bHQuaHJlZik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgfVxuICAgIGxvZ19fJDgoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7dmF1bHRJZH1gKTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiB2YXVsdElkLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogaXNQYXlGaXJzdEZsb3cgPyBjaGVja291dEF0dGVtcHRJZCA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGxvZ19fJDgoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgICAgZXJyX18kOShcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNywgZXJyX186IGVycl9fJDggfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWFmZmlybVwiKTtcbmNvbnN0IFN0cmlwZUFmZmlybUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFmZmlybVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgU3RyaXBlQWZmaXJtUmVxdWlyZWRVc2VyQWN0aW9ucyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpLFxuICAgIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgaW5pdFN0cmlwZUFmZmlybUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ3KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBBZmZpcm0uLi5gKTtcbiAgICBjb25zdCBzdHJpcGVBZmZpcm1DcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlQWZmaXJtQ3BtKTtcbiAgICBpZiAoIXN0cmlwZUFmZmlybUNwbSkge1xuICAgICAgbG9nX18kNyhgTm8gU3RyaXBlIEFmZmlybSBDUE0gZm91bmRgKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgfVxuICAgIGxvZ19fJDcoYFN0YXJ0aW5nIHN0cmlwZSBhZmZpcm0gZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIGxvZ19fJDcoYFNldHVwIG1vZGUgaXMgbm90IHN1cHBvcnRlZCBmb3IgU3RyaXBlIEFmZmlybSBmbG93YCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIH1cbiAgICBjb25zdCBzdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlQWZmaXJtLnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHN0cmlwZUFmZmlybUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogY3VzdG9tUGFyYW1zID8/IHt9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fJDgoYEVycm9yIHN0YXJ0aW5nIEFmZmlybSBmbG93OmAsIGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBzdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlQWZmaXJtRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoeyBjb250ZXh0LCBjaGVja291dFBheW1lbnRNZXRob2QsIG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDcoYFJ1bm5pbmcgU3RyaXBlIEFmZmlybSBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kNyhgVmFsaWRhdGluZyBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDcoYENyZWF0aW5nIGNhcnQgaW5mbyBmb3IgcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICBjb25zdCBjYXJ0SW5mbyA9IHtcbiAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIHByaWNlX2lkOiBpdGVtLnByaWNlX2lkLFxuICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eVxuICAgICAgfSkpLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSB8fCB2b2lkIDAsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9O1xuICAgIGxvZ19fJDcoYFN0YXJ0aW5nIHBheS1maXJzdCBwYXltZW50IGZsb3cgZm9yIEFmZmlybS4uLmApO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogdHJ1ZSxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogY2FydEluZm8sXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBsb2dfXyQ3KFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlQWZmaXJtUmVxdWlyZWRVc2VyQWN0aW9ucy5wYXJzZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgICBjb25zdCB7IGNsaWVudF9zZWNyZXQgfSA9IG5leHRBY3Rpb25NZXRhZGF0YVswXTtcbiAgICBsb2dfXyQ3KFwiQ2xpZW50IHNlY3JldCBmb3IgcGF5bWVudCBpbnRlbnRcIiwgY2xpZW50X3NlY3JldCk7XG4gICAgY29uc3Qgc3RyaXBlQWZmaXJtQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUFmZmlybUNwbSk7XG4gICAgaWYgKCFzdHJpcGVBZmZpcm1DcG0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmlwZSBBZmZpcm0gQ1BNIG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUFmZmlybUNwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwicGF5bWVudFwiLFxuICAgICAgLy8gVXNlIHBheW1lbnQgbW9kZSBmb3IgcGF5LWZpcnN0IGZsb3dcbiAgICAgIGN1cnJlbmN5OiBwcmVmaWxsLmN1cnJlbmN5ID8/IFwidXNkXCIsXG4gICAgICBhbW91bnQ6IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9KTtcbiAgICBsb2dfXyQ3KFwiU3RyaXBlIGluc3RhbmNlIGNyZWF0ZWRcIiwgc3RyaXBlKTtcbiAgICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpO1xuICAgIGNvbnN0IGN1c3RvbWVyTmFtZSA9IGAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdfSAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV19YDtcbiAgICBjb25zdCBhZmZpcm1QYXltZW50RGF0YSA9IHtcbiAgICAgIHJldHVybl91cmw6IG5ldyBVUkwoXCIvYXBwLzNkcy9zdWNjZXNzL1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCksXG4gICAgICBwYXltZW50X21ldGhvZDoge1xuICAgICAgICBiaWxsaW5nX2RldGFpbHM6IHtcbiAgICAgICAgICBlbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgIG5hbWU6IGN1c3RvbWVyTmFtZSxcbiAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICBsaW5lMTogYmlsbGluZ0FkZHJlc3MubGluZTEsXG4gICAgICAgICAgICBsaW5lMjogYmlsbGluZ0FkZHJlc3MubGluZTIgfHwgdm9pZCAwLFxuICAgICAgICAgICAgY2l0eTogYmlsbGluZ0FkZHJlc3MuY2l0eSxcbiAgICAgICAgICAgIHN0YXRlOiBiaWxsaW5nQWRkcmVzcy5zdGF0ZSxcbiAgICAgICAgICAgIGNvdW50cnk6IGJpbGxpbmdBZGRyZXNzLmNvdW50cnksXG4gICAgICAgICAgICBwb3N0YWxfY29kZTogYmlsbGluZ0FkZHJlc3MuemlwX2NvZGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFmZmlybU9wdGlvbnMgPSB7XG4gICAgICBoYW5kbGVBY3Rpb25zOiBmYWxzZVxuICAgIH07XG4gICAgbG9nX18kNyhgQ29uZmlybWluZyBBZmZpcm0gcGF5bWVudCB3aXRoIGNsaWVudCBzZWNyZXQ6ICR7Y2xpZW50X3NlY3JldH1gKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBlcnJvciwgcGF5bWVudEludGVudCB9ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1BZmZpcm1QYXltZW50KFxuICAgICAgICBjbGllbnRfc2VjcmV0LFxuICAgICAgICBhZmZpcm1QYXltZW50RGF0YSxcbiAgICAgICAgYWZmaXJtT3B0aW9uc1xuICAgICAgKTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBlcnJfXyQ4KFwiQWZmaXJtIHBheW1lbnQgY29uZmlybWF0aW9uIGVycm9yOlwiLCBlcnJvcik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQWZmaXJtIHBheW1lbnQgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICBsb2dfXyQ3KFwiQWZmaXJtIHBheW1lbnQgY29uZmlybWVkIHN1Y2Nlc3NmdWxseVwiLCBwYXltZW50SW50ZW50KTtcbiAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gcGF5bWVudEludGVudD8ubmV4dF9hY3Rpb24/LnJlZGlyZWN0X3RvX3VybD8udXJsO1xuICAgICAgaWYgKCFyZWRpcmVjdFVybCkge1xuICAgICAgICBlcnJfXyQ4KFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEtsYXJuYSBwYXltZW50IGNvbmZpcm1hdGlvblwiKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKFwiS2xhcm5hIHBheW1lbnQgZmFpbGVkXCIpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgICByZXN1bHQ6IHsgaW52b2ljZV91cmxzOiBbXSwgc3Vic2NyaXB0aW9uX2lkczogW10sIGN1c3RvbWVyX2lkOiBcIlwiLCBwYXltZW50X21ldGhvZF9pZDogXCJcIiB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBsb2dfXyQ3KFwiUGF5bWVudCByZXF1aXJlcyBhZGRpdGlvbmFsIGFjdGlvbiwgc3RhcnRpbmcgM0RTIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkFmZmlybSB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBsb2dfXyQ3KFwiM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgY29uc3QgdGhlaXJQYXltZW50TWV0aG9kID0gcGF5bWVudEludGVudD8ucGF5bWVudF9tZXRob2Q/LnRvU3RyaW5nKCkgPz8gdm9pZCAwO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQsXG4gICAgICAgIHRoZWlyX3BtX2lkOiB0aGVpclBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgbG9nX18kNyhcIlBheW1lbnQgZmxvdyBjb25maXJtZWRcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJzdHJpcGUtYWZmaXJtXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJfXyQ4KFwiRXJyb3IgaW4gQWZmaXJtIHBheW1lbnQgZmxvdzpcIiwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ2LCBlcnJfXzogZXJyX18kNyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtYWZ0ZXJwYXlcIik7XG5jb25zdCBTdHJpcGVBZnRlcnBheUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFmdGVycGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBTdHJpcGVBZnRlcnBheVJlcXVpcmVkVXNlckFjdGlvbnMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpLm51bGxpc2goKSxcbiAgICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRTdHJpcGVBZnRlcnBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ2KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBBZnRlcnBheS4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUFmdGVycGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUFmdGVycGF5Q3BtKTtcbiAgICBpZiAoIXN0cmlwZUFmdGVycGF5Q3BtKSB7XG4gICAgICBsb2dfXyQ2KGBObyBTdHJpcGUgQWZ0ZXJwYXkgQ1BNIGZvdW5kYCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIH1cbiAgICBsb2dfXyQ2KGBTdGFydGluZyBzdHJpcGUgYWZ0ZXJwYXkgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIGxvZ19fJDYoYFNldHVwIG1vZGUgbm90IHN1cHBvcnRlZCBmb3IgU3RyaXBlIEFmdGVycGF5IGZsb3dgKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBPanNGbG93cy5zdHJpcGVBZnRlcnBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVBZnRlcnBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogY3VzdG9tUGFyYW1zID8/IHt9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fJDcoYEVycm9yIHN0YXJ0aW5nIEFmdGVycGF5IGZsb3c6YCwgZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVBZnRlcnBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHsgY29udGV4dCwgY2hlY2tvdXRQYXltZW50TWV0aG9kLCBub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ2KGBSdW5uaW5nIFN0cmlwZSBBZnRlcnBheSBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kNihgVmFsaWRhdGluZyBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDYoYENyZWF0aW5nIGNhcnQgaW5mbyBmb3IgcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICBjb25zdCBjYXJ0SW5mbyA9IHtcbiAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIHByaWNlX2lkOiBpdGVtLnByaWNlX2lkLFxuICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eVxuICAgICAgfSkpLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSB8fCB2b2lkIDAsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9O1xuICAgIGxvZ19fJDYoYFN0YXJ0aW5nIHBheS1maXJzdCBwYXltZW50IGZsb3cgZm9yIEFmdGVycGF5Li4uYCk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiB0cnVlLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBjYXJ0SW5mbyxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGxvZ19fJDYoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBTdHJpcGVBZnRlcnBheVJlcXVpcmVkVXNlckFjdGlvbnMucGFyc2UoXG4gICAgICBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zXG4gICAgKTtcbiAgICBjb25zdCB7IGNsaWVudF9zZWNyZXQgfSA9IG5leHRBY3Rpb25NZXRhZGF0YVswXTtcbiAgICBsb2dfXyQ2KFwiQ2xpZW50IHNlY3JldCBmb3IgcGF5bWVudCBpbnRlbnRcIiwgY2xpZW50X3NlY3JldCk7XG4gICAgY29uc3Qgc3RyaXBlQWZ0ZXJwYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlQWZ0ZXJwYXlDcG0pO1xuICAgIGlmICghc3RyaXBlQWZ0ZXJwYXlDcG0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmlwZSBBZnRlcnBheSBDUE0gbm90IGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCB7IHN0cmlwZSB9ID0gYXdhaXQgY3JlYXRlU3RyaXBlRWxlbWVudHMoc3RyaXBlQWZ0ZXJwYXlDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInBheW1lbnRcIixcbiAgICAgIC8vIFVzZSBwYXltZW50IG1vZGUgZm9yIHBheS1maXJzdCBmbG93XG4gICAgICBjdXJyZW5jeTogcHJlZmlsbC5jdXJyZW5jeSA/PyBcInVzZFwiLFxuICAgICAgYW1vdW50OiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfSk7XG4gICAgbG9nX18kNihcIlN0cmlwZSBpbnN0YW5jZSBjcmVhdGVkXCIsIHN0cmlwZSk7XG4gICAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBjdXN0b21lck5hbWUgPSBgJHtub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXX0gJHtub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdfWA7XG4gICAgY29uc3QgYWZ0ZXJwYXlQYXltZW50RGF0YSA9IHtcbiAgICAgIHJldHVybl91cmw6IG5ldyBVUkwoXCIvYXBwLzNkcy9zdWNjZXNzL1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCksXG4gICAgICBwYXltZW50X21ldGhvZDoge1xuICAgICAgICBiaWxsaW5nX2RldGFpbHM6IHtcbiAgICAgICAgICBlbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgIG5hbWU6IGN1c3RvbWVyTmFtZSxcbiAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICBsaW5lMTogYmlsbGluZ0FkZHJlc3MubGluZTEsXG4gICAgICAgICAgICBsaW5lMjogYmlsbGluZ0FkZHJlc3MubGluZTIgfHwgdm9pZCAwLFxuICAgICAgICAgICAgY2l0eTogYmlsbGluZ0FkZHJlc3MuY2l0eSxcbiAgICAgICAgICAgIHN0YXRlOiBiaWxsaW5nQWRkcmVzcy5zdGF0ZSxcbiAgICAgICAgICAgIGNvdW50cnk6IGJpbGxpbmdBZGRyZXNzLmNvdW50cnksXG4gICAgICAgICAgICBwb3N0YWxfY29kZTogYmlsbGluZ0FkZHJlc3MuemlwX2NvZGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFmdGVycGF5T3B0aW9ucyA9IHtcbiAgICAgIGhhbmRsZUFjdGlvbnM6IGZhbHNlXG4gICAgfTtcbiAgICBsb2dfXyQ2KGBDb25maXJtaW5nIEFmdGVycGF5IHBheW1lbnQgd2l0aCBjbGllbnQgc2VjcmV0OiAke2NsaWVudF9zZWNyZXR9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpcm1hdGlvblJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQWZ0ZXJwYXlDbGVhcnBheVBheW1lbnQoXG4gICAgICAgIGNsaWVudF9zZWNyZXQsXG4gICAgICAgIGFmdGVycGF5UGF5bWVudERhdGEsXG4gICAgICAgIGFmdGVycGF5T3B0aW9uc1xuICAgICAgKTtcbiAgICAgIGxvZ19fJDYoYEFmdGVycGF5IHBheW1lbnQgY29uZmlybWF0aW9uIHJlc3VsdDpgLCBjb25maXJtYXRpb25SZXN1bHQpO1xuICAgICAgaWYgKGNvbmZpcm1hdGlvblJlc3VsdC5wYXltZW50SW50ZW50Py5uZXh0X2FjdGlvbj8udHlwZSA9PT0gXCJyZWRpcmVjdF90b191cmxcIikge1xuICAgICAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1hdGlvblJlc3VsdC5wYXltZW50SW50ZW50Py5uZXh0X2FjdGlvbj8ucmVkaXJlY3RfdG9fdXJsPy51cmw7XG4gICAgICAgIGlmICghcmVkaXJlY3RVcmwpIHtcbiAgICAgICAgICBlcnJfXyQ3KFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEFmdGVycGF5IHBheW1lbnQgY29uZmlybWF0aW9uXCIpO1xuICAgICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihcIkFmdGVycGF5IHBheW1lbnQgZmFpbGVkXCIpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgICAgICByZXN1bHQ6IHsgaW52b2ljZV91cmxzOiBbXSwgc3Vic2NyaXB0aW9uX2lkczogW10sIGN1c3RvbWVyX2lkOiBcIlwiLCBwYXltZW50X21ldGhvZF9pZDogXCJcIiB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsb2dfXyQ2KFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgICAgZnJhbWVUaXRsZTogXCJBZnRlcnBheSB2ZXJpZmljYXRpb25cIlxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kNihg4pWwIEFmdGVycGF5IHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFmdGVycGF5IHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBsb2dfXyQ2KFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCwgY29uZmlybWluZyB3aXRoIGJhY2tlbmQuLi5cIik7XG4gICAgICAgIGNvbnN0IHRoZWlyUGF5bWVudE1ldGhvZCA9IGNvbmZpcm1hdGlvblJlc3VsdC5wYXltZW50SW50ZW50Py5wYXltZW50X21ldGhvZD8udG9TdHJpbmcoKSA/PyB2b2lkIDA7XG4gICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICAgICAgICB0aGVpcl9wbV9pZDogdGhlaXJQYXltZW50TWV0aG9kXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgICAgbG9nUHJlZml4OiBcInN0cmlwZS1hZnRlcnBheVwiLFxuICAgICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICAgIHVzZVBheUZpcnN0RmxvdzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDYoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gQWZ0ZXJwYXkgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBBZnRlcnBheSBwYXltZW50IGNvbmZpcm1hdGlvblwiKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyX18kNyhcIkVycm9yIGluIEFmdGVycGF5IGNoZWNrb3V0IGZsb3c6XCIsIGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJBZnRlcnBheSBwYXltZW50IGZhaWxlZFwiO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ1LCBlcnJfXzogZXJyX18kNiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUta2xhcm5hXCIpO1xuY29uc3QgU3RyaXBlS2xhcm5hQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwia2xhcm5hXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBTdHJpcGVLbGFybmFSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5udWxsaXNoKCksXG4gICAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlS2xhcm5hRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDUoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIEtsYXJuYS4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUtsYXJuYUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVLbGFybmFDcG0pO1xuICAgIGlmICghc3RyaXBlS2xhcm5hQ3BtKSB7XG4gICAgICBsb2dfXyQ1KGBObyBTdHJpcGUgS2xhcm5hIENQTSBmb3VuZGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB9XG4gICAgbG9nX18kNShgU3RhcnRpbmcgc3RyaXBlIGtsYXJuYSBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGlmIChpc1NldHVwTW9kZSkge1xuICAgICAgbG9nX18kNShgU2V0dXAgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBTdHJpcGUgS2xhcm5hIGZsb3dgKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBPanNGbG93cy5zdHJpcGVLbGFybmEucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogc3RyaXBlS2xhcm5hQ3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiBjdXN0b21QYXJhbXMgPz8ge30sXG4gICAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogdHJ1ZSB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18kNihgRXJyb3Igc3RhcnRpbmcgS2xhcm5hIGZsb3c6YCwgZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVLbGFybmFGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7IGNvbnRleHQsIGNoZWNrb3V0UGF5bWVudE1ldGhvZCwgbm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kNShgUnVubmluZyBTdHJpcGUgS2xhcm5hIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBsb2dfXyQ1KGBWYWxpZGF0aW5nIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgbG9nX18kNShgQ3JlYXRpbmcgY2FydCBpbmZvIGZvciBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgIGNvbnN0IGNhcnRJbmZvID0ge1xuICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgcHJpY2VfaWQ6IGl0ZW0ucHJpY2VfaWQsXG4gICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5XG4gICAgICB9KSksXG4gICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdIHx8IHZvaWQgMCxcbiAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgIH07XG4gICAgbG9nX18kNShgU3RhcnRpbmcgcGF5LWZpcnN0IHBheW1lbnQgZmxvdyBmb3IgS2xhcm5hLi4uYCk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiB0cnVlLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBjYXJ0SW5mbyxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGxvZ19fJDUoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBTdHJpcGVLbGFybmFSZXF1aXJlZFVzZXJBY3Rpb25zLnBhcnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpO1xuICAgIGNvbnN0IHsgY2xpZW50X3NlY3JldCB9ID0gbmV4dEFjdGlvbk1ldGFkYXRhWzBdO1xuICAgIGxvZ19fJDUoXCJDbGllbnQgc2VjcmV0IGZvciBwYXltZW50IGludGVudFwiLCBjbGllbnRfc2VjcmV0KTtcbiAgICBjb25zdCBzdHJpcGVLbGFybmFDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlS2xhcm5hQ3BtKTtcbiAgICBpZiAoIXN0cmlwZUtsYXJuYUNwbSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaXBlIEtsYXJuYSBDUE0gbm90IGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCB7IHN0cmlwZSB9ID0gYXdhaXQgY3JlYXRlU3RyaXBlRWxlbWVudHMoc3RyaXBlS2xhcm5hQ3BtLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJwYXltZW50XCIsXG4gICAgICAvLyBVc2UgcGF5bWVudCBtb2RlIGZvciBwYXktZmlyc3QgZmxvd1xuICAgICAgY3VycmVuY3k6IHByZWZpbGwuY3VycmVuY3kgPz8gXCJ1c2RcIixcbiAgICAgIGFtb3VudDogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgIH0pO1xuICAgIGxvZ19fJDUoXCJTdHJpcGUgaW5zdGFuY2UgY3JlYXRlZFwiLCBzdHJpcGUpO1xuICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgY29uc3QgY3VzdG9tZXJOYW1lID0gYCR7bm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV19ICR7bm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXX1gO1xuICAgIGNvbnN0IGtsYXJuYVBheW1lbnREYXRhID0ge1xuICAgICAgcmV0dXJuX3VybDogbmV3IFVSTChcIi9hcHAvM2RzL3N1Y2Nlc3MvXCIsIGNvbnRleHQuYmFzZVVybCkudG9TdHJpbmcoKSxcbiAgICAgIHBheW1lbnRfbWV0aG9kOiB7XG4gICAgICAgIGJpbGxpbmdfZGV0YWlsczoge1xuICAgICAgICAgIGVtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgICAgbmFtZTogY3VzdG9tZXJOYW1lLFxuICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgIGxpbmUxOiBiaWxsaW5nQWRkcmVzcy5saW5lMSxcbiAgICAgICAgICAgIGxpbmUyOiBiaWxsaW5nQWRkcmVzcy5saW5lMiB8fCB2b2lkIDAsXG4gICAgICAgICAgICBjaXR5OiBiaWxsaW5nQWRkcmVzcy5jaXR5LFxuICAgICAgICAgICAgc3RhdGU6IGJpbGxpbmdBZGRyZXNzLnN0YXRlLFxuICAgICAgICAgICAgY291bnRyeTogYmlsbGluZ0FkZHJlc3MuY291bnRyeSxcbiAgICAgICAgICAgIHBvc3RhbF9jb2RlOiBiaWxsaW5nQWRkcmVzcy56aXBfY29kZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qga2xhcm5hT3B0aW9ucyA9IHtcbiAgICAgIGhhbmRsZUFjdGlvbnM6IGZhbHNlXG4gICAgfTtcbiAgICBsb2dfXyQ1KGBDb25maXJtaW5nIEtsYXJuYSBwYXltZW50IHdpdGggY2xpZW50IHNlY3JldDogJHtjbGllbnRfc2VjcmV0fWApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maXJtYXRpb25SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUtsYXJuYVBheW1lbnQoY2xpZW50X3NlY3JldCwga2xhcm5hUGF5bWVudERhdGEsIGtsYXJuYU9wdGlvbnMpO1xuICAgICAgbG9nX18kNShgS2xhcm5hIHBheW1lbnQgY29uZmlybWF0aW9uIHJlc3VsdDpgLCBjb25maXJtYXRpb25SZXN1bHQpO1xuICAgICAgaWYgKGNvbmZpcm1hdGlvblJlc3VsdC5wYXltZW50SW50ZW50Py5uZXh0X2FjdGlvbj8udHlwZSA9PT0gXCJyZWRpcmVjdF90b191cmxcIikge1xuICAgICAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1hdGlvblJlc3VsdC5wYXltZW50SW50ZW50Py5uZXh0X2FjdGlvbj8ucmVkaXJlY3RfdG9fdXJsPy51cmw7XG4gICAgICAgIGlmICghcmVkaXJlY3RVcmwpIHtcbiAgICAgICAgICBlcnJfXyQ2KFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEtsYXJuYSBwYXltZW50IGNvbmZpcm1hdGlvblwiKTtcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoXCJLbGFybmEgcGF5bWVudCBmYWlsZWRcIik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgICAgIHJlc3VsdDogeyBpbnZvaWNlX3VybHM6IFtdLCBzdWJzY3JpcHRpb25faWRzOiBbXSwgY3VzdG9tZXJfaWQ6IFwiXCIsIHBheW1lbnRfbWV0aG9kX2lkOiBcIlwiIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxvZ19fJDUoXCJLbGFybmEgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgICAgZnJhbWVUaXRsZTogXCJLbGFybmEgdmVyaWZpY2F0aW9uXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJDUoYOKVsCBLbGFybmEgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiS2xhcm5hIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiS2xhcm5hIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgbG9nX18kNShcIktsYXJuYSB2ZXJpZmljYXRpb24gY29tcGxldGVkLCBjb25maXJtaW5nIHdpdGggYmFja2VuZC4uLlwiKTtcbiAgICAgICAgY29uc3QgdGhlaXJQYXltZW50TWV0aG9kID0gY29uZmlybWF0aW9uUmVzdWx0LnBheW1lbnRJbnRlbnQ/LnBheW1lbnRfbWV0aG9kPy50b1N0cmluZygpID8/IHZvaWQgMDtcbiAgICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiB0aGVpclBheW1lbnRNZXRob2RcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgICBsb2dQcmVmaXg6IFwic3RyaXBlLWtsYXJuYVwiLFxuICAgICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICAgIHVzZVBheUZpcnN0RmxvdzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDUoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gS2xhcm5hIHBheW1lbnQgY29uZmlybWF0aW9uXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gS2xhcm5hIHBheW1lbnQgY29uZmlybWF0aW9uXCIpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJfXyQ2KFwiRXJyb3IgaW4gS2xhcm5hIGNoZWNrb3V0IGZsb3c6XCIsIGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJLbGFybmEgcGF5bWVudCBmYWlsZWRcIjtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgT0pTX1NUUklQRV9MSU5LX0JUTl9JRCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiO1xuY29uc3QgeyBsb2dfXzogbG9nX18kNCwgZXJyX186IGVycl9fJDUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWxpbmtcIik7XG5jb25zdCBTdHJpcGVMaW5rQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlTGlua0Zsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCBpbml0UGFyYW1zID0gY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgbG9nX18kNChgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUxpbmtDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlTGlua0NwbSk7XG4gICAgbG9nX18kNChgU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQ0KGBDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5gKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCB7IGVsZW1lbnRzLCBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUxpbmtDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIGNvbnN0IGxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQgPSBlbGVtZW50cy5jcmVhdGUoXCJsaW5rQXV0aGVudGljYXRpb25cIik7XG4gICAgbG9nX18kNChgQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLmApO1xuICAgIGNvbnN0IGV4cHJlc3NDaGVja291dEVsZW1lbnQgPSBlbGVtZW50cy5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiBpbml0UGFyYW1zPy5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVuZGVyTGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudCA9IChzZWxlY3Rvciwgc2lsZW50KSA9PiB7XG4gICAgICBsZXQgcGFyZW50Q29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICBpZiAoIXBhcmVudENvbnRhaW5lcikge1xuICAgICAgICBlcnJfXyQ1KGBSZWNvbW1hbmRlZCB0byByZW5kZXIgYSBjb250YWluZXIgd2l0aCAke3NlbGVjdG9yfSB0byBhdm9pZCByZW5kZXJpbmcgaW4gdGhlIGJvZHlgKTtcbiAgICAgICAgcGFyZW50Q29udGFpbmVyID0gZG9jdW1lbnQuYm9keTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBwYXJlbnRDb250YWluZXI/LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICBsaW5rQXV0aGVudGljYXRpb25FbGVtZW50Lm1vdW50KGNvbnRhaW5lcik7XG4gICAgICBsZXQgaXNBdXRoZW50aWNhdGVkID0gZmFsc2U7XG4gICAgICBsZXQgaXNMaW5rQXV0aFJlYWR5ID0gZmFsc2U7XG4gICAgICBsaW5rQXV0aGVudGljYXRpb25FbGVtZW50Lm9uY2UoXCJyZWFkeVwiLCAoKSA9PiB7XG4gICAgICAgIGlzTGlua0F1dGhSZWFkeSA9IHRydWU7XG4gICAgICAgIGluaXRQYXJhbXM/Lm9uQXV0aGVudGljYXRpb25FbGVtZW50UmVhZHk/LigpO1xuICAgICAgfSk7XG4gICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICBjb250YWluZXIuc3R5bGUudG9wID0gXCItMTAwMHB4XCI7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gXCItMTAwMHB4XCI7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS56SW5kZXggPSBcIi0xXCI7XG4gICAgICAgIGxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQub24oXCJjaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQgPSBlLmNvbXBsZXRlIHx8ICEhZS52YWx1ZS5lbWFpbDtcbiAgICAgICAgICBpZiAoaXNMaW5rQXV0aFJlYWR5KSB7XG4gICAgICAgICAgICBpbml0UGFyYW1zPy5vbkF1dGhlbnRpY2F0aW9uU3RhdHVzQ2hhbmdlPy4oaXNBdXRoZW50aWNhdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpZnJhbWUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcihcImlmcmFtZVwiKTtcbiAgICAgICAgaWYgKGlmcmFtZSkge1xuICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gaWZyYW1lLm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IGlzUG9zc2libGVBdXRoZW50aWNhdGVkID0gaGVpZ2h0ID4gMTYwO1xuICAgICAgICAgICAgaWYgKGlzTGlua0F1dGhSZWFkeSkge1xuICAgICAgICAgICAgICBpbml0UGFyYW1zPy5vbkF1dGhlbnRpY2F0aW9uU3RhdHVzQ2hhbmdlPy4oaXNBdXRoZW50aWNhdGVkIHx8IGlzUG9zc2libGVBdXRoZW50aWNhdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGlmcmFtZSwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFtcInN0eWxlXCJdIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudDtcbiAgICB9O1xuICAgIGNvbnN0IG1vdW50QnV0dG9uID0gKHNlbGVjdG9yKSA9PiB7XG4gICAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm1vdW50KHNlbGVjdG9yID8gc2VsZWN0b3IgOiBgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc21vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgICBpZiAoaW5pdFBhcmFtcz8uZG9Ob3RNb3VudE9uSW5pdCkge1xuICAgICAgbG9nX18kNChgTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ0KGBNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5gKTtcbiAgICAgIG1vdW50QnV0dG9uKCk7XG4gICAgfVxuICAgIGlmIChpbml0UGFyYW1zPy5zaWxlbnRseUNoZWNrQXV0aGVudGljYXRpb24pIHtcbiAgICAgIGxvZ19fJDQoYFNpbGVudGx5IG1vdW50aW5nIGxpbmsgYXV0aGVudGljYXRpb24gZWxlbWVudCBhdCAjJHtPSlNfU1RSSVBFX0xJTktfQlROX0lEfS4uLmApO1xuICAgICAgcmVuZGVyTGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gLCB0cnVlKTtcbiAgICB9XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNsaWNrXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kNChcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpO1xuICAgICAgaWYgKGluaXRQYXJhbXM/Lm92ZXJyaWRlTGlua1N1Ym1pdCkge1xuICAgICAgICBjb25zdCBzaG91bGRTdWJtaXQgPSBhd2FpdCBpbml0UGFyYW1zLm92ZXJyaWRlTGlua1N1Ym1pdCgpO1xuICAgICAgICBpZiAoIXNob3VsZFN1Ym1pdCkge1xuICAgICAgICAgIGxvZ19fJDQoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBldmVudC5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBsb2dfXyQ0KFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBldmVudCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdHJpcGUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IGV2ZW50LmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICBlcnJfXyQ1KFwiZXJyb3JcIiwgcmVzdWx0LmVycm9yKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHJlc3VsdC5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDQoXCJwYXltZW50TWV0aG9kXCIsIHJlc3VsdC5wYXltZW50TWV0aG9kKTtcbiAgICAgICAgT2pzRmxvd3Muc3RyaXBlTGluay5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVMaW5rQ3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiByZXN1bHQucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uLFxuICAgICAgICBkaXNtb3VudEJ1dHRvbixcbiAgICAgICAgbW91bnRMaW5rQXV0aGVudGljYXRpb25FbGVtZW50OiAoc2VsZWN0b3IpID0+IHJlbmRlckxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQoc2VsZWN0b3IsIGZhbHNlKSxcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IGdldEVsZW1lbnRCeUlkQXN5bmMoT0pTX1NUUklQRV9MSU5LX0JUTl9JRClcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlTGlua0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ0KGBSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDQoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBNKG5vbkNkZUZvcm1JbnB1dHMsIGN1c3RvbVBhcmFtcy5zdHJpcGVQTSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBsb2dfXyQ0KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogY3VzdG9tUGFyYW1zLnN0cmlwZVBNLmlkLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgbG9nX18kNChcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zLnBhcnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpO1xuICAgIGNvbnN0IG91ckV4aXN0aW5nUG1JZCA9IG5leHRBY3Rpb25NZXRhZGF0YVswXS5vdXJfZXhpc3RpbmdfcG1faWQ7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQ0KGBEb2luZyBwYXltZW50IHNldHVwLi4uYCk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogb3VyRXhpc3RpbmdQbUlkXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ0KGBEb2luZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgc3RyaXBlUG1bXCJsaW5rXCJdPy5lbWFpbCB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gIGlmIChmaXJzdE5hbWUgfHwgbGFzdE5hbWUpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICB9IGVsc2Uge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgfVxuICBsb2dfXyQ0KGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IGdldEVsZW1lbnRCeUlkQXN5bmMgPSAoaWQpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gIGNvbnN0IGdldEVsZW1lbnQgPSAoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmVzb2x2ZShlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGdldEVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbiAgZ2V0RWxlbWVudCgpO1xufSk7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDMsIGVycl9fOiBlcnJfXyQ0IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1wclwiKTtcbmNvbnN0IFN0cmlwZVByQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei51bmlvbihbei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQzKGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgbG9nX18kMyhgSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJDMoYEdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudGApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHByID0gYXdhaXQgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QoXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgaXNTZXR1cE1vZGVcbiAgICApO1xuICAgIGxvZ19fJDMoYENoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRgKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudCA9IGF3YWl0IHByLmNhbk1ha2VQYXltZW50KCk7XG4gICAgaWYgKGNhbk1ha2VQYXltZW50ID09PSBudWxsKSB7XG4gICAgICBlcnJfXyQ0KGBjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsYCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfTtcbiAgICB9XG4gICAgbG9nX18kMyhgU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50YCwgY2FuTWFrZVBheW1lbnQpO1xuICAgIGNvbnN0IHJ1blN0cmlwZVByRmxvdzIgPSAocHJvdmlkZXIsIHBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgICAgcHIsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7IGFwcGxlUGF5OiBjYW5NYWtlUGF5bWVudC5hcHBsZVBheSwgZ29vZ2xlUGF5OiBjYW5NYWtlUGF5bWVudC5nb29nbGVQYXkgfSxcbiAgICAgICAgICBzdGFydEZsb3c6IHJ1blN0cmlwZVByRmxvdzJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcixcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiBydW5TdHJpcGVQckZsb3cyXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyQxID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBpbml0UmVzdWx0XG4gIH0pID0+IHtcbiAgICBsb2dfXyQzKGBSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgaWYgKGN1c3RvbVBhcmFtcy5wcm92aWRlciAhPT0gY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2N1c3RvbVBhcmFtcy5wcm92aWRlcn0sIGdvdCAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcn1gKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwciA9IGluaXRSZXN1bHQucHI7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIGxvZ19fJDMoYE92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhgLCBvdmVycmlkZSk7XG4gICAgICBjb25zdCBhcHBsZVBheVBheW1lbnRSZXF1ZXN0ID0gdHlwZW9mIG92ZXJyaWRlLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIiA/IG92ZXJyaWRlLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe30pIDogb3ZlcnJpZGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdDtcbiAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChwciwgb3ZlcnJpZGUuYW1vdW50LCBvdmVycmlkZS5wZW5kaW5nLCBhcHBsZVBheVBheW1lbnRSZXF1ZXN0LCBvdmVycmlkZS5sYWJlbCk7XG4gICAgfVxuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGlmICghY3VzdG9tUGFyYW1zLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgICBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCkudGhlbigoaW5pdGlhbFByZXZpZXcpID0+IHtcbiAgICAgICAgaWYgKCFwci5pc1Nob3dpbmcoKSkge1xuICAgICAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChwciwgaW5pdGlhbFByZXZpZXcsIGZhbHNlLCB2b2lkIDAsIFwiVG90YWxcIik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBsb2dfXyQzKGBTaG93aW5nIFBSIGRpYWxvZy4uLmApO1xuICAgIHByLnNob3coKTtcbiAgICBjb25zdCBzdHJpcGVQbUFkZGVkRXZlbnQgPSBhd2FpdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZChwcik7XG4gICAgbG9nX18kMyhgU3RyaXBlIFBNIGFkZGVkIGV2ZW50OmAsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgbG9nX18kMyhgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0obm9uQ2RlRm9ybUlucHV0cywgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDMoYFBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcCBheW1lbnQgZmxvdy4uLmAsIG5vbkNkZUZvcm1GaWVsZHMpO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUihhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBmaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgbG9nX18kMyhgQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLmApO1xuICAgIGF3YWl0IGNvbmZpcm1TdHJpcGVQclBNKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJDMoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlblxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kMyhgUGVyZm9ybWluZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbUV2dCkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG1FdnQucGF5ZXJOYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IHN0cmlwZVBtRXZ0LnBheW1lbnRNZXRob2Q/LmJpbGxpbmdfZGV0YWlscz8uYWRkcmVzcztcbiAgY29uc3Qgc2hpcHBpbmdBZGRyZXNzID0gc3RyaXBlUG1FdnQuc2hpcHBpbmdBZGRyZXNzO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHN0cmlwZVBtRXZ0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdBZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBzaGlwcGluZ0FkZHJlc3M/LnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBiaWxsaW5nQWRkcmVzcz8uY291bnRyeSB8fCBzaGlwcGluZ0FkZHJlc3M/LmNvdW50cnkgfHwgXCJVU1wiO1xuICBjb25zdCBmaXJzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiXCI7XG4gIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJcIjtcbiAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBmaXJzdE5hbWU7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gIH0gZWxzZSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICB9XG4gIGxvZ19fJDMoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgdXBkYXRlUHJXaXRoQW1vdW50ID0gKHByLCBhbW91bnQsIGlzUGVuZGluZywgc3RyaXBlQXBwbGVQYXksIGxhYmVsKSA9PiB7XG4gIHByLnVwZGF0ZSh7XG4gICAgdG90YWw6IGFtb3VudCA/IHtcbiAgICAgIGFtb3VudDogYW1vdW50LmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogbGFiZWwgPz8gXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogaXNQZW5kaW5nXG4gICAgfSA6IHZvaWQgMCxcbiAgICBjdXJyZW5jeTogYW1vdW50Py5jdXJyZW5jeSxcbiAgICAvLyBTdHJpcGUncyBhcHBsZVBheSBvcHRpb24gb25seSBzdXBwb3J0cyAncmVjdXJyaW5nUGF5bWVudFJlcXVlc3QnIHwgJ2RlZmVycmVkUGF5bWVudFJlcXVlc3QnIHwgJ2F1dG9tYXRpY1JlbG9hZFBheW1lbnRSZXF1ZXN0JyBvZiBuYXRpdmUgQXBwbGVQYXkgcGF5bWVudCByZXF1ZXN0XG4gICAgLy8gV2UncmUgYWNjZXB0aW5nIG5hdGl2ZSBQYXltZW50IFJlcXVlc3QgaGVyZSBmb3IgbW9yZSBjb21tb24gdHlwaW5nLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBzdHJpcGUgZG8gbm90IGV4cGVjdCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGFwcGxlUGF5OiBzdHJpcGVBcHBsZVBheVxuICB9KTtcbn07XG5jb25zdCBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICB9XG4gIHJldHVybiBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufTtcblxuY29uc3QgZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCA9IChjcG1zLCB3aXRoUHJvdmlkZXIsIHdpdGhQcm9jZXNzb3IpID0+IHtcbiAgY29uc3QgbWF0Y2hlcyA9IGNwbXMuZmlsdGVyKChjcG0pID0+IHtcbiAgICBjb25zdCBtYXRjaGVzUHJvY2Vzc29yID0gd2l0aFByb2Nlc3NvciA9PT0gdm9pZCAwID8gdHJ1ZSA6IGNwbS5wcm9jZXNzb3JfbmFtZSA9PT0gd2l0aFByb2Nlc3NvcjtcbiAgICBjb25zdCBtYXRjaGVzUHJvdmlkZXIgPSBjcG0ucHJvdmlkZXIgPT09IHdpdGhQcm92aWRlcjtcbiAgICByZXR1cm4gbWF0Y2hlc1Byb2Nlc3NvciAmJiBtYXRjaGVzUHJvdmlkZXI7XG4gIH0pO1xuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgY29uc29sZS53YXJuKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gICAgdHJhY2soXCJtb3JlX3RoYW5fb25lX2NwbV9mb3VuZFwiLCB7XG4gICAgICBwcm92aWRlcjogd2l0aFByb3ZpZGVyLFxuICAgICAgcHJvY2Vzc29yOiB3aXRoUHJvY2Vzc29yLFxuICAgICAgY3Btc1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBtYXRjaGVzWzBdO1xufTtcbmNvbnN0IE9qc0Zsb3dzID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkNvbW1vbkNjRmxvd1xuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlUHJGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlUHJGbG93JDFcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IGluaXRTdHJpcGVMaW5rRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUxpbmtGbG93XG4gIH0sXG4gIHN0cmlwZUtsYXJuYToge1xuICAgIGluaXQ6IGluaXRTdHJpcGVLbGFybmFGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlS2xhcm5hRmxvd1xuICB9LFxuICBzdHJpcGVBZmZpcm06IHtcbiAgICBpbml0OiBpbml0U3RyaXBlQWZmaXJtRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUFmZmlybUZsb3dcbiAgfSxcbiAgc3RyaXBlQWZ0ZXJwYXk6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlQWZ0ZXJwYXlGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlQWZ0ZXJwYXlGbG93XG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBpbml0OiBpbml0UG9ja3l0UGF5cGFsRmxvdyxcbiAgICBydW46IHJ1blBvY2t5dFBheXBhbEZsb3dcbiAgfSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDoge1xuICAgIGluaXQ6IGluaXRQYXlwYWxGbG93LFxuICAgIHJ1bjogcnVuUGF5cGFsRmxvd1xuICB9LFxuICAvLyBLbGFybmFcbiAgYWlyd2FsbGV4S2xhcm5hOiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEtsYXJuYUZsb3csXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhLbGFybmFGbG93XG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWlyd2FsbGV4R29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4QXBwbGVQYXlGbG93XG4gIH0sXG4gIGFpcndhbGxleEFDSDoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4QUNIRmxvd1xuICB9LFxuICBhaXJ3YWxsZXhFRlQ6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleEVGVEZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4QkFDUzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4QkFDU0Zsb3dcbiAgfSxcbiAgYWlyd2FsbGV4U0VQQToge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4U0VQQUZsb3dcbiAgfSxcbiAgLy8gTG9vcFxuICBsb29wQ3J5cHRvOiB7XG4gICAgaW5pdDogaW5pdExvb3BGbG93LFxuICAgIHJ1bjogcnVuTG9vcEZsb3dcbiAgfSxcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QXV0aG5ldEFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkF1dGhuZXRBcHBsZVBheUZsb3dcbiAgfSxcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQXV0aG5ldEdvb2dsZVBheUZsb3dcbiAgfSxcbiAgYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWR5ZW5Hb29nbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWR5ZW5Hb29nbGVQYXlGbG93XG4gIH0sXG4gIGFkeWVuQXBwbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWR5ZW5BcHBsZVBheUZsb3csXG4gICAgcnVuOiBydW5BZHllbkFwcGxlUGF5Rmxvd1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kMiwgZXJyX186IGVycl9fJDMgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1mbG93c1wiKTtcbmNvbnN0IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyID0gKGZsb3dOYW1lLCBpbml0RmxvdykgPT4ge1xuICBjb25zdCBwdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcixcbiAgICBpbml0aWFsaXplOiBhc3luYyAoaW5pdFBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHB1Ymxpc2hlci5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IGF3YWl0IGluaXRGbG93KGluaXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyQyKGDinJQgJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBpbml0UmVzdWx0KTtcbiAgICAgICAgcHVibGlzaGVyLnNldChpbml0UmVzdWx0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fJDMoYPCdma0gJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIGdldEVycm9yTWVzc2FnZShlcnJvciksIFwiRGV0YWlsczpcIiwgZXJyb3IpO1xuICAgICAgICBwdWJsaXNoZXIudGhyb3coZXJyb3IsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFsbEluaXRGbG93cyA9IGFzeW5jIChmbG93cywgY29udGV4dCwgZm9ybUNhbGxiYWNrcykgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGZsb3dzKS5tYXAoKGZsb3cpID0+IGZsb3cuaW5pdGlhbGl6ZSh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkpKTtcbn07XG5jb25zdCBjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgICAvLyBTdHJpcGUgUFJcbiAgICBzdHJpcGVQUjogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgUFJcIiwgT2pzRmxvd3Muc3RyaXBlUFIuaW5pdCksXG4gICAgLy8gU3RyaXBlIExpbmtcbiAgICBzdHJpcGVMaW5rOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBMaW5rXCIsIE9qc0Zsb3dzLnN0cmlwZUxpbmsuaW5pdCksXG4gICAgLy8gU3RyaXBlIEtsYXJuYVxuICAgIHN0cmlwZUtsYXJuYTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgS2xhcm5hXCIsIE9qc0Zsb3dzLnN0cmlwZUtsYXJuYS5pbml0KSxcbiAgICAvLyBTdHJpcGUgQWZmaXJtXG4gICAgc3RyaXBlQWZmaXJtOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBBZmZpcm1cIiwgT2pzRmxvd3Muc3RyaXBlQWZmaXJtLmluaXQpLFxuICAgIC8vIFN0cmlwZSBBZnRlcnBheVxuICAgIHN0cmlwZUFmdGVycGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBBZnRlcnBheVwiLCBPanNGbG93cy5zdHJpcGVBZnRlcnBheS5pbml0KSxcbiAgICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gICAgYWlyd2FsbGV4R29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICAgIGFpcndhbGxleEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBBcHBsZVBheVwiLCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgICAvLyBMb29wXG4gICAgbG9vcDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJMb29wXCIsIE9qc0Zsb3dzLmxvb3BDcnlwdG8uaW5pdCksXG4gICAgLy8gUGF5UGFsXG4gICAgcGF5cGFsOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlBheVBhbFwiLCBPanNGbG93cy5wYXlwYWwuaW5pdCksXG4gICAgLy8gS2xhcm5hXG4gICAgYWlyd2FsbGV4S2xhcm5hOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIktsYXJuYVwiLCBPanNGbG93cy5haXJ3YWxsZXhLbGFybmEuaW5pdCksXG4gICAgLy8gUG9ja3l0IFBheVBhbFxuICAgIHBvY2t5dFBheXBhbDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJQb2NreXQgUGF5UGFsXCIsIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5pbml0KSxcbiAgICAvLyBBdXRobmV0IEdvb2dsZVBheVxuICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBdXRobmV0IEdvb2dsZVBheVwiLCBPanNGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkuaW5pdCksXG4gICAgLy8gQXV0aG5ldCBBcHBsZVBheVxuICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkF1dGhuZXQgQXBwbGVQYXlcIiwgT2pzRmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkuaW5pdCksXG4gICAgLy8gQWR5ZW4gR29vZ2xlUGF5XG4gICAgYWR5ZW5Hb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWR5ZW4gR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmFkeWVuR29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFkeWVuIEFwcGxlUGF5XG4gICAgYWR5ZW5BcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBZHllbiBBcHBsZVBheVwiLCBPanNGbG93cy5hZHllbkFwcGxlUGF5LmluaXQpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgfTtcbn07XG5cbmNvbnN0IHsgZXJyX186IGVycl9fJDIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0gei5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0gei5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyQyKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRlY3RGcmFtZXdvcmsoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGNvbnN0IG5leHRXaW5kb3cgPSB3aW5kb3c7XG4gICAgaWYgKG5leHRXaW5kb3c/Lm5leHQgfHwgbmV4dFdpbmRvdz8uX19ORVhUX0RBVEFfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbmV4dFwiKSkge1xuICAgICAgcmV0dXJuIFwibmV4dGpzXCIgLyogTmV4dEpTICovO1xuICAgIH1cbiAgICBjb25zdCBudXh0V2luZG93ID0gd2luZG93O1xuICAgIGlmIChudXh0V2luZG93Py5fX05VWFRfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbnV4dFwiKSkge1xuICAgICAgcmV0dXJuIFwibnV4dFwiIC8qIE51eHQgKi87XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyhkb2N1bWVudCkuZmluZCgoa2V5KSA9PiBrZXkuaW5jbHVkZXMoXCJyZWFjdFwiKSkgfHwgISFBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKS5maW5kKFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIF9yZWFjdFJvb3RDb250YWluZXIgZG9lc24ndCBleGlzdFxuICAgICAgKG5vZGUpID0+IG5vZGUuX3JlYWN0Um9vdENvbnRhaW5lclxuICAgICkpIHtcbiAgICAgIHJldHVybiBcInJlYWN0XCIgLyogUmVhY3QgKi87XG4gICAgfVxuICAgIGNvbnN0IHZ1ZVdpbmRvdyA9IHdpbmRvdztcbiAgICBpZiAodnVlV2luZG93Py5WdWUgfHwgdnVlV2luZG93Py5fX1ZVRV9fKSB7XG4gICAgICByZXR1cm4gXCJ2dWVcIiAvKiBWdWUgKi87XG4gICAgfVxuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpKSB7XG4gICAgICByZXR1cm4gXCJhbmd1bGFyXCIgLyogQW5ndWxhciAqLztcbiAgICB9XG4gICAgcmV0dXJuIFwidmFuaWxsYVwiIC8qIFZhbmlsbGEgKi87XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiIC8qIFVua25vd24gKi87XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZyYW1ld29ya1ZlcnNpb24oZnJhbWV3b3JrKSB7XG4gIHRyeSB7XG4gICAgc3dpdGNoIChmcmFtZXdvcmspIHtcbiAgICAgIGNhc2UgXCJyZWFjdFwiIC8qIFJlYWN0ICovOiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm5leHRqc1wiIC8qIE5leHRKUyAqLzoge1xuICAgICAgICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgICAgIGNvbnN0IG5leHRXaW5kb3cgPSB3aW5kb3c7XG4gICAgICAgIHJldHVybiBuZXh0V2luZG93Py5uZXh0Py52ZXJzaW9uIHx8IG5leHRXaW5kb3c/Ll9fTkVYVF9EQVRBX18/LmJ1aWxkSWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJudXh0XCIgLyogTnV4dCAqLzoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJ2dWVcIiAvKiBWdWUgKi86IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwiYW5ndWxhclwiIC8qIEFuZ3VsYXIgKi86IHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnQyID0gZ2V0V2luZG93U2FmZSgpPy5kb2N1bWVudDtcbiAgICAgICAgY29uc3QgbmdWZXJzaW9uRWwgPSBkb2N1bWVudDI/LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIik7XG4gICAgICAgIHJldHVybiBuZ1ZlcnNpb25FbCA/IG5nVmVyc2lvbkVsLmdldEF0dHJpYnV0ZShcIm5nLXZlcnNpb25cIikgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBnZXRGcmFtZXdvcmtJbmZvKCkge1xuICBjb25zdCBmcmFtZXdvcmsgPSBkZXRlY3RGcmFtZXdvcmsoKTtcbiAgY29uc3QgdmVyc2lvbiA9IGdldEZyYW1ld29ya1ZlcnNpb24oZnJhbWV3b3JrKTtcbiAgcmV0dXJuIHsgZnJhbWV3b3JrLCB2ZXJzaW9uIH07XG59XG5cbmNvbnN0IGdldEZyYXVkTWV0YWRhdGEgPSAoKSA9PiB7XG4gIGNvbnN0IHNjcmVlbl9oZWlnaHQgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uaGVpZ2h0IDogbnVsbDtcbiAgY29uc3Qgc2NyZWVuX3dpZHRoID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLndpZHRoIDogbnVsbDtcbiAgY29uc3QgY29sb3JfZGVwdGggPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uY29sb3JEZXB0aCA6IG51bGw7XG4gIGNvbnN0IGphdmFfZW5hYmxlZCA9IHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yID8gd2luZG93Lm5hdmlnYXRvci5qYXZhRW5hYmxlZCgpIDogZmFsc2U7XG4gIGNvbnN0IHVzZXJfYWdlbnQgPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IDogbnVsbDtcbiAgY29uc3QgYWNjZXB0X2hlYWRlciA9IFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOFwiO1xuICBsZXQgbGFuZ3VhZ2UgPSBudWxsO1xuICBpZiAod2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IpIHtcbiAgICBsYW5ndWFnZSA9IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgPyB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlIDogd2luZG93Lm5hdmlnYXRvci5icm93c2VyTGFuZ3VhZ2U7XG4gIH1cbiAgY29uc3QgdGltZV96b25lX29mZnNldCA9ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgcmV0dXJuIHtcbiAgICBjb2xvcl9kZXB0aCxcbiAgICBqYXZhX2VuYWJsZWQsXG4gICAgamF2YXNjcmlwdF9lbmFibGVkOiB0cnVlLFxuICAgIGxhbmd1YWdlLFxuICAgIHNjcmVlbl9oZWlnaHQsXG4gICAgc2NyZWVuX3dpZHRoLFxuICAgIHRpbWVfem9uZV9vZmZzZXQsXG4gICAgdXNlcl9hZ2VudCxcbiAgICBhY2NlcHRfaGVhZGVyXG4gIH07XG59O1xuXG52YXIgU3VibWl0TWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyAoKFN1Ym1pdE1ldGhvZHMyKSA9PiB7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiY2FyZFwiXSA9IFwiY2FyZFwiO1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFwcGxlUGF5XCJdID0gXCJhcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJnb29nbGVQYXlcIl0gPSBcImdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICBTdWJtaXRNZXRob2RzMltcInBheXBhbFwiXSA9IFwicGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wia2xhcm5hXCJdID0gXCJrbGFybmFcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZmZpcm1cIl0gPSBcImFmZmlybVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFmdGVycGF5XCJdID0gXCJhZnRlcnBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcInN0cmlwZUxpbmtcIl0gPSBcInN0cmlwZS1saW5rXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5Hb29nbGVQYXlcIl0gPSBcImFkeWVuLWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkFwcGxlUGF5XCJdID0gXCJhZHllbi1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBQ0hcIl0gPSBcImFpcndhbGxleC1hY2hcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhFRlRcIl0gPSBcImFpcndhbGxleC1lZnRcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhCQUNTXCJdID0gXCJhaXJ3YWxsZXgtYmFjc1wiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleFNFUEFcIl0gPSBcImFpcndhbGxleC1zZXBhXCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xuei5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xudmFyIFBheW1lbnRQcm92aWRlclR5cGUgPSAvKiBAX19QVVJFX18gKi8gKChQYXltZW50UHJvdmlkZXJUeXBlMikgPT4ge1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkFDSFwiXSA9IFwiYWNoXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiRUZUXCJdID0gXCJlZnRcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJCQUNTXCJdID0gXCJiYWNzXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiU0VQQVwiXSA9IFwic2VwYVwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkFQUExFX1BBWVwiXSA9IFwiYXBwbGVfcGF5XCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQ1JFRElUX0NBUkRcIl0gPSBcImNyZWRpdF9jYXJkXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiR09PR0xFX1BBWVwiXSA9IFwiZ29vZ2xlX3BheVwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIlNUUklQRV9MSU5LXCJdID0gXCJzdHJpcGVfbGlua1wiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkNSWVBUT1wiXSA9IFwiY3J5cHRvXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiUEFZUEFMXCJdID0gXCJwYXlwYWxcIjtcbiAgcmV0dXJuIFBheW1lbnRQcm92aWRlclR5cGUyO1xufSkoUGF5bWVudFByb3ZpZGVyVHlwZSB8fCB7fSk7XG5cbmNvbnN0IGdldEFwcGxlUGF5UHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3QgYXBwbGVQYXlJbml0Rmxvd3MgPSBbaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LCBpbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXksIGluaXRGbG93cy5hZHllbkFwcGxlUGF5XTtcbiAgY29uc3QgYXBwbGVQYXlJbml0UmVzdWx0cyA9IFtdO1xuICBhcHBsZVBheUluaXRGbG93cy5mb3JFYWNoKChmbG93KSA9PiB7XG4gICAgY29uc3QgZmxvd1ZhbHVlID0gZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgaWYgKGZsb3dWYWx1ZT8uaXNBdmFpbGFibGUpIHtcbiAgICAgIGFwcGxlUGF5SW5pdFJlc3VsdHMucHVzaChmbG93VmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHN0cmlwZVBSRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVQUkZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgY29uc3QgaXNBcHBsZVBheUF2YWlsYWJsZSA9IHN0cmlwZVBSRmxvd1Jlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgaWYgKGlzQXBwbGVQYXlBdmFpbGFibGUpIHtcbiAgICAgIGFwcGxlUGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlUFJGbG93UmVzdWx0LnN0YXJ0RmxvdyhcImFwcGxlX3BheVwiLCB7XG4gICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBhcHBsZVBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogYXBwbGVQYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRBcHBsZVBheUZsb3coYXBwbGVQYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3QgZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3QgZ29vZ2xlUGF5SW5pdEZsb3dzID0gW2luaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXksIGluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXksIGluaXRGbG93cy5hZHllbkdvb2dsZVBheV07XG4gIGNvbnN0IGdvb2dsZVBheUluaXRSZXN1bHRzID0gW107XG4gIGdvb2dsZVBheUluaXRGbG93cy5mb3JFYWNoKChmbG93KSA9PiB7XG4gICAgY29uc3QgZmxvd1ZhbHVlID0gZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgaWYgKGZsb3dWYWx1ZT8uaXNBdmFpbGFibGUpIHtcbiAgICAgIGdvb2dsZVBheUluaXRSZXN1bHRzLnB1c2goZmxvd1ZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdHJpcGVQUkZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlUFJGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGNvbnN0IGlzR29vZ2xlUGF5QXZhaWxhYmxlID0gc3RyaXBlUFJGbG93UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXk7XG4gICAgaWYgKGlzR29vZ2xlUGF5QXZhaWxhYmxlKSB7XG4gICAgICBnb29nbGVQYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVQUkZsb3dSZXN1bHQuc3RhcnRGbG93KFwiZ29vZ2xlX3BheVwiLCB7XG4gICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBnb29nbGVQYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGdvb2dsZVBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEdvb2dsZVBheUZsb3coZ29vZ2xlUGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0QXBwbGVQYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgQXBwbGUgUGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBBcHBsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcbmNvbnN0IHN0YXJ0R29vZ2xlUGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEdvb2dsZSBQYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEdvb2dsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcbmNvbnN0IGdldEtsYXJuYVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGtsYXJuYUluaXRSZXN1bHRzID0gW107XG4gIGNvbnN0IGFpcndhbGxleEtsYXJuYUZsb3dSZXN1bHQgPSBpbml0Rmxvd3MuYWlyd2FsbGV4S2xhcm5hLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKGFpcndhbGxleEtsYXJuYUZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAga2xhcm5hSW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IGFpcndhbGxleEtsYXJuYUZsb3dSZXN1bHQuc3RhcnRGbG93KGN1c3RvbVBhcmFtcylcbiAgICB9KTtcbiAgfVxuICBjb25zdCBzdHJpcGVLbGFybmFGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZUtsYXJuYS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVLbGFybmFGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGtsYXJuYUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVLbGFybmFGbG93UmVzdWx0LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBrbGFybmFJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGtsYXJuYUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEtsYXJuYUZsb3coa2xhcm5hSW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0S2xhcm5hRmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEtsYXJuYSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgS2xhcm5hIHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBnZXRBZmZpcm1Qcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhZmZpcm1Jbml0UmVzdWx0cyA9IFtdO1xuICBjb25zdCBzdHJpcGVBZmZpcm1GbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZUFmZmlybS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVBZmZpcm1GbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGFmZmlybUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVBZmZpcm1GbG93UmVzdWx0LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBhZmZpcm1Jbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGFmZmlybUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEFmZmlybUZsb3coYWZmaXJtSW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0QWZmaXJtRmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFmZmlybSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQWZmaXJtIHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBnZXRBZnRlcnBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGFmdGVycGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgY29uc3Qgc3RyaXBlQWZ0ZXJwYXlGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZUFmdGVycGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZUFmdGVycGF5Rmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBhZnRlcnBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVBZnRlcnBheUZsb3dSZXN1bHQuc3RhcnRGbG93KGN1c3RvbVBhcmFtcylcbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGFmdGVycGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhZnRlcnBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEFmdGVycGF5RmxvdyhhZnRlcnBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFmdGVycGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFmdGVycGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBBZnRlcnBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kMSwgZXJyX186IGVycl9fJDEgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwidHJhY2VyXCIpO1xuY29uc3QgaW5pdFRyYWNlclNhZmUgPSAodmVyc2lvbiwgYmFzZVVybCkgPT4ge1xuICB0cnkge1xuICAgIGluaXRUcmFjZXJVbnNhZmUodmVyc2lvbiwgYmFzZVVybCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZXJyX18kMShgRXJyb3IgaW5pdGlhbGl6aW5nIHRyYWNlcjogJHtlcnJvcn1gKTtcbiAgfVxufTtcbmxldCBnbG9iYWxUcmFjZXI7XG5jb25zdCBpbml0VHJhY2VyVW5zYWZlID0gYXN5bmMgKHZlcnNpb24sIGJhc2VVcmwpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGNvbnN0IHNka1RyYWNlV2ViID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwYn1+LmpzJyk7XG4gIGNvbnN0IHsgQ29uc29sZVNwYW5FeHBvcnRlciwgU2ltcGxlU3BhblByb2Nlc3NvciwgV2ViVHJhY2VyUHJvdmlkZXIgfSA9IHNka1RyYWNlV2ViO1xuICBjb25zdCBpbnN0cnVtZW50YXRpb25GZXRjaCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGp9fi5qcycpO1xuICBjb25zdCB7IEZldGNoSW5zdHJ1bWVudGF0aW9uIH0gPSBpbnN0cnVtZW50YXRpb25GZXRjaDtcbiAgY29uc3QgY29udGV4dFpvbmUgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBrfX4uanMnKTtcbiAgY29uc3QgeyBab25lQ29udGV4dE1hbmFnZXIgfSA9IGNvbnRleHRab25lO1xuICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBlfX4uanMnKTtcbiAgY29uc3QgeyByZWdpc3Rlckluc3RydW1lbnRhdGlvbnMgfSA9IGluc3RydW1lbnRhdGlvbjtcbiAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwMX1+LmpzJyk7XG4gIGNvbnN0IHsgUmVzb3VyY2UgfSA9IHJlc291cmNlcztcbiAgY29uc3QgZGV0ZWN0UmVzb3VyY2VzID0gYXdhaXQgaW1wb3J0KCcuL2RldGVjdC1yZXNvdXJjZXMtIX57MDBufX4uanMnKS50aGVuKG4gPT4gbi5kKTtcbiAgY29uc3QgeyBkZXRlY3RSZXNvdXJjZXNTeW5jIH0gPSBkZXRlY3RSZXNvdXJjZXM7XG4gIGNvbnN0IGV4cG9ydGVyVHJhY2VPdGxwID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwb31+LmpzJyk7XG4gIGNvbnN0IHsgT1RMUFRyYWNlRXhwb3J0ZXIgfSA9IGV4cG9ydGVyVHJhY2VPdGxwO1xuICBjb25zdCBwcm9wYWdhdG9yQjMgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBsfX4uanMnKTtcbiAgY29uc3QgeyBCM1Byb3BhZ2F0b3IsIEIzSW5qZWN0RW5jb2RpbmcgfSA9IHByb3BhZ2F0b3JCMztcbiAgY29uc3Qgc2RrVHJhY2VCYXNlID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwM31+LmpzJyk7XG4gIGNvbnN0IHsgQmF0Y2hTcGFuUHJvY2Vzc29yIH0gPSBzZGtUcmFjZUJhc2U7XG4gIGxvZ19fJDEoYEluaXRpYWxpemluZyB0cmFjZXIgd2l0aCB2ZXJzaW9uICR7dmVyc2lvbn0gYW5kIGJhc2VVcmwgJHtiYXNlVXJsfWApO1xuICBjb25zdCBjb2xsZWN0b3JVcmwgPSBnZXRDb2xsZWN0b3JVcmwoYmFzZVVybCk7XG4gIGxvZ19fJDEoYFVzaW5nIGNvbGxlY3RvciBVUkwgJHtjb2xsZWN0b3JVcmx9YCk7XG4gIGNvbnN0IGV4cG9ydGVyID0gbmV3IE9UTFBUcmFjZUV4cG9ydGVyKHsgdXJsOiBjb2xsZWN0b3JVcmwgfSk7XG4gIGNvbnN0IGJhc2VBdHRycyA9IHtcbiAgICBcInNlcnZpY2UudmVyc2lvblwiOiB2ZXJzaW9uLFxuICAgIFwic2VydmljZS5uYW1lXCI6IFwib2pzXCJcbiAgfTtcbiAgY29uc3QgcHJvdmlkZXIgPSBuZXcgV2ViVHJhY2VyUHJvdmlkZXIoe1xuICAgIHJlc291cmNlOiBuZXcgUmVzb3VyY2UoYmFzZUF0dHJzKS5tZXJnZShkZXRlY3RSZXNvdXJjZXNTeW5jKCkpLFxuICAgIHNwYW5Qcm9jZXNzb3JzOiBbXG4gICAgICBuZXcgU2ltcGxlU3BhblByb2Nlc3NvcihuZXcgQ29uc29sZVNwYW5FeHBvcnRlcigpKSxcbiAgICAgIG5ldyBCYXRjaFNwYW5Qcm9jZXNzb3IoZXhwb3J0ZXIsIHtcbiAgICAgICAgc2NoZWR1bGVkRGVsYXlNaWxsaXM6IDUwMFxuICAgICAgfSlcbiAgICBdXG4gIH0pO1xuICBwcm92aWRlci5yZWdpc3Rlcih7XG4gICAgY29udGV4dE1hbmFnZXI6IG5ldyBab25lQ29udGV4dE1hbmFnZXIoKSxcbiAgICBwcm9wYWdhdG9yOiBuZXcgQjNQcm9wYWdhdG9yKHsgaW5qZWN0RW5jb2Rpbmc6IEIzSW5qZWN0RW5jb2RpbmcuTVVMVElfSEVBREVSIH0pXG4gIH0pO1xuICByZWdpc3Rlckluc3RydW1lbnRhdGlvbnMoe1xuICAgIGluc3RydW1lbnRhdGlvbnM6IFtcbiAgICAgIG5ldyBGZXRjaEluc3RydW1lbnRhdGlvbih7XG4gICAgICAgIHByb3BhZ2F0ZVRyYWNlSGVhZGVyQ29yc1VybHM6IFsvLiovXSxcbiAgICAgICAgLy8gUHJvcGFnYXRlIHRvIGFsbCBVUkxzXG4gICAgICAgIC8vIEV4Y2x1ZGUgQWR5ZW4gVVJMcyAtIHRoZXkgZG8gbm90IGFsbG93IE9QVElPTlMgcmVxdWVzdHNcbiAgICAgICAgLy8gQWxzbyBleGNsdWRlIGxvb3BjcnlwdG8ueHl6XG4gICAgICAgIGlnbm9yZVVybHM6IFsvXmh0dHBzOlxcL1xcLyguKlxcLik/YWR5ZW5cXC5jb20vLCAvXmh0dHBzOlxcL1xcLyguKlxcLik/bG9vcGNyeXB0b1xcLnh5ei9dXG4gICAgICB9KVxuICAgIF1cbiAgfSk7XG4gIGdsb2JhbFRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIik7XG4gIGxvZ19fJDEoYFRyYWNlciBpbml0aWFsaXplZGApO1xuICByZXR1cm4gZ2xvYmFsVHJhY2VyO1xufTtcbmNvbnN0IGdldENvbGxlY3RvclVybCA9IChmcm9tQmFzZVVybCkgPT4ge1xuICBjb25zdCBiYXNlSG9zdG5hbWUgPSBuZXcgVVJMKGZyb21CYXNlVXJsKS5ob3N0bmFtZTtcbiAgaWYgKGJhc2VIb3N0bmFtZSA9PT0gXCJjZGUub3BlbnBheXN0YWdpbmcuY29tXCIpIHtcbiAgICByZXR1cm4gXCJodHRwczovL290ZWwub3BlbnBheXNhbmRib3guY29tL3YxL3RyYWNlc1wiO1xuICB9IGVsc2UgaWYgKGJhc2VIb3N0bmFtZSA9PT0gXCJjZGUuZ2V0b3BlbnBheS5jb21cIikge1xuICAgIHJldHVybiBcImh0dHBzOi8vb3RlbC5nZXRvcGVucGF5LmNvbS92MS90cmFjZXNcIjtcbiAgfVxuICByZXR1cm4gXCJodHRwOi8vbG9jYWxob3N0OjQzMTkvdjEvdHJhY2VzXCI7XG59O1xuXG5jbGFzcyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKGZvcm1JZCwgYmFzZVVybCwgZm9ybUNhbGxiYWNrcywgaW50ZXJuYWxDYWxsYmFja3MpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmICghZXZlbnQuc291cmNlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltPSlNdIE5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGdldENsZWFuT3JpZ2luKGV2ZW50Lm9yaWdpbikgIT09IGdldENsZWFuT3JpZ2luKHRoaXMuYmFzZVVybCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJwZW5wYWxcIl0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJzb3VyY2VcIl0gJiYgZXZlbnQuZGF0YVtcInNvdXJjZVwiXSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgZXZlbnREYXRhID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV2ZW50RGF0YSA9IHBhcnNlRXZlbnRQYXlsb2FkKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUV2ZW50KGV2ZW50RGF0YSk7XG4gICAgICBpZiAoIWlzVmFsaWQpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkLCBwYXlsb2FkIH0gPSBldmVudERhdGE7XG4gICAgICBjb25zdCBldmVudFR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHBheWxvYWQuaGVpZ2h0ID8gYCR7cGF5bG9hZC5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUsIHtcbiAgICAgICAgICAgIG9iZnVzY2F0ZWRWYWx1ZTogcGF5bG9hZC5vYmZ1c2NhdGVkVmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tlbGVtZW50SWRdID0gZXZlbnQuc291cmNlO1xuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQocGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcihwYXlsb2FkLm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IocGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMsIGVsZW1lbnRJZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBldmVudFR5cGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKGV2ZW50RGF0YSkgPT4ge1xuICAgICAgaWYgKGV2ZW50RGF0YS5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFldmVudERhdGEuZWxlbWVudElkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBldmVudERhdGEuZm9ybUlkKTtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5vbmNlcy5oYXMoZXZlbnREYXRhLm5vbmNlKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLm5vbmNlcy5hZGQoZXZlbnREYXRhLm5vbmNlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgdGhpcy5ldmVudFRhcmdldHMgPSB7fTtcbiAgICB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgdGhpcy5mb3JtSWQgPSBmb3JtSWQ7XG4gICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDtcbiAgICB0aGlzLmZvcm1DYWxsYmFja3MgPSBmb3JtQ2FsbGJhY2tzO1xuICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBpbnRlcm5hbENhbGxiYWNrcztcbiAgfVxufVxuY29uc3QgZ2V0Q2xlYW5PcmlnaW4gPSAodXJsKSA9PiB7XG4gIHJldHVybiBuZXcgVVJMKHVybCkub3JpZ2luO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGlvbihpZnJhbWUsIGNoaWxkT3JpZ2luKSB7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiBmYWxzZSxcbiAgICBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgaXNWYWxpZE9iamVjdCA9IGF3YWl0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QoY29ubmVjdGlvbk9iaik7XG4gIGlmICghaXNSZXN1bHRWYWxpZChjb25uZWN0aW9uT2JqLCBpc1ZhbGlkT2JqZWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0YCk7XG4gIH1cbiAgcmV0dXJuIGNvbm5lY3Rpb25PYmo7XG59XG5jbGFzcyBDb25uZWN0aW9uTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24oaWQsIGNvbm5lY3Rpb24pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChpZCwgY29ubmVjdGlvbik7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cblxuY29uc3Qgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzID0gKGluaXRQckZsb3dzLCBjb250ZXh0LCBjYWxsYmFja3MpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUiB9ID0gaW5pdFByRmxvd3M7XG4gIHN0cmlwZVBSLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBpbml0UmVzdWx0ID0gcmVzdWx0LmxvYWRlZFZhbHVlO1xuICAgICAgY29uc3QgY2FuQXBwbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgICAgY29uc3QgY2FuR29vZ2xlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXk7XG4gICAgICBjb25zdCBmaW5hbFN0YXR1cyA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuQXBwbGVQYXksXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbkFwcGxlUGF5KSB7XG4gICAgICAgICAgICAgIHJ1blN0cmlwZVByRmxvdyhcImFwcGxlX3BheVwiLCBpbml0UmVzdWx0LCBjb250ZXh0LCBjYWxsYmFja3MsIHVzZXJQYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkdvb2dsZVBheSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuR29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgIHJ1blN0cmlwZVByRmxvdyhcImdvb2dsZV9wYXlcIiwgaW5pdFJlc3VsdCwgY29udGV4dCwgY2FsbGJhY2tzLCB1c2VyUGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjYWxsYmFja3MuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKGZpbmFsU3RhdHVzKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyA9IChwcm92aWRlciwgaW5pdFJlc3VsdCwgY29udGV4dCwgZm9ybUNhbGxiYWNrcywgcGFyYW1zKSA9PiB7XG4gIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcHJvdmlkZXIpLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBwYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICBpbml0UmVzdWx0XG4gIH0pO1xufTtcblxuY29uc3QgR0VORVJJQ19DT05OX0VSUiA9IGBUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5gO1xuY29uc3QgeyBsb2dfXywgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwib3AtZm9ybVwiKTtcbmNsYXNzIE9wZW5QYXlGb3JtIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuY2RlTG9hZEV2ZW50ID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmFueUNkZUNvbm4gPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuY29udGV4dCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5pbml0Rmxvd3MgPSBjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzKCk7XG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXJ0Rm9ybUluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0cmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICAgICAgY29uc3Qgc3BhbiA9IHRyYWNlci5zdGFydFNwYW4oXCJmb3JtLmluaXRpYWxpemVcIiwge1xuICAgICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29udGV4dC53aXRoKHRyYWNlLnNldFNwYW4oY29udGV4dC5hY3RpdmUoKSwgc3BhbiksIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjZGVCcmlkZ2VJZnJhbWUgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0UpO1xuICAgICAgICAgIGNkZUJyaWRnZUlmcmFtZS5ub2RlLmlkID0gXCJfX29wX2ludGVybmFsX2NkZV9icmlkZ2VcIjtcbiAgICAgICAgICBjZGVCcmlkZ2VJZnJhbWUubm9kZS5hcmlhSGlkZGVuID0gXCJ0cnVlXCI7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihjZGVCcmlkZ2VJZnJhbWUubm9kZS5zdHlsZSwge1xuICAgICAgICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgICAgICAgIG1hcmdpbjogXCIwcHhcIixcbiAgICAgICAgICAgIHBhZGRpbmc6IFwiMHB4XCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBcIm5vbmVcIixcbiAgICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2RlQnJpZGdlSWZyYW1lLm1vdW50KFwiYm9keVwiKTtcbiAgICAgICAgICBsb2dfXyhcIkNERSBicmlkZ2UgZWxlbWVudCBtb3VudGVkXCIpO1xuICAgICAgICAgIGxvZ19fKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIik7XG4gICAgICAgICAgbG9nX18oXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgICAgY29uc3QgY2RlTG9hZGVkID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogR0VORVJJQ19DT05OX0VSUlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxvZ19fKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpO1xuICAgICAgICAgIHNwYW4/LmFkZEV2ZW50KFwid2FpdGluZ19mb3JfY2RlX2Nvbm5lY3Rpb25cIik7XG4gICAgICAgICAgbG9nX18oXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgY2RlQ29ublNwYW4gPSB0cmFjZXI/LnN0YXJ0U3BhbihcImNkZS5jb25uZWN0XCIsIHZvaWQgMCwgY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgY29uc3QgYW55Q2RlQ29ubiA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBHRU5FUklDX0NPTk5fRVJSXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2RlQ29ublNwYW4/LmVuZCgpO1xuICAgICAgICAgIHNwYW4/LmFkZEV2ZW50KFwiY2RlX2Nvbm5lY3RlZFwiKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKTtcbiAgICAgICAgICBhd2FpdCBzZXRVc2VyRGV2aWNlVG9rZW4oYW55Q2RlQ29ubiwgdGhpcy5kZXZpY2VUb2tlbik7XG4gICAgICAgICAgbG9nX18oXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgICAgY29uc3Qgb2pzQ29udGV4dCA9IE9wZW5QYXlGb3JtLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICAgIGNkZUxvYWRlZCxcbiAgICAgICAgICAgIGFueUNkZUNvbm4sXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5jb250ZXh0LnNldChvanNDb250ZXh0KTtcbiAgICAgICAgICBzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnModGhpcy5pbml0Rmxvd3MsIG9qc0NvbnRleHQsIHRoaXMuZm9ybUNhbGxiYWNrcyk7XG4gICAgICAgICAgbG9nX18oXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIik7XG4gICAgICAgICAgYXdhaXQgc3RhcnRBbGxJbml0Rmxvd3ModGhpcy5pbml0Rmxvd3MsIG9qc0NvbnRleHQsIHRoaXMuZm9ybUNhbGxiYWNrcyk7XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWQoY2RlTG9hZGVkLnRvdGFsQW1vdW50QXRvbXMsIGNkZUxvYWRlZC5jdXJyZW5jeSk7XG4gICAgICAgICAgbG9nX18oXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgICAgICBzcGFuPy5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgICB0cmFjayhcImZvcm1fbG9hZGVkXCIpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyKTtcbiAgICAgICAgICBzcGFuPy5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlcnJfXyhcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICB0cmFjayhcImZvcm1faW5pdF9lcnJvclwiLCB7XG4gICAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNwYW4/LmVuZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChoZWlnaHQpID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgaWYgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKSB7XG4gICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC50eXBlID09PSBFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRSkgcmV0dXJuO1xuICAgICAgICAgIGVsZW1lbnQubm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRlZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnNldChwYXlsb2FkKTtcbiAgICAgICAgdHJhY2soXCJjZGVfbG9hZGVkXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlcnJNc2cpID0+IHtcbiAgICAgIGlmICghdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGVyck1zZyksIGVyck1zZyk7XG4gICAgICAgIHRyYWNrKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBlcnJNc2dcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoZWxlbWVudFR5cGUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiY3JlYXRlRWxlbWVudFwiKTtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCB0eXBlID0gX0VsZW1lbnRUeXBlRW51bVpvZC5wYXJzZShlbGVtZW50VHlwZSk7XG4gICAgICBjb25zdCBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhvcHRpb25zKTtcbiAgICAgIGZyYW1lLm5hbWUgPSBgJHt0eXBlfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtmcmFtZS5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZy50b1N0cmluZygpO1xuICAgICAgZnJhbWUuc3JjID0gdXJsLmhyZWY7XG4gICAgICBmcmFtZS5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIjtcbiAgICAgIGZyYW1lLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICBjb25zdCByZWdpc3RlcmVkRWxlbWVudCA9IHRoaXMucmVnaXN0ZXJJZnJhbWUodHlwZSwgZnJhbWUpO1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRFbGVtZW50O1xuICAgIH07XG4gICAgdGhpcy5yZWdpc3RlcklmcmFtZSA9ICh0eXBlLCBmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgbm9kZTogZnJhbWUsXG4gICAgICAgIG1vdW50OiAoc2VsZWN0b3IpID0+IHtcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKT8uYXBwZW5kQ2hpbGQoZnJhbWUpO1xuICAgICAgICAgIHRyYWNrKFwiZWxlbWVudF9tb3VudGVkXCIsIHtcbiAgICAgICAgICAgIGVsZW1lbnRfdHlwZTogdHlwZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogZWxlbWVudC50eXBlLCBub2RlOiBlbGVtZW50Lm5vZGUgfSk7XG4gICAgICBpZiAoIXRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX0NWQ106IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW3R5cGVdID0gZWxlbWVudDtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH07XG4gICAgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCk7XG4gICAgICBpZiAob3B0aW9ucy5zdHlsZXMpIHtcbiAgICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic3R5bGVzXCIsIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKG9wdGlvbnMuc3R5bGVzKSk7XG4gICAgICB9XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKTtcbiAgICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgICB9O1xuICAgIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChlbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gY3JlYXRlVHJhY2tpbmdTcGFuKFxuICAgICAgICB7XG4gICAgICAgICAgc3Bhbk5hbWU6IFwiY29ubmVjdF90b19lbGVtZW50XCIsXG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCBjcmVhdGVDb25uZWN0aW9uKGVsZW1lbnQubm9kZSk7XG4gICAgICAgICAgY29ubi50cmFjaW5nQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZWxlbWVudC50eXBlLCBjb25uKTtcbiAgICAgICAgICBpZiAoIXRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyAmJiBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFKSB7XG4gICAgICAgICAgICB0aGlzLmFueUNkZUNvbm4uc2V0KGNvbm4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKS5jYXRjaCgoZXJyKSA9PiBlcnJfXyhcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgZXJyKSk7XG4gICAgfTtcbiAgICB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHk7XG4gICAgfTtcbiAgICB0aGlzLnN1Ym1pdENhcmQgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgZXJyX18oXCJGb3JtIGlzIGFscmVhZHkgc3VibWl0dGluZy4gUGxlYXNlIHdhaXQgZm9yIHRoZSBzdWJtaXNzaW9uIHRvIGZpbmlzaCBiZWZvcmUgc3VibWl0dGluZyBhZ2Fpbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJzdWJtaXRfY2FyZFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgICBwYXltZW50Um91dGVJZDogcGFyYW1zPy5wYXltZW50Um91dGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJhY2soXCJzdWJtaXRfY2FyZFwiLCB7IC4uLnBhcmFtcyB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcInN1Ym1pdENhcmRcIik7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IE9qc0Zsb3dzLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpLFxuICAgICAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBwYXJhbXM/LnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gY3JlYXRlVHJhY2tpbmdTcGFuKFxuICAgICAgICB7XG4gICAgICAgICAgc3Bhbk5hbWU6IFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIixcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHNcIik7XG4gICAgICAgICAgY29uc3QgY29udGV4dDIgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFjb250ZXh0Mikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IGFwcGxlUGF5UHJvY2Vzc29ycywgaXNBdmFpbGFibGU6IGlzQXBwbGVQYXlBdmFpbGFibGUgfSA9IGdldEFwcGxlUGF5UHJvY2Vzc29ycyhcbiAgICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IGdvb2dsZVBheVByb2Nlc3NvcnMsIGlzQXZhaWxhYmxlOiBpc0dvb2dsZVBheUF2YWlsYWJsZSB9ID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyhcbiAgICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBwYXlwYWxGbG93UmVzdWx0ID0gdGhpcy5pbml0Rmxvd3MucGF5cGFsLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBjb25zdCBwYXlwYWxBdmFpbGFibGUgPSBwYXlwYWxGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/PyBmYWxzZTtcbiAgICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IGtsYXJuYVByb2Nlc3NvcnMsIGlzQXZhaWxhYmxlOiBpc0tsYXJuYUF2YWlsYWJsZSB9ID0gZ2V0S2xhcm5hUHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBhZmZpcm1Qcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNBZmZpcm1BdmFpbGFibGUgfSA9IGdldEFmZmlybVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogYWZ0ZXJwYXlQcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNBZnRlcnBheUF2YWlsYWJsZSB9ID0gZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzKFxuICAgICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHBvY2t5dFBheXBhbEF2YWlsYWJsZSA9IGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMuc29tZShcbiAgICAgICAgICAgIChtZXRob2QpID0+IG1ldGhvZC5wcm9jZXNzb3JfbmFtZSA9PT0gXCJwb2NreXRcIiAmJiBtZXRob2QucHJvdmlkZXIgPT09IFwicGF5cGFsXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGxvb3BGbG93UmVzdWx0ID0gdGhpcy5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgY29uc3QgbG9vcENyeXB0b0F2YWlsYWJsZSA9IGxvb3BGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/PyBmYWxzZTtcbiAgICAgICAgICBjb25zdCBzdHJpcGVMaW5rRmxvd1Jlc3VsdCA9IHRoaXMuaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGNvbnN0IHN0cmlwZUxpbmtBdmFpbGFibGUgPSBzdHJpcGVMaW5rRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2U7XG4gICAgICAgICAgY29uc3QgbWV0aG9kcyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5jYXJkLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuYXBwbGVQYXksXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGFwcGxlUGF5UHJvY2Vzc29ycyxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGlzQXBwbGVQYXlBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuZ29vZ2xlUGF5LFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBnb29nbGVQYXlQcm9jZXNzb3JzLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogaXNHb29nbGVQYXlBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMucGF5cGFsLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBwYXlwYWxBdmFpbGFibGUgPyBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLnBheXBhbF0gOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHBheXBhbEF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5rbGFybmEsXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGtsYXJuYVByb2Nlc3NvcnMsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBpc0tsYXJuYUF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5hZmZpcm0sXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGFmZmlybVByb2Nlc3NvcnMsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBpc0FmZmlybUF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5hZnRlcnBheSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogYWZ0ZXJwYXlQcm9jZXNzb3JzLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogaXNBZnRlcnBheUF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5wb2NreXRQYXlwYWwsXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IHBvY2t5dFBheXBhbEF2YWlsYWJsZSA/IFtQYXltZW50UHJvY2Vzc29yLkVudW0ucG9ja3l0XSA6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogcG9ja3l0UGF5cGFsQXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmxvb3BDcnlwdG8sXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGxvb3BDcnlwdG9BdmFpbGFibGUgPyBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLmxvb3BdIDogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBsb29wQ3J5cHRvQXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLnN0cmlwZUxpbmssXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IFtQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHN0cmlwZUxpbmtBdmFpbGFibGUsXG4gICAgICAgICAgICAgIGNvbnRyb2xsZXI6IHN0cmlwZUxpbmtGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/IHN0cmlwZUxpbmtGbG93UmVzdWx0LmNvbnRyb2xsZXIgOiB2b2lkIDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdO1xuICAgICAgICAgIGNvbnN0IGluaXRGbG93TmFtZU1hcCA9IHtcbiAgICAgICAgICAgIHBheXBhbDogU3VibWl0TWV0aG9kcy5wYXlwYWwsXG4gICAgICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICAgICAgYWlyd2FsbGV4QXBwbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4QXBwbGVQYXksXG4gICAgICAgICAgICBhdXRob3JpemVOZXRHb29nbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0R29vZ2xlUGF5LFxuICAgICAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0QXBwbGVQYXksXG4gICAgICAgICAgICBhZHllbkdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5hZHllbkdvb2dsZVBheSxcbiAgICAgICAgICAgIGFkeWVuQXBwbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWR5ZW5BcHBsZVBheVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgbWV0aG9kc19vbGQgPSBPYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChba2V5LCBmbG93XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGluaXRGbG93TmFtZU1hcFtrZXldID8/IGtleTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIG5hbWU6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogZmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIFsuLi5tZXRob2RzX29sZCwgLi4ubWV0aG9kc107XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfTtcbiAgICB0aGlzLmdlbmVyYWxTdWJtaXQgPSBhc3luYyAobWV0aG9kLCBzZXR0aW5ncykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIGVycl9fKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVUcmFja2luZ1NwYW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Bhbk5hbWU6IFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyYWNrKFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLCB7IG1ldGhvZCwgc2V0dGluZ3MgfSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZW5lcmFsU3VibWl0XCIpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dDIgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWNvbnRleHQyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuY2FyZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRDYXJkKHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLnBvY2t5dFBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5QQVlQQUwsXG4gICAgICAgICAgICAgICAgICAgIFwicG9ja3l0XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3MgfSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMucGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5wYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLlBBWVBBTCxcbiAgICAgICAgICAgICAgICAgICAgXCJwYXlwYWxcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5ncyB9LFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5rbGFybmE6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdyB9ID0gZ2V0S2xhcm5hUHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFmZmlybToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93IH0gPSBnZXRBZmZpcm1Qcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWZ0ZXJwYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdyB9ID0gZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMubG9vcENyeXB0bzoge1xuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJjcnlwdG9cIixcbiAgICAgICAgICAgICAgICAgICAgXCJsb29wXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3cgfSA9IGdldEFwcGxlUGF5UHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93IH0gPSBnZXRHb29nbGVQYXlQcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBLZWVwaW5nIGV4aXN0aW5nIGNvbW1lbnRlZCBjb2RlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIGluIHRoZSBmdXR1cmUgdmVyc2lvblxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWlyd2FsbGV4R29vZ2xlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFpcndhbGxleEdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWlyd2FsbGV4R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWlyd2FsbGV4QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhaXJ3YWxsZXhBcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhaXJ3YWxsZXhBcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdXRob3JpemVOZXRHb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYXV0aG9yaXplTmV0R29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yaXplTmV0QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhdXRob3JpemVOZXRBcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0QXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZHllbkdvb2dsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFkeWVuR29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGFkeWVuLWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkeWVuR29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFkeWVuQXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZHllbkFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWR5ZW5BcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhZHllbkFwcGxlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGFkeWVuLWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWR5ZW5BcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBQ0g6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLmFpcndhbGxleEFDSC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuQUNILFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4RUZUOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhFRlQucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkVGVCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEJBQ1M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLmFpcndhbGxleEJBQ1MucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkJBQ1MsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhTRVBBOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhTRVBBLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5TRVBBLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuc3RyaXBlTGluazoge1xuICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgXCJTdHJpcGVMaW5rIGNhbm5vdCBiZSBzdWJtaXR0ZWQgbWFudWFsbHkuIFBsZWFzZSBtb3VudCB0aGUgYnV0dG9uIHByb3Blcmx5IGFuZCBpZiB1c2VyIGNvbXBsZXRlZCB0aGUgcGF5bWVudCBmbG93IHZpYSBTdHJpcGVMaW5rIGJ1dHRvbiwgdGhlIHBheW1lbnQgd2lsbCBiZSBzdWJtaXR0ZWQgYXV0b21hdGljYWxseS5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0TmV2ZXIobWV0aG9kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zdWJtaXRXaXRoID0gdGhpcy5nZW5lcmFsU3VibWl0O1xuICAgIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkO1xuICAgIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIik7XG4gICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJkZXN0cm95XCIpO1xuICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgZWxlbWVudC5ub2RlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgICAgIGRldGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzKCk7XG4gICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGw7XG4gICAgICBkZWxldGUgd2luZG93W1wib2pzXCJdO1xuICAgICAgdHJhY2soXCJmb3JtX2Rlc3Ryb3llZFwiKTtcbiAgICB9O1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKG5ld0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhuZXdDYWxsYmFja3MpO1xuICAgIH07XG4gICAgT3BlblBheUZvcm0uYXNzaWduQXNTaW5nbGV0b24odGhpcyk7XG4gICAgdGhpcy5vanNWZXJzaW9uID0gXCIwLjUuMjNcIjtcbiAgICB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCIwLjUuMjNcIjtcbiAgICB0aGlzLmJhc2VVcmwgPSBjb25maWcuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCI7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZywgYmFzZVVybDogdGhpcy5iYXNlVXJsIH07XG4gICAgdGhpcy5mb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YDtcbiAgICB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB0aGlzLmZvcm1UYXJnZXQgPSBjb25maWcuZm9ybVRhcmdldCA/PyBcImJvZHlcIjtcbiAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfTtcbiAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IENvbm5lY3Rpb25NYW5hZ2VyKCk7XG4gICAgdGhpcy5kZXZpY2VUb2tlbiA9IGdldERldmljZVRva2VuKCk7XG4gICAgYXR0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICBjb25zdCB7IGZyYW1ld29yaywgdmVyc2lvbiB9ID0gZ2V0RnJhbWV3b3JrSW5mbygpO1xuICAgIGdldEN1cnJlbnRFbnYodGhpcy5iYXNlVXJsKS50aGVuKChlbnZpcm9ubWVudCkgPT4ge1xuICAgICAgaWYgKCFtZXRyaWNzUHVibGlzaGVyLmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IG1ldHJpY3NDb250ZXh0ID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgICAgZnJhbWV3b3JrLFxuICAgICAgICAgIGZyYW1ld29ya1ZlcnNpb246IHZlcnNpb24sXG4gICAgICAgICAgb2pzVmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIG9qc1JlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybFxuICAgICAgICB9O1xuICAgICAgICBtZXRyaWNzUHVibGlzaGVyLnNldChtZXRyaWNzQ29udGV4dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJhY2soXCJmb3JtX2luaXRcIik7XG4gICAgY29uc29sZS5sb2coXCJPSlMgVkVSU0lPTlwiLCB0aGlzLm9qc1ZlcnNpb24pO1xuICAgIGlmIChjb25maWcuYWxsb3dUcmFjaW5nID09PSB0cnVlKSB7XG4gICAgICBpbml0VHJhY2VyU2FmZSh0aGlzLm9qc1ZlcnNpb24sIHRoaXMuYmFzZVVybCk7XG4gICAgfVxuICAgIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IE9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLm9qc0Zsb3dzID0gT2pzRmxvd3M7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmFzc2lnbkFzU2luZ2xldG9uID0gKGZvcm0pID0+IHtcbiAgICAgIGlmIChPcGVuUGF5Rm9ybS5nZXRJbnN0YW5jZSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICAgICAgfVxuICAgICAgd2luZG93W1wib2pzXCJdID0gZm9ybTtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5nZXRJbnN0YW5jZSA9ICgpID0+IHtcbiAgICAgIHJldHVybiB3aW5kb3dbXCJvanNcIl0gPz8gbnVsbDtcbiAgICB9O1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKGNvbmZpZywgY2RlTG9hZGVkUGF5bG9hZCwgYW55Q2RlQ29ubmVjdGlvbiwgZm9ybURpdikgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGJhc2VVcmw6IG5ldyBVUkwoY29uZmlnLmJhc2VVcmwgPz8gRlJBTUVfQkFTRV9VUkwpLm9yaWdpbixcbiAgICAgICAgZm9ybURpdixcbiAgICAgICAgZWxlbWVudHNTZXNzaW9uSWQ6IGNkZUxvYWRlZFBheWxvYWQuc2Vzc2lvbklkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2RzOiBjZGVMb2FkZWRQYXlsb2FkLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGN1c3RvbUluaXRQYXJhbXM6IGNvbmZpZy5jdXN0b21Jbml0UGFyYW1zID8/IHt9LFxuICAgICAgICBwcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb246IGNvbmZpZy5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb25cbiAgICAgIH07XG4gICAgfTtcbiAgfVxuICBjaGVja1ZhbGlkRm9ybUluc3RhbmNlKGNhbGxlciA9IFwidW5rbm93blwiKSB7XG4gICAgY29uc3QgY3VycmVudEluc3RhbmNlID0gT3BlblBheUZvcm0uZ2V0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBkZWJ1Z0luZm8gPSB7XG4gICAgICB0aGlzRm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgIGN1cnJlbnRGb3JtSWQ6IGN1cnJlbnRJbnN0YW5jZT8uZm9ybUlkIHx8IFwibm8tY3VycmVudC1pbnN0YW5jZVwiLFxuICAgICAgaXNEZXN0cm95ZWQ6IHRoaXMuaXNEZXN0cm95ZWQsXG4gICAgICBjaGVja291dFRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLnN1YnN0cmluZygwLCAxMCkgKyBcIi4uLlwiXG4gICAgfTtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgXG4gICAgICBbV2FybmluZ10gSW52YWxpZCBmb3JtIGluc3RhbmNlIGRldGVjdGVkLlxuICAgICAgSXQgbG9va3MgbGlrZSB5b3UgYXJlIHN0aWxsIHVzaW5nIGFuIG9sZCBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIGRlc3Ryb3llZC5cbiAgICAgIFBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBmb3JtIGFuZCBjbGVhbnVwIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgRGVidWcgSW5mbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgLSBjYWxsZXI6ICR7Y2FsbGVyfVxuICAgICAgLSBjYWxsZXJfZm9ybV9pZDogJHtkZWJ1Z0luZm8udGhpc0Zvcm1JZH1cbiAgICAgIC0gY3VycmVudF9hY3RpdmVfZm9ybV9pZDogJHtkZWJ1Z0luZm8uY3VycmVudEZvcm1JZH1cbiAgICAgIC0gaXNfZGVzdHJveWVkOiAke2RlYnVnSW5mby5pc0Rlc3Ryb3llZH1cbiAgICAgIC0gY2hlY2tvdXRfdG9rZW46ICR7ZGVidWdJbmZvLmNoZWNrb3V0VG9rZW59XG4gICAgYDtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgZXJyX18oZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghY3VycmVudEluc3RhbmNlIHx8IGN1cnJlbnRJbnN0YW5jZS5mb3JtSWQgIT09IHRoaXMuZm9ybUlkKSB7XG4gICAgICBlcnJfXyhlcnJvck1lc3NhZ2UpO1xuICAgICAgdHJhY2soXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ29udGV4dEFQSSBhcyBDLCBEaWFnQVBJIGFzIEQsIEVsZW1lbnRUeXBlRW51bSBhcyBFLCBGaWVsZE5hbWUgYXMgRiwgSU5WQUxJRF9TUEFOX0NPTlRFWFQgYXMgSSwgT3BlblBheUZvcm0gYXMgTywgUHJveHlUcmFjZXIgYXMgUCwgUk9PVF9DT05URVhUIGFzIFIsIFNwYW5LaW5kIGFzIFMsIFRyYWNlRmxhZ3MgYXMgVCwgY29udGV4dCBhcyBhLCBpc1ZhbGlkVHJhY2VJZCBhcyBiLCBjcmVhdGVDb250ZXh0S2V5IGFzIGMsIGlzVmFsaWRTcGFuSWQgYXMgZCwgU3BhblN0YXR1c0NvZGUgYXMgZSwgRGlhZ0xvZ0xldmVsIGFzIGYsIGdldEdsb2JhbCBhcyBnLCBJTlZBTElEX1NQQU5JRCBhcyBoLCBpc1NwYW5Db250ZXh0VmFsaWQgYXMgaSwgSU5WQUxJRF9UUkFDRUlEIGFzIGosIFByb3h5VHJhY2VyUHJvdmlkZXIgYXMgaywgU3VibWl0TWV0aG9kcyBhcyBsLCByZWdpc3Rlckdsb2JhbCBhcyByLCB0cmFjZSBhcyB0LCB1bnJlZ2lzdGVyR2xvYmFsIGFzIHUgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGtCQUFBQSxVQUFzQjtBQUMvQixTQUFTLEtBQUFDLFNBQVM7QUFDbEIsT0FBT0MsUUFBVztBQUNsQixTQUFTLE1BQUFDLFVBQVU7QUFFbkIsU0FBU0MsR0FBU0MsR0FBUUMsR0FBVztBQUNuQyxNQUFJQyxJQUFpQixPQUFPO0FBQzVCLEVBQUFBLElBQWlCQSxFQUFlRixHQUFRQyxDQUFTLElBQUlELEVBQU8sWUFBWUM7QUFDMUU7QUFDQSxTQUFTRSxHQUFTSCxHQUFRSSxHQUFJO0FBQzVCLEVBQUlBLE1BQU8sV0FDVEEsSUFBS0osRUFBTztBQUdkLE1BQUlLLElBQW9CLE1BQU07QUFDOUIsRUFBQUEsS0FBcUJBLEVBQWtCTCxHQUFRSSxDQUFFO0FBQ25EO0FBRUEsSUFBSUUsS0FBYyw0QkFBWTtBQUM1QixNQUFJQyxJQUFpQixTQUF1QkMsR0FBR0MsR0FBRztBQUNoRCxXQUFBRixJQUFpQixPQUFPLGtCQUFrQjtBQUFBLE1BQ3hDLFdBQVcsQ0FBQztBQUFBLElBQ2QsYUFBYSxTQUFTLFNBQVVDLEdBQUdDLEdBQUc7QUFDcEMsTUFBQUQsRUFBRSxZQUFZQztBQUFBLElBQ2hCLEtBQUssU0FBVUQsR0FBR0MsR0FBRztBQUNuQixlQUFTQyxLQUFLRDtBQUNaLFFBQUksT0FBTyxVQUFVLGVBQWUsS0FBS0EsR0FBR0MsQ0FBQyxNQUFHRixFQUFFRSxDQUFDLElBQUlELEVBQUVDLENBQUM7QUFBQSxJQUU5RCxHQUVPSCxFQUFlQyxHQUFHQyxDQUFDO0FBQUEsRUFDNUI7QUFFQSxTQUFPLFNBQVVELEdBQUdDLEdBQUc7QUFDckIsUUFBSSxPQUFPQSxLQUFNLGNBQWNBLE1BQU0sS0FBTSxPQUFNLElBQUksVUFBVSx5QkFBeUIsT0FBT0EsQ0FBQyxJQUFJLCtCQUErQjtBQUVuSSxJQUFBRixFQUFlQyxHQUFHQyxDQUFDO0FBRW5CLGFBQVNFLElB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LFdBQUksS0FBSyxlQUNQM2xCLEdBQU0xVixDQUFZLEdBQ2xCSCxFQUFNLDBCQUEwQixFQUFFLE9BQU9HLEVBQWEsQ0FBQyxHQUNoRCxNQUVMLENBQUNvN0IsS0FBbUJBLEVBQWdCLFdBQVcsS0FBSyxVQUN0RDFsQixHQUFNMVYsQ0FBWSxHQUNsQkgsRUFBTSwwQkFBMEIsRUFBRSxPQUFPRyxFQUFhLENBQUMsR0FDaEQsTUFFRjtBQUFBLEVBQ1Q7QUFDRjtBQWhFSTA0QixHQUFLLFdBQVdqWSxHQUdoQmlZLEdBQUssb0JBQW9CLENBQUN0VSxNQUFTO0FBQ2pDLE1BQUlzVSxHQUFZLFlBQVk7QUFDMUIsVUFBTSxJQUFJLE1BQU0sZ0VBQWdFO0FBRWxGLFNBQU8sTUFBU3RVO0FBQ2xCLEdBR0FzVSxHQUFLLGNBQWMsTUFDVixPQUFPLE9BQVUsTUFPMUJBLEdBQUssc0JBQXNCLENBQUNobEMsR0FBUTRuQyxHQUFrQm5nQixHQUFrQnJKLE9BQy9EO0FBQUEsRUFDTCxxQkFBcUJwZSxFQUFPO0FBQUEsRUFDNUIsU0FBUyxJQUFJLElBQUlBLEVBQU8sV0FBVzJiLEVBQWMsRUFBRTtBQUFBLEVBQ25ELFNBQUF5QztBQUFBLEVBQ0EsbUJBQW1Cd3BCLEVBQWlCO0FBQUEsRUFDcEMsd0JBQXdCQSxFQUFpQjtBQUFBLEVBQ3pDLGtCQUFBbmdCO0FBQUEsRUFDQSxrQkFBa0J6bkIsRUFBTyxvQkFBb0IsQ0FBQztBQUFBLEVBQzlDLG1DQUFtQ0EsRUFBTztBQUM1QztBQTNwQk4sSUFBTTZuQyxLQUFON0M7IiwKICAibmFtZXMiOiBbImNvbm5lY3RUb0NoaWxkIiwgInoiLCAiY2hhbGsiLCAidjQiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJmbiIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMkMSIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgImIiLCAicCIsICJfXyIsICJDdXN0b21FcnJvciIsICJfc3VwZXIiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIl9FbGVtZW50VHlwZUVudW1ab2QiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiQmFzZUVsZW1lbnRzU3R5bGUiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJFbGVtZW50RXZlbnQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJUb2tlbml6ZUNhcmRSZXNwb25zZSIsICJUaHJlZURTU3RhdHVzIiwgIlRocmVlRFNTdGF0dXMyIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiQVdYQmFuayIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJFRlRGb3JtRGF0YSIsICJCQUNTRm9ybURhdGEiLCAiU0VQQUZvcm1EYXRhIiwgIkFDSE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkVGVE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkJBQ1NNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJTRVBBTWljcm9EZXBvc2l0Rm9ybURhdGEiLCAiTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2UiLCAibnVsbE9yVW5kZWZPciIsICJDREVSZXNwb25zZUVycm9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZUFkZHJlc3MiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAiQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UiLCAiUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UiLCAiU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2UiLCAiVXNlckFjdGlvbkZFUGF5bG9hZCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlIiwgIlpvZEZpZWxkRXJyb3IiLCAiWm9kRmllbGRFcnJvcnMiLCAiTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSIsICJnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSIsICJvZ0Vycm9yTWVzc2FnZSIsICJrZXkiLCAiaXNTdHJpbmdpZmllZEpzb25PYmplY3QiLCAic3RyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAicmVzcG9uc2UiLCAiZXJyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMiLCAiZXJyb3JzIiwgImdldEVycm9yTWVzc2FnZSIsICJvYmoiLCAiZTIiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJzdW0iLCAiYXJyIiwgImEiLCAiYmVmb3JlVW5sb2FkSGFuZGxlciIsICJldmVudCIsICJwcmV2ZW50TmF2aWdhdGlvbiIsICJzdG9wUHJldmVudE5hdmlnYXRpb24iLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAic2ltcGxlT2pzRmxvdyIsICJpc1N1Ym1pdHRpbmciLCAicGFyYW1zIiwgInRyYWNrIiwgImZsb3dSZXN1bHQiLCAiZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlIiwgImVycm9yTWVzc2FnZSIsICJlcnJvckNvZGUiLCAic2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlIiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAiaW5pdCIsICJlcnJfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImV4dGVuZFN0YXRpY3MiLCAiX19leHRlbmRzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJfIiwgInQiLCAiZiIsICJ5IiwgImciLCAidmVyYiIsICJuIiwgInYiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX3JlYWQkNCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkkNCIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicSIsICJhd2FpdFJldHVybiIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImkiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSQ0IiwgIl9fcmVhZCQ0IiwgImVfMl8xIiwgInRlYXJkb3duIiwgInBhcmVudCIsICJlbXB0eSIsICJFTVBUWV9TVUJTQ1JJUFRJT04iLCAiaXNTdWJzY3JpcHRpb24iLCAiY29uZmlnIiwgInRpbWVvdXRQcm92aWRlciIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYXJncyIsICJfaSIsICJoYW5kbGUiLCAicmVwb3J0VW5oYW5kbGVkRXJyb3IiLCAibm9vcCIsICJlcnJvckNvbnRleHQiLCAiY2IiLCAiU3Vic2NyaWJlciIsICJfX2V4dGVuZHMiLCAiZGVzdGluYXRpb24iLCAiX3RoaXMiLCAiRU1QVFlfT0JTRVJWRVIiLCAibmV4dCIsICJlcnJvciIsICJjb21wbGV0ZSIsICJTYWZlU3Vic2NyaWJlciIsICJDb25zdW1lck9ic2VydmVyIiwgInBhcnRpYWxPYnNlcnZlciIsICJoYW5kbGVVbmhhbmRsZWRFcnJvciIsICJvYnNlcnZlck9yTmV4dCIsICJkZWZhdWx0RXJyb3JIYW5kbGVyIiwgIm9ic2VydmFibGUiLCAiaWRlbnRpdHkiLCAieCIsICJwaXBlRnJvbUFycmF5IiwgImZucyIsICJpbnB1dCIsICJwcmV2IiwgImZuIiwgIk9ic2VydmFibGUiLCAic3Vic2NyaWJlIiwgIm9wZXJhdG9yIiwgInN1YnNjcmliZXIiLCAiaXNTdWJzY3JpYmVyIiwgInNvdXJjZSIsICJzaW5rIiwgInByb21pc2VDdG9yIiwgImdldFByb21pc2VDdG9yIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIm9wZXJhdGlvbnMiLCAiaXNPYnNlcnZlciIsICJoYXNMaWZ0IiwgIm9wZXJhdGUiLCAiaW5pdCIsICJsaWZ0ZWRTb3VyY2UiLCAiY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIiwgIm9uTmV4dCIsICJvbkNvbXBsZXRlIiwgIm9uRXJyb3IiLCAib25GaW5hbGl6ZSIsICJPcGVyYXRvclN1YnNjcmliZXIiLCAic2hvdWxkVW5zdWJzY3JpYmUiLCAiY2xvc2VkXzEiLCAiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLCAiU3ViamVjdCIsICJzdWJqZWN0IiwgIkFub255bW91c1N1YmplY3QiLCAiX2MiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZXJzIiwgImhhc0Vycm9yIiwgImlzU3RvcHBlZCIsICJ0aHJvd25FcnJvciIsICJkYXRlVGltZXN0YW1wUHJvdmlkZXIiLCAiQWN0aW9uIiwgInNjaGVkdWxlciIsICJ3b3JrIiwgInN0YXRlIiwgImRlbGF5IiwgImludGVydmFsUHJvdmlkZXIiLCAiQXN5bmNBY3Rpb24iLCAiaWQiLCAiX2lkIiwgIl9zY2hlZHVsZXIiLCAiX2RlbGF5IiwgImVycm9yZWQiLCAiZXJyb3JWYWx1ZSIsICJhY3Rpb25zIiwgIlNjaGVkdWxlciIsICJzY2hlZHVsZXJBY3Rpb25DdG9yIiwgIm5vdyIsICJBc3luY1NjaGVkdWxlciIsICJTY2hlZHVsZXJBY3Rpb24iLCAiYWN0aW9uIiwgImFzeW5jU2NoZWR1bGVyIiwgImlzQXJyYXlMaWtlIiwgImlzUHJvbWlzZSIsICJpc0ludGVyb3BPYnNlcnZhYmxlIiwgImlzQXN5bmNJdGVyYWJsZSIsICJvYmoiLCAiY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IiLCAiZ2V0U3ltYm9sSXRlcmF0b3IiLCAiaXRlcmF0b3IiLCAiaXNJdGVyYWJsZSIsICJyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIiwgInJlYWRhYmxlU3RyZWFtIiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicmVhZGVyIiwgImRvbmUiLCAiX19nZW5lcmF0b3IiLCAiX19hd2FpdCIsICJpc1JlYWRhYmxlU3RyZWFtTGlrZSIsICJpbm5lckZyb20iLCAiZnJvbUludGVyb3BPYnNlcnZhYmxlIiwgImZyb21BcnJheUxpa2UiLCAiZnJvbVByb21pc2UiLCAiZnJvbUFzeW5jSXRlcmFibGUiLCAiZnJvbUl0ZXJhYmxlIiwgImZyb21SZWFkYWJsZVN0cmVhbUxpa2UiLCAib2JzIiwgImFycmF5IiwgInByb21pc2UiLCAiaXRlcmFibGUiLCAiaXRlcmFibGVfMSIsICJpdGVyYWJsZV8xXzEiLCAiYXN5bmNJdGVyYWJsZSIsICJwcm9jZXNzIiwgImFzeW5jSXRlcmFibGVfMSIsICJhc3luY0l0ZXJhYmxlXzFfMSIsICJfX2F3YWl0ZXIiLCAiX19hc3luY1ZhbHVlcyIsICJleGVjdXRlU2NoZWR1bGUiLCAicGFyZW50U3Vic2NyaXB0aW9uIiwgInJlcGVhdCIsICJzY2hlZHVsZVN1YnNjcmlwdGlvbiIsICJ0aHJvd0Vycm9yIiwgImVycm9yT3JFcnJvckZhY3RvcnkiLCAiZXJyb3JGYWN0b3J5IiwgIkVtcHR5RXJyb3IiLCAibGFzdFZhbHVlRnJvbSIsICJfaGFzVmFsdWUiLCAiX3ZhbHVlIiwgImlzVmFsaWREYXRlIiwgIlRpbWVvdXRFcnJvciIsICJpbmZvIiwgInNjaGVkdWxlckFyZyIsICJmaXJzdCIsICJlYWNoIiwgIl93aXRoIiwgInRpbWVvdXRFcnJvckZhY3RvcnkiLCAiX2QiLCAibWV0YSIsICJvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiIsICJ0aW1lclN1YnNjcmlwdGlvbiIsICJsYXN0VmFsdWUiLCAic2VlbiIsICJzdGFydFRpbWVyIiwgIkxvYWRlZE9uY2VQdWJsaXNoZXIiLCAiZXJyTXNnIiwgInZhbHVlSWZOb3RMb2FkZWQiLCAic3Vic2NyaXB0aW9uIiwgInRpbWVvdXRDb25maWciLCAiYXNzZXJ0TmV2ZXIiLCAidGltZW91dFBhcmFtcyIsICJPanNFbnZpcm9ubWVudCIsICJ6IiwgImNvbm50b0Jhc2VVcmxzIiwgImdldENvbm50b1VybCIsICJlbnYiLCAiZW52Q2FjaGUiLCAiZ2V0Q3VycmVudEVudiIsICJiYXNlVXJsIiwgInJlc3BvbnNlIiwgInJlcyIsICJleGNsdWRlUHJvcHMiLCAicHJvcHMiLCAia2V5IiwgImdldFdpbmRvd1NhZmUiLCAibWV0cmljc1B1Ymxpc2hlciIsICJNRVRSSUNTX1FVRVVFX0tFWSIsICJNQVhfUkVUUllfQVRURU1QVFMiLCAiQkFUQ0hfU0laRSIsICJCQVRDSF9JTlRFUlZBTF9NUyIsICJsb2dfXyR4IiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgIk1ldHJpY3NRdWV1ZSIsICJldmVudE5hbWUiLCAicHJvcGVydGllcyIsICJjb250ZXh0UHJvcGVydGllcyIsICJldmVudCIsICJ2NCIsICJzdG9yZWRRdWV1ZSIsICJzYWZlV2luZG93IiwgImNvbnRleHQiLCAiYmF0Y2giLCAiYmF0Y2hQYXlsb2FkIiwgImNvbm50b1VybCIsICJtZXRyaWNzUm91dGVyIiwgImV2ZW50c1RvS2VlcCIsICJtZXRyaWNzUXVldWUiLCAidHJhY2siLCAiZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlIiwgIm9uVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IiLCAiZXJyb3JNZXNzYWdlIiwgImdldEVycm9yTWVzc2FnZSIsICJvblVuY2F1Z2h0RXJyb3IiLCAicGFnZUxpZmVjeWNsZSIsICJsb2FkUGFnZUxpZmVjeWNsZSIsICJwYWdlTGlmZWN5Y2xlU3RhdGVDaGFuZ2VIYW5kbGVyIiwgImF0dGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzIiwgImxpZmVjeWNsZSIsICJkZXRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycyIsICJTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEiLCAib3VyQ3VycmVuY3lUb1RoZWlycyIsICJnZXRMb2FkZWRTdHJpcGUiLCAicHVibGlzaGFibGVLZXkiLCAiaXNTdHJpcGVKc1ByZXNlbnQiLCAic2xlZXAiLCAiY3JlYXRlU3RyaXBlRWxlbWVudHMiLCAic3RyaXBlUHViS2V5IiwgImVsZW1lbnRzT3B0aW9ucyIsICJzdHJpcGUiLCAiY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QiLCAidG90YWxBbW91bnRBdG9tIiwgImN1cnJlbmN5IiwgImlzQW1vdW50UGVuZGluZyIsICJpc0xpbmtPbmx5IiwgInN0cmlwZUN1cnJlbmN5IiwgInRpbWVvdXRNcyIsICJ3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCIsICJwYXltZW50UmVxdWVzdCIsICJldnQiLCAiY29uZmlybVN0cmlwZVByUE0iLCAibmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtIiwgImNvbmZpcm1SZXN1bHQiLCAibGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyIsICJyZXN1bHRTdGF0dXMiLCAiX2dsb2JhbFRoaXMiLCAiVkVSU0lPTiIsICJyZSIsICJfbWFrZUNvbXBhdGliaWxpdHlDaGVjayIsICJvd25WZXJzaW9uIiwgImFjY2VwdGVkVmVyc2lvbnMiLCAicmVqZWN0ZWRWZXJzaW9ucyIsICJteVZlcnNpb25NYXRjaCIsICJvd25WZXJzaW9uUGFyc2VkIiwgImdsb2JhbFZlcnNpb24iLCAiX3JlamVjdCIsICJ2IiwgIl9hY2NlcHQiLCAiZ2xvYmFsVmVyc2lvbk1hdGNoIiwgImdsb2JhbFZlcnNpb25QYXJzZWQiLCAiaXNDb21wYXRpYmxlIiwgIm1ham9yIiwgIkdMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVkiLCAiX2dsb2JhbCIsICJyZWdpc3Rlckdsb2JhbCIsICJ0eXBlIiwgImRpYWciLCAiYWxsb3dPdmVycmlkZSIsICJhcGkiLCAiZ2V0R2xvYmFsIiwgInVucmVnaXN0ZXJHbG9iYWwiLCAiX19yZWFkJDMiLCAibyIsICJuIiwgIm0iLCAiciIsICJhciIsICJfX3NwcmVhZEFycmF5JDMiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiRGlhZ0NvbXBvbmVudExvZ2dlciIsICJsb2dQcm94eSIsICJmdW5jTmFtZSIsICJuYW1lc3BhY2UiLCAibG9nZ2VyIiwgIkRpYWdMb2dMZXZlbCIsICJjcmVhdGVMb2dMZXZlbERpYWdMb2dnZXIiLCAibWF4TGV2ZWwiLCAiX2ZpbHRlckZ1bmMiLCAidGhlTGV2ZWwiLCAidGhlRnVuYyIsICJfX3JlYWQkMiIsICJfX3NwcmVhZEFycmF5JDIiLCAiQVBJX05BTUUkMiIsICJEaWFnQVBJIiwgIl9sb2dQcm94eSIsICJzZWxmIiwgInNldExvZ2dlciIsICJvcHRpb25zT3JMb2dMZXZlbCIsICJvbGRMb2dnZXIiLCAibmV3TG9nZ2VyIiwgInN0YWNrIiwgIm9wdGlvbnMiLCAiY3JlYXRlQ29udGV4dEtleSIsICJkZXNjcmlwdGlvbiIsICJCYXNlQ29udGV4dCIsICJwYXJlbnRDb250ZXh0IiwgIlJPT1RfQ09OVEVYVCIsICJfX3JlYWQkMSIsICJfX3NwcmVhZEFycmF5JDEiLCAiTm9vcENvbnRleHRNYW5hZ2VyIiwgIl9jb250ZXh0IiwgInRoaXNBcmciLCAidGFyZ2V0IiwgIl9fcmVhZCIsICJfX3NwcmVhZEFycmF5IiwgIkFQSV9OQU1FJDEiLCAiTk9PUF9DT05URVhUX01BTkFHRVIiLCAiQ29udGV4dEFQSSIsICJjb250ZXh0TWFuYWdlciIsICJUcmFjZUZsYWdzIiwgIklOVkFMSURfU1BBTklEIiwgIklOVkFMSURfVFJBQ0VJRCIsICJJTlZBTElEX1NQQU5fQ09OVEVYVCIsICJOb25SZWNvcmRpbmdTcGFuIiwgIl9zcGFuQ29udGV4dCIsICJfa2V5IiwgIl9hdHRyaWJ1dGVzIiwgIl9uYW1lIiwgIl9saW5rIiwgIl9saW5rcyIsICJfc3RhdHVzIiwgIl9lbmRUaW1lIiwgIl9leGNlcHRpb24iLCAiX3RpbWUiLCAiU1BBTl9LRVkiLCAiZ2V0U3BhbiIsICJnZXRBY3RpdmVTcGFuIiwgInNldFNwYW4iLCAic3BhbiIsICJkZWxldGVTcGFuIiwgInNldFNwYW5Db250ZXh0IiwgInNwYW5Db250ZXh0IiwgImdldFNwYW5Db250ZXh0IiwgIlZBTElEX1RSQUNFSURfUkVHRVgiLCAiVkFMSURfU1BBTklEX1JFR0VYIiwgImlzVmFsaWRUcmFjZUlkIiwgInRyYWNlSWQiLCAiaXNWYWxpZFNwYW5JZCIsICJzcGFuSWQiLCAiaXNTcGFuQ29udGV4dFZhbGlkIiwgIndyYXBTcGFuQ29udGV4dCIsICJjb250ZXh0QXBpIiwgIk5vb3BUcmFjZXIiLCAibmFtZSIsICJyb290IiwgInBhcmVudEZyb21Db250ZXh0IiwgImlzU3BhbkNvbnRleHQiLCAiYXJnMiIsICJhcmczIiwgImFyZzQiLCAib3B0cyIsICJjdHgiLCAiY29udGV4dFdpdGhTcGFuU2V0IiwgIk5PT1BfVFJBQ0VSIiwgIlByb3h5VHJhY2VyIiwgIl9wcm92aWRlciIsICJ2ZXJzaW9uIiwgIl9vcHRpb25zIiwgIl9mbiIsICJ0cmFjZXIiLCAiTm9vcFRyYWNlclByb3ZpZGVyIiwgIl92ZXJzaW9uIiwgIk5PT1BfVFJBQ0VSX1BST1ZJREVSIiwgIlByb3h5VHJhY2VyUHJvdmlkZXIiLCAiZGVsZWdhdGUiLCAiU3BhbktpbmQiLCAiU3BhblN0YXR1c0NvZGUiLCAiQVBJX05BTUUiLCAiVHJhY2VBUEkiLCAicHJvdmlkZXIiLCAic3VjY2VzcyIsICJ0cmFjZSIsICJjcmVhdGVDREVTcGFuIiwgImNkZUNvbm4iLCAiZGF0YSIsICJvcGVyYXRpb24iLCAicmVzdWx0IiwgImNyZWF0ZVRyYWNraW5nU3BhbiIsICJDZGVFcnJvciIsICJDdXN0b21FcnJvciIsICJmcmllbmRseU1lc3NhZ2UiLCAicXVlcnlDREUiLCAicmVzcG9uc2VTY2hlbWEiLCAidHJhY2tpbmdLZXkiLCAiaXNDREVSZXNwb25zZUVycm9yIiwgImNvbm5lY3Rpb24iLCAiY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEiLCAic2NoZW1hIiwgIkNERVJlc3BvbnNlRXJyb3IiLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3IiwgInJlcXVlc3QiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiZ2V0UHJlZmlsbCIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAic3RhcnRQYXltZW50RmxvdyIsICJwYXlsb2FkIiwgIlN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJzdGFydFBheW1lbnRGbG93Rm9yQ0MiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAic3RhcnRQYXltZW50Rmxvd0ZvclBSIiwgImNvbmZpcm1QYXltZW50RmxvdyIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCIsICJTZXR1cENoZWNrb3V0UmVzcG9uc2UiLCAiY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQiLCAiQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSIsICJnZXRDaGVja291dFZhbHVlIiwgInNlY3VyZVRva2VuIiwgInByb21vQ29kZSIsICJjaGVja291dFByZXZpZXciLCAiY3VycmVuY2llcyIsICJpbnYiLCAiYW1vdW50QXRvbSIsICJzdW0iLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50IiwgImlzU2V0dXBNb2RlIiwgInRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMiLCAiYWxsQ2RlQ29ubmVjdGlvbnMiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiY2hlY2tvdXRDYXJkRWxlbWVudHMiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAic2V0dXBDaGVja291dCIsICJwZXJmb3JtQ2hlY2tvdXQiLCAiQ0RFX1BPTExJTkdfSU5URVJWQUwiLCAicGluZ0NkZUZvclN0YXR1cyIsICJpZnJhbWUiLCAiY2hpbGRPcmlnaW4iLCAicmVzcG9uc2VNb2RlbCIsICJjb25uZWN0aW9uT2JqIiwgImNvbm5lY3RUb0NoaWxkIiwgInByZXBhcmVQYXltZW50RmxvdyIsICJQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSIsICJzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUiLCAiQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UiLCAic2V0VXNlckRldmljZVRva2VuIiwgImRldmljZVRva2VuIiwgIlNldFVzZXJEZXZpY2VUb2tlblJlc3BvbnNlIiwgImNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QiLCAicGluZyIsICJpc1Jlc3VsdFZhbGlkIiwgImlzVmFsaWQiLCAiRlJBTUVfQkFTRV9VUkwiLCAiRU5DT0RJTkciLCAiRU5DT0RJTkdfTEVOIiwgIlJBTkRPTV9MRU4iLCAiVElNRV9MRU4iLCAiVElNRV9NQVgiLCAiVUxJREVycm9yQ29kZSIsICJVTElERXJyb3IiLCAiZXJyb3JDb2RlIiwgIm1lc3NhZ2UiLCAicmFuZG9tQ2hhciIsICJwcm5nIiwgInJhbmRvbVBvc2l0aW9uIiwgImRldGVjdFBSTkciLCAicm9vdExvb2t1cCIsICJkZXRlY3RSb290IiwgImdsb2JhbENyeXB0byIsICJidWZmZXIiLCAiaW5XZWJXb3JrZXIiLCAiZW5jb2RlUmFuZG9tIiwgImxlbiIsICJzdHIiLCAiZW5jb2RlVGltZSIsICJtb2QiLCAiY3VycmVudExlbiIsICJ1bGlkIiwgInNlZWRUaW1lIiwgImN1cnJlbnRQUk5HIiwgInNlZWQiLCAiQ09PS0lFX05BTUUiLCAiZ2V0RGV2aWNlVG9rZW4iLCAiZXhpc3RpbmdDb29raWUiLCAiY29va2llIiwgInRva2VuIiwgInNldERldmljZVRva2VuIiwgIm9uZVllYXJGcm9tTm93IiwgImV4dHJhY3RJc3N1ZXNQZXJGaWVsZCIsICJpc3N1ZXNQZXJGaWVsZCIsICJmaWVsZE5hbWUiLCAiRmllbGROYW1lRW51bSIsICJjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0iLCAiZm9ybURpdiIsICJpbml0aWFsRGljdCIsICJhY2MiLCAicGFyc2VFdmVudFBheWxvYWQiLCAiZXZlbnREYXRhIiwgIkVsZW1lbnRFdmVudCIsICJnZW5lcmF0ZUFub255bW91c1ZhbHVlcyIsICJnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyIsICJmaWVsZHMiLCAiRmllbGROYW1lIiwgImdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyIsICJjaGVja291dF9zZXR0aW5ncyIsICJnZXRGdWxsTmFtZSIsICJmaXJzdE5hbWUiLCAibGFzdE5hbWUiLCAic3R5bGVzIiwgIndpZHRoIiwgImhlaWdodCIsICJiYW5rU2VsZWN0b3JTdHlsZXMiLCAiY3JlYXRlQW5kT3BlbkZyYW1lIiwgInVybCIsICJ0aXRsZSIsICJ0ZW1wbGF0ZSIsICJob3N0IiwgInNoYWRvd1Jvb3QiLCAiY2FuY2VsQnV0dG9uIiwgImNyZWF0ZUFuZE9wZW5CYW5rU2VsZWN0b3IiLCAiYmFua3MiLCAiYmFua0xpc3RIdG1sIiwgImJhbmsiLCAibG9nb0h0bWwiLCAiYmFua0l0ZW1zIiwgImNsZWFudXAiLCAiY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0iLCAicGF5bWVudE1ldGhvZFR5cGUiLCAiZWxlbWVudHMiLCAiaGFuZGxlQ2FuY2VsIiwgIm9uU3VjY2VzcyIsICJwb2xsaW5nSW50ZXJ2YWwiLCAic3RhcnRQb2xsaW5nIiwgIk1pY3JvRGVwb3NpdFN0YXR1c1Jlc3BvbnNlIiwgImNsZWFudXBFdmVudExpc3RlbmVycyIsICJvcmlnaW5hbEhhbmRsZUNhbmNlbCIsICJ3cmFwcGVkSGFuZGxlQ2FuY2VsIiwgImhhbmRsZVBvbGxpbmciLCAic3RhdHVzIiwgImhhbmRsZUV2ZW50cyIsICJUaHJlZURTU3RhdHVzIiwgInN0YXJ0M2RzVmVyaWZpY2F0aW9uIiwgInBhcmFtcyIsICJmcmFtZVdpZHRoIiwgImZyYW1lSGVpZ2h0IiwgImZyYW1lVGl0bGUiLCAiUGluZzNEU1N0YXR1c1Jlc3BvbnNlIiwgInN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0IiwgIm9wZW5Qb3B1cFdpbmRvdyIsICJwb3B1cE5hbWUiLCAicG9wdXBXaW5kb3ciLCAic3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdCIsICJleHBlY3RlZFZlcmlmeVRva2VuIiwgImVycl9fIiwgInBvbGxpbmciLCAidmVyaWZ5UmVzdWx0IiwgImRldGVjdExhbmd1YWdlIiwgImxhbmd1YWdlIiwgImxvZ19fJHciLCAiZXJyX18kdyIsICJjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSIsICJyZXF1aXJlX3ppcF9jb2RlIiwgInJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MiLCAicmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MiLCAicGF5bWVudF9tZXRob2QiLCAiaXNCdXNpbmVzc1B1cmNoYXNlIiwgIm5vbkNkZUZvcm1JbnB1dHMiLCAiY29uZGl0aW9uYWxGaWVsZHMiLCAiUmVxdWlyZWRTdHJpbmciLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyIsICJvblZhbGlkYXRpb25FcnJvciIsICJkZWZhdWx0RmllbGRWYWx1ZXMiLCAia2V5cyIsICJmb3JtYXR0ZWQiLCAiaXNzdWVzIiwgImlzc3VlS2V5cyIsICJsb2dfXyR2IiwgImVycl9fJHYiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MiLCAidmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdCIsICJwYXJzZWQiLCAiQWxsRmllbGROYW1lcyIsICJlcnJfXyR1IiwgInBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZmluZENwbU1hdGNoaW5nVHlwZSIsICJhbGxDUE1zIiwgInpvZE1vZGVsIiwgImNwbSIsICJjcG0yIiwgImNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0iLCAicGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCIsICJsb2dfXzIiLCAicHJlZmlsbCIsICJjcmVhdGVkUGF5bWVudE1ldGhvZCIsICJjaGVja291dFJlcXVlc3QiLCAiUGF5bWVudFByb2Nlc3NvciIsICJsb2FkU2NyaXB0IiwgInNjcmlwdElkIiwgInNyYyIsICJjaGVja0xvYWRlZEZuIiwgImV2ZW50TGlzdGVuZXJDb250cm9sbGVyIiwgInNjcmlwdCIsICJleGlzdGluZ1NjcmlwdCIsICJnZXRQYXltZW50RGF0YVJlcXVlc3QiLCAiZ2F0ZXdheSIsICJnYXRld2F5TWVyY2hhbnRJZCIsICJtZXJjaGFudE5hbWUiLCAibWVyY2hhbnRJZCIsICJpbml0aWFsUHJldmlldyIsICJvdmVycmlkZVBheW1lbnRSZXF1ZXN0IiwgInRvdGFsUHJpY2UiLCAiY3VycmVuY3lDb2RlIiwgImJhc2VSZXF1ZXN0IiwgImxvYWRHb29nbGVQYXlTY3JpcHQiLCAicGF5bWVudHNDbGllbnQiLCAiZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQiLCAiZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQiLCAicGF5bWVudERhdGFSZXF1ZXN0IiwgImVudmlyb25tZW50IiwgInBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgImNvbW1vbkFjdGlvbiIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkiLCAiZm9ybUlucHV0cyIsICJwYXltZW50RGF0YSIsICJpbnB1dHMiLCAiYmlsbGluZ0FkZHJlc3MiLCAic2hpcHBpbmdBZGRyZXNzIiwgInBheWVyRmlyc3ROYW1lIiwgImxhc3ROYW1lUGFydHMiLCAicGF5ZXJMYXN0TmFtZSIsICJsb2dfXyR1IiwgImVycl9fJHQiLCAicnVuQWlyd2FsbGV4QkFDU0Zsb3ciLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAiY2hlY2tvdXRQYXltZW50TWV0aG9kIiwgImZvcm1DYWxsYmFja3MiLCAiY3VzdG9tUGFyYW1zIiwgIm5vbkNkZUZvcm1GaWVsZHMiLCAiYW55Q2RlQ29ubmVjdGlvbiIsICJ2ZXJpZmljYXRpb25NZXRob2QiLCAibWljcm9EZXBvc2l0RGF0YSIsICJzdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAic3RhcnRGbG93TmV4dEFjdGlvbnMiLCAiY29uc2VudElkIiwgImF2YWlsYWJsZUJhbmtzIiwgInNlbGVjdGVkQmFuayIsICJkaXJlY3REZWJpdERhdGEiLCAicmVkaXJlY3RVcmwiLCAibmV3Q29uZmlybVJlc3VsdCIsICJsb2dfXyR0IiwgImVycl9fJHMiLCAicnVuQWlyd2FsbGV4RUZURmxvdyIsICJsb2dfXyRzIiwgImVycl9fJHIiLCAicnVuQWlyd2FsbGV4U0VQQUZsb3ciLCAibG9nX18kciIsICJlcnJfXyRxIiwgIkFpcndhbGxleDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzJDMiLCAiZXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXN1bHQiLCAiZnJpZW5kbHlFcnIiLCAiZGV2RXJyIiwgImNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyIsICJwYXJzZUludGVudElkRnJvbTNkc0hyZWYiLCAiaHJlZiIsICJpbnRlbnRJZCIsICJydW5BaXJ3YWxsZXgzZHNGbG93IiwgImhlYWRlcnMiLCAiaW5pdGlhbEludGVudElkIiwgIkFwcGxlUGF5Q3BtJDIiLCAiR29vZ2xlUGF5Q3BtJDIiLCAibG9hZEFwcGxlUGF5U2NyaXB0IiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkiLCAiYXBwbGVQYXlQYXltZW50IiwgInBtQmlsbGluZ0NvbnRhY3QiLCAiYmlsbGluZ0NvbnRhY3QiLCAic2hpcHBpbmdDb250YWN0IiwgImNyZWF0ZVJlY3VycmluZ1BheW1lbnRSZXF1ZXN0IiwgInRvdGFsIiwgImxpbmVJdGVtIiwgImNyZWF0ZUFwcGxlUGF5VG90YWwiLCAiZGVmYXVsdExhYmVsIiwgImFtb3VudCIsICJnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0IiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiQWR5ZW5Mb2NhbGUiLCAibG9nX18kcSIsICJlcnJfXyRwIiwgIkFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzJDIiLCAiZGVjb2RlQWR5ZW5BY3Rpb24iLCAiaXNBZHllbkF2YWlsYWJsZSIsICJnZXRBZHllbkNoZWNrb3V0IiwgImhhbmRsZUFkeWVuM2RzIiwgImxvY2FsZSIsICJjb3VudHJ5Q29kZSIsICJjb21wb25lbnQiLCAib25DYW5jZWwiLCAib25QYXltZW50RmFpbGVkIiwgIm9uQWRkaXRpb25hbERldGFpbHMiLCAiXyIsICJfXyIsICJhZHllbkNoZWNrb3V0IiwgImNoZWNrb3V0IiwgImRldGVybWluZUxvY2FsZSIsICJwcmVmaWxsTG9jYWxlIiwgImJyb3dzZXJMb2NhbGUiLCAiY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMiLCAicnVuQWR5ZW4zZHNGbG93IiwgIkFwcGxlUGF5Q3BtJDEiLCAiR29vZ2xlUGF5Q3BtJDEiLCAibG9nX18kcCIsICJoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDIiLCAicGF5bWVudFNlc3Npb25SZXNwb25zZSIsICJoYW5kbGVQYXltZW50QXV0aG9yaXplZCQyIiwgImdldEZyYXVkTWV0YWRhdGEiLCAibG9nX18kbyIsICJlcnJfXyRvIiwgImluaXRBZHllbkFwcGxlUGF5RmxvdyIsICJhZGRFcnJvckNhdGNoZXJGb3JJbml0IiwgInVuYXZhaWxhYmxlUmVzdWx0IiwgImFwcGxlUGF5Q3BtIiwgIm9uQXBwbGVQYXlTdGFydEZsb3ciLCAiT2pzRmxvd3MiLCAicnVuQWR5ZW5BcHBsZVBheUZsb3ciLCAic2Vzc2lvbiIsICJzZXNzaW9uQ29udGV4dCIsICJpbml0aWFsUHJldmlldzIiLCAidXBkYXRlIiwgImxvZ19fJG4iLCAiZXJyX18kbiIsICJpbml0QWR5ZW5Hb29nbGVQYXlGbG93IiwgImdvb2dsZVBheUNwbSIsICJwcm9jZXNzb3JBY2NvdW50IiwgImNsaWVudCIsICJpc1JlYWR5VG9QYXkiLCAib25Hb29nbGVQYXlTdGFydEZsb3ciLCAicnVuQWR5ZW5Hb29nbGVQYXlGbG93IiwgIm1lcmdlZElucHV0cyIsICJvdXJQbUlkIiwgImxvZ19fJG0iLCAiZXJyX18kbSIsICJydW5BaXJ3YWxsZXhBQ0hGbG93IiwgImxvZ19fJGwiLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxIiwgImhhbmRsZTNEUyIsICJoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxIiwgImxvZ19fJGsiLCAiZXJyX18kbCIsICJpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93IiwgInJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJsb2dfXyRqIiwgImVycl9fJGsiLCAiaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3ciLCAicnVuQWlyd2FsbGV4R29vZ2xlUGF5RmxvdyIsICJlbmNyeXB0ZWRQYXltZW50VG9rZW4iLCAibG9nX18kaSIsICJlcnJfXyRqIiwgIkFpcndhbGxleEtsYXJuYUNwbSIsICJpbml0QWlyd2FsbGV4S2xhcm5hRmxvdyIsICJrbGFybmFDcG0iLCAicnVuQWlyd2FsbGV4S2xhcm5hRmxvdyIsICJpc0Fub255bW91cyIsICJuZXdDdXN0b21lckZpZWxkcyIsICJBcHBsZVBheUNwbSIsICJHb29nbGVQYXlDcG0iLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCIsICJoYW5kbGVQYXltZW50QXV0aG9yaXplZCIsICJtb2JpbGVXYWxsZXRQYXltZW50RGF0YSIsICJsb2dfXyRoIiwgImVycl9fJGkiLCAiaW5pdEF1dGhuZXRBcHBsZVBheUZsb3ciLCAicnVuQXV0aG5ldEFwcGxlUGF5RmxvdyIsICJsb2dfXyRnIiwgImVycl9fJGgiLCAiaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93IiwgInJ1bkF1dGhuZXRHb29nbGVQYXlGbG93IiwgImxvZ19fJGYiLCAiZXJyX18kZyIsICJhdHRhY2hEZXZpY2VEYXRhQ29sbGVjdG9yIiwgInBvc3RVcmwiLCAiYWNjZXNzVG9rZW4iLCAiZm9ybSIsICJydW5EZXZpY2VEYXRhQ29sbGVjdGlvbiIsICJleHBlY3RlZE9yaWdpbiIsICJkZXRhY2giLCAiaGFuZGxlQ29sbGVjdGlvbkV2ZW50IiwgInJ1blBheWVyQXV0aCIsICJzdGVwVXBVcmwiLCAibWVyY2hhbnREYXRhIiwgInRva2VuSW5wdXQiLCAibWRJbnB1dCIsICJsb2dfXyRlIiwgImVycl9fJGYiLCAiQ3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkIiwgIm51bGxPclVuZGVmT3IkMSIsICJGUklFTkRMWV9FUlIiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMkMSIsICJ1c2VyQWN0aW9uIiwgImNoZWNrSWZSZXF1aXJlc0N5YmVyc291cmNlM2RzIiwgImhhbmRsZUN5YmVyc291cmNlM2RzIiwgImNsZWFudXBQb2xsaW5nIiwgInJ1bkN5YmVyc291cmNlM2RzRmxvdyIsICJzdGVwX3VwX3VybCIsICJhY2Nlc3NfdG9rZW4iLCAiZGRfdXJsIiwgImRkX3Rva2VuIiwgIm1lcmNoYW50X2RhdGEiLCAiY29sbGVjdGlvblJlc3VsdCIsICJsb2dfXyRkIiwgImVycl9fJGUiLCAiUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VWYXVsdElkRnJvbTNkc0hyZWYiLCAidmF1bHRJZCIsICJwYXJzZUFyZ0Zyb21IcmVmIiwgImFyZ05hbWUiLCAiY2hlY2tJZlJlcXVpcmVzUG9ja3l0M2RzIiwgInJ1blBvY2t5dDNkc0Zsb3ciLCAic3RyaXBlTG9nX18iLCAiU3RyaXBlM0RTTWV0YWRhdGFQYXlsb2FkIiwgInN0cmlwZUNDM0RTRmxvdyIsICJwYXJzZVVzZXJGRVBheWxvYWQiLCAiTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TIiwgImxvZ19fJGMiLCAiZXJyX18kZCIsICJ1bnNhZmVseVJ1blVuaWZpZWRDY0Zsb3ciLCAiY29tbW9uQ2hlY2tvdXRQYXJhbXMiLCAidG9rZW5pemVDYXJkUmVzdWx0cyIsICJzdGFydFBmUmVzdWx0IiwgInJldHVyblN1Y2Nlc3NSZXN1bHQiLCAicnVuQ29uZmlybUxvb3AiLCAiY2hlY2tvdXRBdHRlbXB0SWQiLCAicGZSZXN1bHQiLCAidmFsaWRhdGVQZlJlc3VsdFVzZXJBY3Rpb24iLCAidXNlckFjdGlvblJlc3VsdCIsICJydW5SZXF1aXJlZFVzZXJBY3Rpb24iLCAiY2hlY2tJZkxlZ2FjeTNEU1BhdGgiLCAiY29tbW9uQ0MzRFNGbG93IiwgInBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIlVzZXJBY3Rpb25GRVBheWxvYWQiLCAicHJlZmlsbE1vZGUiLCAicGF5bWVudE1ldGhvZElkIiwgImxvZ19fJGIiLCAiZXJyX18kYyIsICJydW5Db21tb25DY0Zsb3ciLCAidW5pZmllZENDUm9sbG91dFJhdGlvIiwgInJvbGwiLCAidXNlVW5pZmllZENDRmxvdyIsICJ1Y2NSb2xsVHJhY2tpbmdNZXRhZGF0YSIsICJlcnJIZWFkZXJzIiwgInJlcXVpcmVzUG9ja3l0M2RzIiwgInBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAiYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCIsICJhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAiY3liZXJzb3VyY2VBY3Rpb24iLCAiY3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkIiwgImN5YmVyc291cmNlTWV0YWRhdGFGb3JDaGVja291dCIsICJzaG91bGRVc2VTdHJpcGVGbG93IiwgInBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNjUG1JZCIsICJzdHJpcGVBY3Rpb24iLCAiY29tbW9uM0RTQWN0aW9uVHlwZXMiLCAicmVxdWlyZWRfdXNlcl9hY3Rpb25zIiwgIkNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJMb29wQ3J5cHRvQ3BtIiwgImxvZ19fJGEiLCAiZXJyX18kYiIsICJpbml0TG9vcEZsb3ciLCAicHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YSIsICJwYXltZW50U2V0dXBJbmZvIiwgInN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQiLCAibWluQXV0aG9yaXphdGlvblVzZEFtb3VudCIsICJhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoIiwgImNoYXJnZUFtb3VudFVzZEF0b20iLCAicGF5bWVudFVzZEFtb3VudCIsICJjdXN0b21lclJlZklkIiwgIndpZGdldFByb3BzIiwgImluaXRMb29wQ29ubmVjdFByb3BzIiwgInJ1bkxvb3BGbG93IiwgImlzQ2hlY2tvdXRNb2RlIiwgImN1c3RvbWVyRmllbGRzIiwgImxvZ19fJDkiLCAiZXJyX18kYSIsICJQYXlwYWxDcG0iLCAiaW5pdFBheXBhbEZsb3ciLCAicGF5cGFsQ3BtIiwgInJ1blBheXBhbEZsb3ciLCAidXNlUmVkaXJlY3RGbG93IiwgImZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3ciLCAiaXNQYXlGaXJzdEZsb3ciLCAic3RhcnRQYXltZW50Rmxvd1JlcXVlc3QiLCAicHJlQWN0aW9uVXJsIiwgImVuY29kZWRSZXF1ZXN0IiwgInNlYXJjaFBhcmFtcyIsICJwYXlwYWxGbG93UmVzdWx0IiwgImFwcHJvdmFsU2Vzc2lvbklkIiwgImxvZ19fJDgiLCAiZXJyX18kOSIsICJQb2NreXRQYXlwYWxDcG0iLCAiaW5pdFBvY2t5dFBheXBhbEZsb3ciLCAicG9ja3l0UGF5cGFsQ3BtIiwgInJ1blBvY2t5dFBheXBhbEZsb3ciLCAic2V0dGluZ3MiLCAibG9nX18kNyIsICJlcnJfXyQ4IiwgIlN0cmlwZUFmZmlybUNwbSIsICJTdHJpcGVBZmZpcm1SZXF1aXJlZFVzZXJBY3Rpb25zIiwgImluaXRTdHJpcGVBZmZpcm1GbG93IiwgInN0cmlwZUFmZmlybUNwbSIsICJydW5TdHJpcGVBZmZpcm1GbG93IiwgImNhcnRJbmZvIiwgImNsaWVudF9zZWNyZXQiLCAiY3VzdG9tZXJOYW1lIiwgImFmZmlybVBheW1lbnREYXRhIiwgImFmZmlybU9wdGlvbnMiLCAicGF5bWVudEludGVudCIsICJ0aGVpclBheW1lbnRNZXRob2QiLCAibG9nX18kNiIsICJlcnJfXyQ3IiwgIlN0cmlwZUFmdGVycGF5Q3BtIiwgIlN0cmlwZUFmdGVycGF5UmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlQWZ0ZXJwYXlGbG93IiwgInN0cmlwZUFmdGVycGF5Q3BtIiwgInJ1blN0cmlwZUFmdGVycGF5RmxvdyIsICJhZnRlcnBheVBheW1lbnREYXRhIiwgImFmdGVycGF5T3B0aW9ucyIsICJjb25maXJtYXRpb25SZXN1bHQiLCAibG9nX18kNSIsICJlcnJfXyQ2IiwgIlN0cmlwZUtsYXJuYUNwbSIsICJTdHJpcGVLbGFybmFSZXF1aXJlZFVzZXJBY3Rpb25zIiwgImluaXRTdHJpcGVLbGFybmFGbG93IiwgInN0cmlwZUtsYXJuYUNwbSIsICJydW5TdHJpcGVLbGFybmFGbG93IiwgImtsYXJuYVBheW1lbnREYXRhIiwgImtsYXJuYU9wdGlvbnMiLCAiT0pTX1NUUklQRV9MSU5LX0JUTl9JRCIsICJsb2dfXyQ0IiwgImVycl9fJDUiLCAiU3RyaXBlTGlua0NwbSIsICJTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlTGlua0Zsb3ciLCAiaW5pdFBhcmFtcyIsICJzdHJpcGVMaW5rQ3BtIiwgImxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQiLCAiZXhwcmVzc0NoZWNrb3V0RWxlbWVudCIsICJyZW5kZXJMaW5rQXV0aGVudGljYXRpb25FbGVtZW50IiwgInNlbGVjdG9yIiwgInNpbGVudCIsICJwYXJlbnRDb250YWluZXIiLCAiY29udGFpbmVyIiwgImlzQXV0aGVudGljYXRlZCIsICJpc0xpbmtBdXRoUmVhZHkiLCAiaXNQb3NzaWJsZUF1dGhlbnRpY2F0ZWQiLCAibW91bnRCdXR0b24iLCAiZGlzbW91bnRCdXR0b24iLCAiZ2V0RWxlbWVudEJ5SWRBc3luYyIsICJydW5TdHJpcGVMaW5rRmxvdyIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBNIiwgIm91ckV4aXN0aW5nUG1JZCIsICJwYXllckxhc3ROYW1lUGFydHMiLCAiZ2V0RWxlbWVudCIsICJlbGVtZW50IiwgImxvZ19fJDMiLCAiZXJyX18kNCIsICJTdHJpcGVQckNwbSIsICJpbml0U3RyaXBlUHJGbG93IiwgInByIiwgImNhbk1ha2VQYXltZW50IiwgInJ1blN0cmlwZVByRmxvdzIiLCAiZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCIsICJydW5TdHJpcGVQckZsb3ckMSIsICJpbml0UmVzdWx0IiwgIm92ZXJyaWRlIiwgImFwcGxlUGF5UGF5bWVudFJlcXVlc3QiLCAidXBkYXRlUHJXaXRoQW1vdW50IiwgInN0cmlwZVBtQWRkZWRFdmVudCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtIiwgInBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG1FdnQiLCAiaXNQZW5kaW5nIiwgInN0cmlwZUFwcGxlUGF5IiwgImxhYmVsIiwgImNwbXMiLCAid2l0aFByb3ZpZGVyIiwgIndpdGhQcm9jZXNzb3IiLCAibWF0Y2hlcyIsICJtYXRjaGVzUHJvY2Vzc29yIiwgIm1hdGNoZXNQcm92aWRlciIsICJsb2dfXyQyIiwgImVycl9fJDMiLCAiY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIiLCAiZmxvd05hbWUiLCAiaW5pdEZsb3ciLCAicHVibGlzaGVyIiwgInN0YXJ0QWxsSW5pdEZsb3dzIiwgImZsb3dzIiwgImZsb3ciLCAiY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycyIsICJlcnJfXyQyIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiRm9ybUNhbGxiYWNrcyIsICJkZXRlY3RGcmFtZXdvcmsiLCAid2luZG93IiwgIm5leHRXaW5kb3ciLCAibm9kZSIsICJ2dWVXaW5kb3ciLCAiZ2V0RnJhbWV3b3JrVmVyc2lvbiIsICJmcmFtZXdvcmsiLCAibmdWZXJzaW9uRWwiLCAiZ2V0RnJhbWV3b3JrSW5mbyIsICJzY3JlZW5faGVpZ2h0IiwgInNjcmVlbl93aWR0aCIsICJjb2xvcl9kZXB0aCIsICJqYXZhX2VuYWJsZWQiLCAidXNlcl9hZ2VudCIsICJhY2NlcHRfaGVhZGVyIiwgInRpbWVfem9uZV9vZmZzZXQiLCAiU3VibWl0TWV0aG9kcyIsICJTdWJtaXRNZXRob2RzMiIsICJQYXltZW50UHJvdmlkZXJUeXBlIiwgIlBheW1lbnRQcm92aWRlclR5cGUyIiwgImdldEFwcGxlUGF5UHJvY2Vzc29ycyIsICJpbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0UmVzdWx0cyIsICJmbG93VmFsdWUiLCAic3RyaXBlUFJGbG93UmVzdWx0IiwgInN0YXJ0QXBwbGVQYXlGbG93IiwgImdldEdvb2dsZVBheVByb2Nlc3NvcnMiLCAiZ29vZ2xlUGF5SW5pdEZsb3dzIiwgImdvb2dsZVBheUluaXRSZXN1bHRzIiwgInN0YXJ0R29vZ2xlUGF5RmxvdyIsICJpbml0UmVzdWx0cyIsICJhdmFpbGFibGVGbG93IiwgImdldEtsYXJuYVByb2Nlc3NvcnMiLCAia2xhcm5hSW5pdFJlc3VsdHMiLCAiYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdCIsICJzdHJpcGVLbGFybmFGbG93UmVzdWx0IiwgInN0YXJ0S2xhcm5hRmxvdyIsICJnZXRBZmZpcm1Qcm9jZXNzb3JzIiwgImFmZmlybUluaXRSZXN1bHRzIiwgInN0cmlwZUFmZmlybUZsb3dSZXN1bHQiLCAic3RhcnRBZmZpcm1GbG93IiwgImdldEFmdGVycGF5UHJvY2Vzc29ycyIsICJhZnRlcnBheUluaXRSZXN1bHRzIiwgInN0cmlwZUFmdGVycGF5Rmxvd1Jlc3VsdCIsICJzdGFydEFmdGVycGF5RmxvdyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJsb2dfXyQxIiwgImVycl9fJDEiLCAiaW5pdFRyYWNlclNhZmUiLCAiaW5pdFRyYWNlclVuc2FmZSIsICJnbG9iYWxUcmFjZXIiLCAic2RrVHJhY2VXZWIiLCAiQ29uc29sZVNwYW5FeHBvcnRlciIsICJTaW1wbGVTcGFuUHJvY2Vzc29yIiwgIldlYlRyYWNlclByb3ZpZGVyIiwgImluc3RydW1lbnRhdGlvbkZldGNoIiwgIkZldGNoSW5zdHJ1bWVudGF0aW9uIiwgImNvbnRleHRab25lIiwgIlpvbmVDb250ZXh0TWFuYWdlciIsICJpbnN0cnVtZW50YXRpb24iLCAicmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zIiwgInJlc291cmNlcyIsICJSZXNvdXJjZSIsICJkZXRlY3RSZXNvdXJjZXMiLCAiZGV0ZWN0UmVzb3VyY2VzU3luYyIsICJleHBvcnRlclRyYWNlT3RscCIsICJPVExQVHJhY2VFeHBvcnRlciIsICJwcm9wYWdhdG9yQjMiLCAiQjNQcm9wYWdhdG9yIiwgIkIzSW5qZWN0RW5jb2RpbmciLCAic2RrVHJhY2VCYXNlIiwgIkJhdGNoU3BhblByb2Nlc3NvciIsICJjb2xsZWN0b3JVcmwiLCAiZ2V0Q29sbGVjdG9yVXJsIiwgImV4cG9ydGVyIiwgImJhc2VBdHRycyIsICJmcm9tQmFzZVVybCIsICJiYXNlSG9zdG5hbWUiLCAiT3BlblBheUZvcm1FdmVudEhhbmRsZXIiLCAiZm9ybUlkIiwgImludGVybmFsQ2FsbGJhY2tzIiwgImdldENsZWFuT3JpZ2luIiwgImVsZW1lbnRJZCIsICJldmVudFR5cGUiLCAiY3JlYXRlQ29ubmVjdGlvbiIsICJpc1ZhbGlkT2JqZWN0IiwgIkNvbm5lY3Rpb25NYW5hZ2VyIiwgInNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyIsICJpbml0UHJGbG93cyIsICJjYWxsYmFja3MiLCAic3RyaXBlUFIiLCAiY2FuQXBwbGVQYXkiLCAiY2FuR29vZ2xlUGF5IiwgImZpbmFsU3RhdHVzIiwgInVzZXJQYXJhbXMiLCAicnVuU3RyaXBlUHJGbG93IiwgIkdFTkVSSUNfQ09OTl9FUlIiLCAibG9nX18iLCAiX09wZW5QYXlGb3JtIiwgImNkZUJyaWRnZUlmcmFtZSIsICJFbGVtZW50VHlwZUVudW0iLCAiY2RlTG9hZGVkIiwgImNkZUNvbm5TcGFuIiwgImFueUNkZUNvbm4iLCAib2pzQ29udGV4dCIsICJlbGVtZW50VHlwZSIsICJfRWxlbWVudFR5cGVFbnVtWm9kIiwgImZyYW1lIiwgInF1ZXJ5U3RyaW5nIiwgImNvbm4iLCAiY29udGV4dDIiLCAiYXBwbGVQYXlQcm9jZXNzb3JzIiwgImlzQXBwbGVQYXlBdmFpbGFibGUiLCAiZ29vZ2xlUGF5UHJvY2Vzc29ycyIsICJpc0dvb2dsZVBheUF2YWlsYWJsZSIsICJwYXlwYWxBdmFpbGFibGUiLCAia2xhcm5hUHJvY2Vzc29ycyIsICJpc0tsYXJuYUF2YWlsYWJsZSIsICJhZmZpcm1Qcm9jZXNzb3JzIiwgImlzQWZmaXJtQXZhaWxhYmxlIiwgImFmdGVycGF5UHJvY2Vzc29ycyIsICJpc0FmdGVycGF5QXZhaWxhYmxlIiwgInBvY2t5dFBheXBhbEF2YWlsYWJsZSIsICJtZXRob2QiLCAibG9vcENyeXB0b0F2YWlsYWJsZSIsICJzdHJpcGVMaW5rRmxvd1Jlc3VsdCIsICJzdHJpcGVMaW5rQXZhaWxhYmxlIiwgIm1ldGhvZHMiLCAiaW5pdEZsb3dOYW1lTWFwIiwgImZsb3dSZXN1bHQiLCAic3RhcnRGbG93IiwgImFpcndhbGxleEdvb2dsZVBheSIsICJhaXJ3YWxsZXhBcHBsZVBheSIsICJhdXRob3JpemVOZXRHb29nbGVQYXkiLCAiYXV0aG9yaXplTmV0QXBwbGVQYXkiLCAiYWR5ZW5Hb29nbGVQYXkiLCAiYWR5ZW5BcHBsZVBheSIsICJuZXdDYWxsYmFja3MiLCAibWV0cmljc0NvbnRleHQiLCAiY2FsbGVyIiwgImN1cnJlbnRJbnN0YW5jZSIsICJkZWJ1Z0luZm8iLCAiY2RlTG9hZGVkUGF5bG9hZCIsICJPcGVuUGF5Rm9ybSJdCn0K
7642
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA5fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiSVNfQlVTSU5FU1NfUFVSQ0hBU0VcIl0gPSBcImlzQnVzaW5lc3NQdXJjaGFzZVwiO1xuICBGaWVsZE5hbWUyW1wiQlVTSU5FU1NfTkFNRVwiXSA9IFwiYnVzaW5lc3NOYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJUQVhfSURcIl0gPSBcInRheElkXCI7XG4gIEZpZWxkTmFtZTJbXCJUQVhfSURfVFlQRVwiXSA9IFwidGF4SWRUeXBlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHoubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6LnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNERV9CUklER0VcIl0gPSBcImNkZS1icmlkZ2VcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xuY29uc3QgX0VsZW1lbnRUeXBlRW51bVpvZCA9IHouZW51bShbXCJjYXJkXCIsIFwiY2FyZC1udW1iZXJcIiwgXCJjYXJkLWV4cGlyeVwiLCBcImNhcmQtY3ZjXCIsIFwiY2RlLWJyaWRnZVwiXSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBCYXNlRWxlbWVudHNTdHlsZSA9IHoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlclN0eWxlOiB6Lm9iamVjdCh7XG4gICAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZ1xuICB9KS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6Lm9iamVjdCh7XG4gICAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gICAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgICBjdmM6IE9wdGlvbmFsU3RyaW5nXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqXG4gICAqIFRoZSBjYXJkIGljb24gYXQgdGhlIHN0YXJ0IG9mIHRoZSBjYXJkIG51bWJlciBpbnB1dCBmaWVsZFxuICAgKiBJdCB3b24ndCBhZmZlY3QgYWZ0ZXIgdGhlIGljb24gY2hhbmdlZCB0byBjYXJkIGJyYW5kIGFmdGVyIHRoZSB1c2VyIGlucHV0IHRoZSBjYXJkIG51bWJlclxuICAgKi9cbiAgaWNvbjogei5vYmplY3Qoe1xuICAgIGNvbG9yOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5CYXNlRWxlbWVudHNTdHlsZS5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwaG9uZVwiIC8qIFBIT05FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIgLyogU0hJUFBJTkdfTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTNcIiAvKiBTSElQUElOR19MSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJidXNpbmVzc05hbWVcIiAvKiBCVVNJTkVTU19OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkXCIgLyogVEFYX0lEICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkVHlwZVwiIC8qIFRBWF9JRF9UWVBFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJwaG9uZVwiIC8qIFBIT05FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIgLyogU0hJUFBJTkdfTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTNcIiAvKiBTSElQUElOR19MSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJidXNpbmVzc05hbWVcIiAvKiBCVVNJTkVTU19OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkXCIgLyogVEFYX0lEICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkVHlwZVwiIC8qIFRBWF9JRF9UWVBFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZyxcbiAgcGF5bWVudFJvdXRlSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHouYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6LnN0cmluZygpLFxuICBwYXltZW50TWV0aG9kSWQ6IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG5jb25zdCBFbGVtZW50RXZlbnQgPSB6Lm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogei5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6LnN0cmluZygpLFxuICBwYXltZW50X21ldGhvZF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KHouc3RyaW5nKCkpKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHouc3RyaW5nKCksXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogei5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6LmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRSZXNwb25zZSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHoub2JqZWN0KHsgc3VjY2Vzczogei5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xudmFyIFRocmVlRFNTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gKChUaHJlZURTU3RhdHVzMikgPT4ge1xuICBUaHJlZURTU3RhdHVzMltcIlNVQ0NFU1NcIl0gPSBcInN1Y2Nlc3NcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJGQUlMVVJFXCJdID0gXCJmYWlsdXJlXCI7XG4gIFRocmVlRFNTdGF0dXMyW1wiQ0FOQ0VMTEVEXCJdID0gXCJjYW5jZWxsZWRcIjtcbiAgcmV0dXJuIFRocmVlRFNTdGF0dXMyO1xufSkoVGhyZWVEU1N0YXR1cyB8fCB7fSk7XG5jb25zdCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pLFxuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56Lm9iamVjdCh7XG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbmNvbnN0IENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBBV1hCYW5rID0gei5vYmplY3Qoe1xuICBiYW5rX25hbWU6IHouc3RyaW5nKCksXG4gIGRpc3BsYXlfbmFtZTogei5zdHJpbmcoKSxcbiAgcmVzb3VyY2VzOiB6Lm9iamVjdCh7XG4gICAgbG9nb191cmw6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgYXZhaWxhYmxlX2JhbmtzOiBudWxsT3JVbmRlZk9yJDEoei5hcnJheShBV1hCYW5rKSlcbn0pO1xuY29uc3QgQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKHRydWUpLCBocmVmOiB6LnN0cmluZygpIH0pLFxuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbChmYWxzZSkgfSlcbl0pO1xuY29uc3QgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogei5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSlcbn0pO1xuY29uc3QgRUZURm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGluc3RpdHV0aW9uTnVtYmVyOiB6LnN0cmluZygpLFxuICB0cmFuc2l0TnVtYmVyOiB6LnN0cmluZygpLFxuICBhY2NvdW50TnVtYmVyOiB6LnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogei5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBFRlRGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEJBQ1NGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgc29ydENvZGU6IHouc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6LmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xuei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEJBQ1NGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFNFUEFGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaWJhbjogei5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHouZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogU0VQQUZvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQUNITWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGFjY291bnRfbnVtYmVyOiB6LnN0cmluZygpLFxuICBhYmFfcm91dGluZ19udW1iZXI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRUZUTWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGluc3RpdHV0aW9uX251bWJlcjogei5zdHJpbmcoKSxcbiAgdHJhbnNpdF9udW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRfbnVtYmVyOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IEJBQ1NNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKCksXG4gIHNvcnRfY29kZTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBTRVBBTWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGliYW46IHouc3RyaW5nKClcbn0pO1xuY29uc3QgTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogei51bmlvbihbXG4gICAgQUNITWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgRUZUTWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgQkFDU01pY3JvRGVwb3NpdEZvcm1EYXRhLFxuICAgIFNFUEFNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICB6Lm9iamVjdCh7IGVycm9yOiB6LnN0cmluZygpIH0pXG4gIF0pLm9wdGlvbmFsKClcbn0pO1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6Lm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBDREVSZXNwb25zZUVycm9yID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZHVyYXRpb246IHouc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50czogei5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3JlYXRlZDogei5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHouYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3Ioei5hcnJheSh6LnN0cmluZygpKSksXG4gIHBheW1lbnRfbWV0aG9kX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6LmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X3NldHRpbmdzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKSxcbiAgcmV0dXJuX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgc3VjY2Vzc191cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5nczogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudEZvcm1QcmVmaWxsID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHoubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6Lm51bGxhYmxlKHoudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogei5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xuei51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56Lm9iamVjdCh7XG4gIGxvZ286IHouc3RyaW5nKCksXG4gIGljb246IHouc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHouc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQ29tcGxldGVBZGRyZXNzID0gei5vYmplY3Qoe1xuICBsaW5lMTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjaXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXRlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvdW50cnk6IHouc3RyaW5nKCksXG4gIHppcF9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHouYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHouYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbnouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG5jb25zdCBOZXdDdXN0b21lckZpZWxkcyA9IHoub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYnVzaW5lc3NfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl90YXhfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfdGF4X2lkX3R5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfcGhvbmU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3Ioei5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjY19wbV9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPcihDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5yZWNvcmQoei5hbnkoKSk7XG56Lm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBidXNpbmVzc19uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0YXhfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRheF9pZF90eXBlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgbWVzc2FnZTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZXZlbnRzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56LmFueSgpLm9wdGlvbmFsKCk7XG56Lm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSA9IHoub2JqZWN0KHt9KTtcbmNvbnN0IFVzZXJBY3Rpb25GRVBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6LnN0cmluZygpXG59KS5jYXRjaGFsbCh6LmFueSgpKTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSA9IHouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3Qgc3VtID0gKGFycikgPT4ge1xuICByZXR1cm4gYXJyLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xufTtcblxuY29uc3QgYmVmb3JlVW5sb2FkSGFuZGxlciA9IChldmVudCkgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBldmVudC5yZXR1cm5WYWx1ZSA9IHRydWU7XG59O1xuY29uc3QgcHJldmVudE5hdmlnYXRpb24gPSAoKSA9PiB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGJlZm9yZVVubG9hZEhhbmRsZXIpO1xufTtcbmNvbnN0IHN0b3BQcmV2ZW50TmF2aWdhdGlvbiA9ICgpID0+IHtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgYmVmb3JlVW5sb2FkSGFuZGxlcik7XG59O1xuXG5jb25zdCBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyA9IChzaW1wbGVPanNGbG93KSA9PiB7XG4gIGxldCBpc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICBpZiAoaXNTdWJtaXR0aW5nKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJTa2lwcGluZyBzdWJtaXNzaW9uIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzc1wiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXNTdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgaWYgKHBhcmFtcy5jb250ZXh0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbikge1xuICAgICAgICBwcmV2ZW50TmF2aWdhdGlvbigpO1xuICAgICAgfVxuICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdGFydGVkPy4oKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfc3RhcnRlZFwiLCB7XG4gICAgICAgIGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmbG93UmVzdWx0ID0gYXdhaXQgc2ltcGxlT2pzRmxvdyhwYXJhbXMpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9zdWNjZXNzXCIsIHtcbiAgICAgICAgY3BtOiBwYXJhbXMuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5mbG93UmVzdWx0XG4gICAgICB9KTtcbiAgICAgIGZvcmNlUHJvY2Vzc01ldHJpY3NRdWV1ZSgpO1xuICAgICAgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MoZmxvd1Jlc3VsdC5yZXN1bHQucGF5bWVudF9tZXRob2RfaWQpO1xuICAgICAgfSBlbHNlIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwiY2hlY2tvdXRcIikge1xuICAgICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN1Y2Nlc3MoXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuaW52b2ljZV91cmxzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuY3VzdG9tZXJfaWQsXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQucHJvY2Vzc29yc191c2VkID8/IFtdLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkID8/IFwiXCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7Zmxvd1Jlc3VsdH1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JDb2RlID0gYXdhaXQgc2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlKHBhcmFtcy5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIGVycm9yTWVzc2FnZSk7XG4gICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBjcG06IHBhcmFtcy5jaGVja291dFBheW1lbnRNZXRob2QsIGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlLCBlcnJvciB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICBpZiAocGFyYW1zLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uKSB7XG4gICAgICAgIHN0b3BQcmV2ZW50TmF2aWdhdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5jb25zdCBhZGRFcnJvckNhdGNoZXJGb3JJbml0ID0gKGluaXQpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGluaXQocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWVycm9yLWNhdGNoZXJcIik7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JDb2RlID0gYXdhaXQgc2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlKHBhcmFtcy5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIGVycm9yTWVzc2FnZSk7XG4gICAgICBlcnJfXyhlcnJvckNvZGUsIGVycm9yTWVzc2FnZSwgZXJyb3IpO1xuICAgICAgdHJhY2soXCJpbml0X2Zsb3dfZXJyb3JcIiwgeyBlcnJvck1lc3NhZ2UsIGVycm9yQ29kZSwgZXJyb3IgfSk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUsIGlzTG9hZGluZzogZmFsc2UgfTtcbiAgICB9XG4gIH07XG59O1xuY29uc3QgY3JlYXRlT2pzRmxvd0xvZ2dlcnMgPSAocHJlZml4KSA9PiB7XG4gIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5sb2coYCR7Y2hhbGsuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS53YXJuKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5mdW5jdGlvbiBfX3JlYWQkNChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG5mdW5jdGlvbiBfX3NwcmVhZEFycmF5JDQodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5mdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHtcbiAgICB2YXIgX3N1cGVyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIH07XG4gICAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYztcbiAgICByZXR1cm4gY3RvckZ1bmM7XG59XG5cbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICAgICAgPyBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGFyclJlbW92ZShhcnIsIGl0ZW0pIHtcbiAgICBpZiAoYXJyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAwIDw9IGluZGV4ICYmIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmlwdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKGluaXRpYWxUZWFyZG93bikge1xuICAgICAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IGluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuICAgICAgICB2YXIgZXJyb3JzO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgICAgIGlmIChfcGFyZW50YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IF9wYXJlbnRhZ2VfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2VfMV8xICYmICFfcGFyZW50YWdlXzFfMS5kb25lICYmIChfYSA9IF9wYXJlbnRhZ2VfMS5yZXR1cm4pKSBfYS5jYWxsKF9wYXJlbnRhZ2VfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbml0aWFsRmluYWxpemVyID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBfX3NwcmVhZEFycmF5JDQoX19zcHJlYWRBcnJheSQ0KFtdLCBfX3JlYWQkNChlcnJvcnMpKSwgX19yZWFkJDQoZXJyLmVycm9ycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmluYWxpemVyc18xXzEgJiYgIV9maW5hbGl6ZXJzXzFfMS5kb25lICYmIChfYiA9IF9maW5hbGl6ZXJzXzEucmV0dXJuKSkgX2IuY2FsbChfZmluYWxpemVyc18xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1YnNjcmlwdGlvbkVycm9yKGVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24uY2xvc2VkIHx8IHRlYXJkb3duLl9oYXNQYXJlbnQodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bi5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChfYSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5wdXNoKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSAmJiBfcGFyZW50YWdlLmluY2x1ZGVzKHBhcmVudCkpO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSA/IChfcGFyZW50YWdlLnB1c2gocGFyZW50KSwgX3BhcmVudGFnZSkgOiBfcGFyZW50YWdlID8gW19wYXJlbnRhZ2UsIHBhcmVudF0gOiBwYXJlbnQ7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICBpZiAoX3BhcmVudGFnZSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgIGFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICBfZmluYWxpemVycyAmJiBhcnJSZW1vdmUoX2ZpbmFsaXplcnMsIHRlYXJkb3duKTtcbiAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0ZWFyZG93bi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24uRU1QVFkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW1wdHkgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIGVtcHR5LmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBlbXB0eTtcbiAgICB9KSgpO1xuICAgIHJldHVybiBTdWJzY3JpcHRpb247XG59KCkpO1xudmFyIEVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbiB8fFxuICAgICAgICAodmFsdWUgJiYgJ2Nsb3NlZCcgaW4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUuYWRkKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnVuc3Vic2NyaWJlKSkpO1xufVxuZnVuY3Rpb24gZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihmaW5hbGl6ZXIpKSB7XG4gICAgICAgIGZpbmFsaXplcigpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmluYWxpemVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuXG52YXIgY29uZmlnID0ge1xuICAgIFByb21pc2U6IHVuZGVmaW5lZH07XG5cbnZhciB0aW1lb3V0UHJvdmlkZXIgPSB7XG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5JDQoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQkNChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbmZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikge1xuICAgIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7IH1cblxuZnVuY3Rpb24gZXJyb3JDb250ZXh0KGNiKSB7XG4gICAge1xuICAgICAgICBjYigpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChpc1N1YnNjcmlwdGlvbihkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoX3RoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBFTVBUWV9PQlNFUlZFUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YnNjcmliZXIuY3JlYXRlID0gZnVuY3Rpb24gKG5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVTdWJzY3JpYmVyKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaWJlcjtcbn0oU3Vic2NyaXB0aW9uKSk7XG52YXIgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgfVxuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXI7XG59KCkpO1xudmFyIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7XG4gICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgbmV4dDogKG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGUgIT09IG51bGwgJiYgY29tcGxldGUgIT09IHZvaWQgMCA/IGNvbXBsZXRlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcik7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFNhZmVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcikge1xuICAgIHtcbiAgICAgICAgcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyKSB7XG4gICAgdGhyb3cgZXJyO1xufVxudmFyIEVNUFRZX09CU0VSVkVSID0ge1xuICAgIGNsb3NlZDogdHJ1ZSxcbiAgICBuZXh0OiBub29wLFxuICAgIGVycm9yOiBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIGNvbXBsZXRlOiBub29wLFxufTtcblxudmFyIG9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUpIHx8ICdAQG9ic2VydmFibGUnOyB9KSgpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIHBpcGVGcm9tQXJyYXkoZm5zKSB7XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgIH1cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGZuKSB7IHJldHVybiBmbihwcmV2KTsgfSwgaW5wdXQpO1xuICAgIH07XG59XG5cbnZhciBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZSkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgb2JzZXJ2YWJsZS5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMsIG9wZXJhdG9yID0gX2Eub3BlcmF0b3IsIHNvdXJjZSA9IF9hLnNvdXJjZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yXG4gICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci5jYWxsKHN1YnNjcmliZXIsIHNvdXJjZSlcbiAgICAgICAgICAgICAgICA6IHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHNpbmspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUoc2luayk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2luay5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKG5leHQsIHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGVbb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uIChwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24gKHgpIHsgcmV0dXJuICh2YWx1ZSA9IHgpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiByZWplY3QoZXJyKTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZSh2YWx1ZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHN1YnNjcmliZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlO1xufSgpKTtcbmZ1bmN0aW9uIGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzT2JzZXJ2ZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGlzU3Vic2NyaWJlcih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpYmVyKSB8fCAoaXNPYnNlcnZlcih2YWx1ZSkgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gaGFzTGlmdChzb3VyY2UpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2UubGlmdCk7XG59XG5mdW5jdGlvbiBvcGVyYXRlKGluaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQoZnVuY3Rpb24gKGxpZnRlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0KGxpZnRlZFNvdXJjZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlJyk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKTtcbn1cbnZhciBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vbkZpbmFsaXplID0gb25GaW5hbGl6ZTtcbiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTtcbiAgICAgICAgX3RoaXMuX25leHQgPSBvbk5leHRcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25OZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDtcbiAgICAgICAgX3RoaXMuX2Vycm9yID0gb25FcnJvclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjtcbiAgICAgICAgX3RoaXMuX2NvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPcGVyYXRvclN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgICAgICAgIHZhciBjbG9zZWRfMSA9IHRoaXMuY2xvc2VkO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgIWNsb3NlZF8xICYmICgoX2EgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuXG52YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdPYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdvYmplY3QgdW5zdWJzY3JpYmVkJztcbiAgICB9O1xufSk7XG5cbnZhciBTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YmplY3QucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQW5vbnltb3VzU3ViamVjdCh0aGlzLCB0aGlzKTtcbiAgICAgICAgc3ViamVjdC5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIGlmICghX3RoaXMuY3VycmVudE9ic2VydmVycykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShfdGhpcy5vYnNlcnZlcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKF90aGlzLmN1cnJlbnRPYnNlcnZlcnMpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfYy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmhhc0Vycm9yID0gX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YmplY3QucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA+IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5uZXJTdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQsIG9ic2VydmVycyA9IF9hLm9ic2VydmVycztcbiAgICAgICAgaWYgKGhhc0Vycm9yIHx8IGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBvYnNlcnZlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgICAgICBhcnJSZW1vdmUob2JzZXJ2ZXJzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBTdWJqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJqZWN0O1xufShPYnNlcnZhYmxlKSk7XG52YXIgQW5vbnltb3VzU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFub255bW91c1N1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgdmFsdWUpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGVycik7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgfTtcbiAgICByZXR1cm4gQW5vbnltb3VzU3ViamVjdDtcbn0oU3ViamVjdCkpO1xuXG52YXIgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICAgIG5vdzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKERhdGUpLm5vdygpO1xuICAgIH19O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5JDQoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQkNChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gRW1wdHlFcnJvckltcGwoKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0VtcHR5RXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnbm8gZWxlbWVudHMgaW4gc2VxdWVuY2UnO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gbGFzdFZhbHVlRnJvbShzb3VyY2UsIGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBfaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIF92YWx1ZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBfaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChfaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFbXB0eUVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlKTtcbn1cblxudmFyIFRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBUaW1lb3V0RXJyb3JJbXBsKGluZm8pIHtcbiAgICAgICAgaWYgKGluZm8gPT09IHZvaWQgMCkgeyBpbmZvID0gbnVsbDsgfVxuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdUaW1lb3V0IGhhcyBvY2N1cnJlZCc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIHRpbWVvdXQoY29uZmlnLCBzY2hlZHVsZXJBcmcpIHtcbiAgICB2YXIgX2EgPSAoaXNWYWxpZERhdGUoY29uZmlnKSA/IHsgZmlyc3Q6IGNvbmZpZyB9IDogdHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicgPyB7IGVhY2g6IGNvbmZpZyB9IDogY29uZmlnKSwgZmlyc3QgPSBfYS5maXJzdCwgZWFjaCA9IF9hLmVhY2gsIF9iID0gX2Eud2l0aCwgX3dpdGggPSBfYiA9PT0gdm9pZCAwID8gdGltZW91dEVycm9yRmFjdG9yeSA6IF9iLCBfYyA9IF9hLnNjaGVkdWxlciwgc2NoZWR1bGVyID0gX2MgPT09IHZvaWQgMCA/IGFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2EubWV0YSwgbWV0YSA9IF9kID09PSB2b2lkIDAgPyBudWxsIDogX2Q7XG4gICAgaWYgKGZpcnN0ID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIHRpbWVvdXQgcHJvdmlkZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgdGltZXJTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB2YXIgc2VlbiA9IDA7XG4gICAgICAgIHZhciBzdGFydFRpbWVyID0gZnVuY3Rpb24gKGRlbGF5KSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9IGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICBpbm5lckZyb20oX3dpdGgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YTogbWV0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogbGFzdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbjogc2VlbixcbiAgICAgICAgICAgICAgICAgICAgfSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICB9O1xuICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiA9IHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBzZWVuKys7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKGxhc3RWYWx1ZSA9IHZhbHVlKSk7XG4gICAgICAgICAgICBlYWNoID4gMCAmJiBzdGFydFRpbWVyKGVhY2gpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCEodGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLmNsb3NlZCkpIHtcbiAgICAgICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICAgICAgIXNlZW4gJiYgc3RhcnRUaW1lcihmaXJzdCAhPSBudWxsID8gKHR5cGVvZiBmaXJzdCA9PT0gJ251bWJlcicgPyBmaXJzdCA6ICtmaXJzdCAtIHNjaGVkdWxlci5ub3coKSkgOiBlYWNoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRpbWVvdXRFcnJvckZhY3RvcnkoaW5mbykge1xuICAgIHRocm93IG5ldyBUaW1lb3V0RXJyb3IoaW5mbyk7XG59XG5cbmNsYXNzIExvYWRlZE9uY2VQdWJsaXNoZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogdHJ1ZSwgbG9hZGVkVmFsdWU6IHZhbHVlIH07XG4gICAgICB0aGlzLl9zdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgdGhpcy50aHJvdyA9IChlcnJvciwgZXJyTXNnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogZmFsc2UsIGVycm9yLCBlcnJNc2cgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QuZXJyb3IoZXJyb3IpO1xuICAgIH07XG4gICAgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9ICh2YWx1ZUlmTm90TG9hZGVkKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZUlmTm90TG9hZGVkO1xuICAgIH07XG4gICAgdGhpcy5zdWJzY3JpYmUgPSAoZm4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLndhaXRGb3JMb2FkID0gKHRpbWVvdXRDb25maWcpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIikgYXNzZXJ0TmV2ZXIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCB0aW1lb3V0UGFyYW1zID0ge1xuICAgICAgICBmaXJzdDogdGltZW91dENvbmZpZy50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcih0aW1lb3V0Q29uZmlnLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuX3N1YmplY3QucGlwZSh0aW1lb3V0KHRpbWVvdXRQYXJhbXMpKSk7XG4gICAgfTtcbiAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6IGZhbHNlIH07XG4gICAgdGhpcy5fc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cblxuY29uc3QgT2pzRW52aXJvbm1lbnQgPSB6LmVudW0oW1wiZGV2XCIsIFwic3RnXCIsIFwicHJvZFwiXSk7XG5jb25zdCBjb25udG9CYXNlVXJscyA9IHtcbiAgcHJvZDogXCJodHRwczovL2Nvbm50by5nZXRvcGVucGF5LmNvbVwiLFxuICBzdGc6IFwiaHR0cHM6Ly9jb25udG8ub3BlbnBheXN0YWdpbmcuY29tXCIsXG4gIGRldjogXCJodHRwOi8vbG9jYWxob3N0OjgwMDBcIlxufTtcbmNvbnN0IGdldENvbm50b1VybCA9IChlbnYpID0+IHtcbiAgcmV0dXJuIGNvbm50b0Jhc2VVcmxzW2Vudl07XG59O1xuY29uc3QgZW52Q2FjaGUgPSB7fTtcbmNvbnN0IGdldEN1cnJlbnRFbnYgPSBhc3luYyAoYmFzZVVybCkgPT4ge1xuICBpZiAoZW52Q2FjaGVbYmFzZVVybF0pIHtcbiAgICByZXR1cm4gZW52Q2FjaGVbYmFzZVVybF07XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG5ldyBVUkwoXCIvaGVhbHRoL2Vudmlyb25tZW50XCIsIGJhc2VVcmwpKS50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpO1xuICAgIGNvbnN0IGVudiA9IE9qc0Vudmlyb25tZW50LnBhcnNlKHJlc3BvbnNlLmVudmlyb25tZW50KTtcbiAgICBlbnZDYWNoZVtiYXNlVXJsXSA9IGVudjtcbiAgICByZXR1cm4gZW52O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBPanNFbnZpcm9ubWVudC5WYWx1ZXMucHJvZDtcbiAgfVxufTtcblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt2YWx1ZX1gKTtcbn1cbmNvbnN0IGV4Y2x1ZGVQcm9wcyA9IChvYmosIHByb3BzKSA9PiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMob2JqKS5maWx0ZXIoKFtrZXldKSA9PiAhcHJvcHMuaW5jbHVkZXMoa2V5KSkpO1xufTtcbmNvbnN0IGdldFdpbmRvd1NhZmUgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICByZXR1cm4gd2luZG93O1xufTtcblxuY29uc3QgbWV0cmljc1B1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG5jb25zdCBNRVRSSUNTX1FVRVVFX0tFWSA9IFwib3BfbWV0cmljc19xdWV1ZVwiO1xuY29uc3QgTUFYX1JFVFJZX0FUVEVNUFRTID0gMztcbmNvbnN0IEJBVENIX1NJWkUgPSAzO1xuY29uc3QgQkFUQ0hfSU5URVJWQUxfTVMgPSAxZTM7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyR4IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyBNZXRyaWNzUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwO1xuICAgIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18keChcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKTtcbiAgICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfTtcbiAgICB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18keChcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIik7XG4gICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH07XG4gICAgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudChldmVudE5hbWUsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudE5hbWUsXG4gICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IGNvbnRleHRQcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBEYXRlLm5vdygpIC0gdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgOiAwXG4gICAgfTtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IGV2ZW50LnRpbWVzdGFtcDtcbiAgICB0aGlzLnF1ZXVlLnB1c2goZXZlbnQpO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG4gIGxvYWRRdWV1ZUZyb21TdG9yYWdlKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWRRdWV1ZSA9IGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlPy5nZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZKTtcbiAgICAgIGlmIChzdG9yZWRRdWV1ZSkge1xuICAgICAgICB0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShzdG9yZWRRdWV1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZS5zZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3Qgc2FmZVdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICBpZiAoc2FmZVdpbmRvdyAmJiBuYXZpZ2F0b3Iub25MaW5lICYmICF0aGlzLnByb2Nlc3NpbmdRdWV1ZSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgIXRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IHNhZmVXaW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgIH0sIEJBVENIX0lOVEVSVkFMX01TKTtcbiAgICB9XG4gIH1cbiAgY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGlmICh0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgZ2V0V2luZG93U2FmZSgpPy5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICBpZiAoIW5hdmlnYXRvci5vbkxpbmUgfHwgdGhpcy5wcm9jZXNzaW5nUXVldWUgfHwgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSB0cnVlO1xuICAgIHRoaXMuc2VuZEJhdGNoKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRleHQgPSBtZXRyaWNzUHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKHZvaWQgMCk7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICBsb2dfXyR4KFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hQYXlsb2FkID0ge1xuICAgICAgICBldmVudHM6IGJhdGNoLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZlbnRfbmFtZTogZXZlbnQuZXZlbnROYW1lLFxuICAgICAgICAgICAgZGV2aWNlX3Rva2VuOiBjb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICAgIC4uLmV2ZW50LmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBub25jZTogZXZlbnQubm9uY2UsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBldmVudC5kYXRldGltZSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBldmVudC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IGNvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgY29uc3QgY29ubnRvVXJsID0gZ2V0Q29ubnRvVXJsKGNvbnRleHQuZW52aXJvbm1lbnQpO1xuICAgICAgY29uc3QgbWV0cmljc1JvdXRlciA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBjb25udG9VcmwpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChtZXRyaWNzUm91dGVyLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJhdGNoUGF5bG9hZCksXG4gICAgICAgIGtlZXBhbGl2ZTogdHJ1ZVxuICAgICAgICAvLyBUbyBzZW5kIGV2ZW50cyBldmVuIGlmIHRoZSBwYWdlIGlzIHVubG9hZGVkXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ19fJHgoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaChiYXRjaCkge1xuICAgIGJhdGNoLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCBldmVudHNUb0tlZXAgPSBiYXRjaC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hdHRlbXB0Q291bnQgPCBNQVhfUkVUUllfQVRURU1QVFMpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgdGhpcy5xdWV1ZSA9IFsuLi5ldmVudHNUb0tlZXAsIC4uLnRoaXMucXVldWVdO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgbWV0cmljc1F1ZXVlID0gbmV3IE1ldHJpY3NRdWV1ZSgpO1xuY29uc3QgdHJhY2sgPSAoZXZlbnQsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKSA9PiB7XG4gIG1ldHJpY3NRdWV1ZS5hZGRFdmVudChldmVudCwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpO1xufTtcbmNvbnN0IGZvcmNlUHJvY2Vzc01ldHJpY3NRdWV1ZSA9ICgpID0+IHtcbiAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xufTtcbmNvbnN0IG9uVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IgPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGV2ZW50LnJlYXNvbik7XG4gIHRyYWNrKFwidW5oYW5kbGVkX3JlamVjdGlvbl9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgIGVycm9yX25hbWU6IGV2ZW50LnJlYXNvblxuICB9KTtcbn07XG5jb25zdCBvblVuY2F1Z2h0RXJyb3IgPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGV2ZW50LmVycm9yKTtcbiAgdHJhY2soXCJ1bmNhdWdodF9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgIGVycm9yX25hbWU6IGV2ZW50LmVycm9yPy5uYW1lLFxuICAgIGVycm9yX3N0YWNrOiBldmVudC5lcnJvcj8uc3RhY2ssXG4gICAgZmlsZV9uYW1lOiBldmVudC5maWxlbmFtZSxcbiAgICBsaW5lX251bWJlcjogZXZlbnQubGluZW5vLFxuICAgIGNvbHVtbl9udW1iZXI6IGV2ZW50LmNvbG5vXG4gIH0pO1xufTtcbmxldCBwYWdlTGlmZWN5Y2xlID0gbnVsbDtcbmNvbnN0IGxvYWRQYWdlTGlmZWN5Y2xlID0gYXN5bmMgKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFnZUxpZmVjeWNsZU1vZHVsZSA9IGF3YWl0IGltcG9ydCgnLi9saWZlY3ljbGUtIX57MDA1fX4uanMnKTtcbiAgICBwYWdlTGlmZWN5Y2xlID0gcGFnZUxpZmVjeWNsZU1vZHVsZS5kZWZhdWx0O1xuICAgIHJldHVybiBwYWdlTGlmZWN5Y2xlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihcIkZhaWxlZCB0byBsb2FkIHBhZ2UtbGlmZWN5Y2xlOlwiLCBlcnJvcik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5jb25zdCBwYWdlTGlmZWN5Y2xlU3RhdGVDaGFuZ2VIYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gIHRyYWNrKFwicGFnZV9saWZlY3ljbGVfc3RhdGVfY2hhbmdlXCIsIHtcbiAgICBvbGRfc3RhdGU6IGV2ZW50Lm9sZFN0YXRlLFxuICAgIG5ld19zdGF0ZTogZXZlbnQubmV3U3RhdGVcbiAgfSk7XG4gIGlmIChldmVudC5uZXdTdGF0ZSA9PT0gXCJoaWRkZW5cIiB8fCBldmVudC5uZXdTdGF0ZSA9PT0gXCJwYXNzaXZlXCIpIHtcbiAgICBtZXRyaWNzUXVldWUucHJvY2Vzc1F1ZXVlKCk7XG4gIH1cbn07XG5jb25zdCBhdHRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycyA9IGFzeW5jICgpID0+IHtcbiAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25VbmNhdWdodEVycm9yKTtcbiAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIG9uVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IpO1xuICBjb25zdCBsaWZlY3ljbGUgPSBhd2FpdCBsb2FkUGFnZUxpZmVjeWNsZSgpO1xuICBpZiAobGlmZWN5Y2xlKSB7XG4gICAgbGlmZWN5Y2xlLmFkZEV2ZW50TGlzdGVuZXIoXCJzdGF0ZWNoYW5nZVwiLCBwYWdlTGlmZWN5Y2xlU3RhdGVDaGFuZ2VIYW5kbGVyKTtcbiAgfVxufTtcbmNvbnN0IGRldGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzID0gYXN5bmMgKCkgPT4ge1xuICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvblVuY2F1Z2h0RXJyb3IpO1xuICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgb25VbmhhbmRsZWRSZWplY3Rpb25FcnJvcik7XG4gIGlmIChnZXRXaW5kb3dTYWZlKCkgJiYgcGFnZUxpZmVjeWNsZSkge1xuICAgIHBhZ2VMaWZlY3ljbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInN0YXRlY2hhbmdlXCIsIHBhZ2VMaWZlY3ljbGVTdGF0ZUNoYW5nZUhhbmRsZXIpO1xuICB9XG59O1xuXG5jb25zdCBTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHN0cmlwZV9wazogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbn0pO1xuY29uc3Qgb3VyQ3VycmVuY3lUb1RoZWlycyA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn07XG5jb25zdCBnZXRMb2FkZWRTdHJpcGUgPSBhc3luYyAocHVibGlzaGFibGVLZXkpID0+IHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgICBhd2FpdCBzbGVlcCg1MDApO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU3RyaXBlSnNQcmVzZW50KCkpIHtcbiAgICBjb25zb2xlLmxvZyhcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIEpTIG5vdCBmb3VuZC5gKTtcbiAgfVxuICBjb25zdCBzdHJpcGUgPSBuZXcgU3RyaXBlKHB1Ymxpc2hhYmxlS2V5KTtcbiAgcmV0dXJuIHN0cmlwZTtcbn07XG5jb25zdCBjcmVhdGVTdHJpcGVFbGVtZW50cyA9IGFzeW5jIChzdHJpcGVQdWJLZXksIGVsZW1lbnRzT3B0aW9ucykgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogc3RyaXBlLmVsZW1lbnRzKGVsZW1lbnRzT3B0aW9ucyksXG4gICAgc3RyaXBlXG4gIH07XG59O1xuY29uc3QgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QgPSBhc3luYyAoc3RyaXBlUHViS2V5LCB0b3RhbEFtb3VudEF0b20sIGN1cnJlbmN5LCBpc0Ftb3VudFBlbmRpbmcsIGlzTGlua09ubHkpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKHN0cmlwZVB1YktleSk7XG4gIGNvbnN0IHN0cmlwZUN1cnJlbmN5ID0gb3VyQ3VycmVuY3lUb1RoZWlyc1tjdXJyZW5jeS50b0xvd2VyQ2FzZSgpLnRyaW0oKV07XG4gIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gc3RyaXBlLnBheW1lbnRSZXF1ZXN0KHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzdHJpcGUgYWNjb3VudCBjb3VudHJ5IGFzIHNvb24gYXMgd2Ugc3VwcG9ydCBpdFxuICAgIGNvdW50cnk6IFwiVVNcIixcbiAgICBjdXJyZW5jeTogc3RyaXBlQ3VycmVuY3ksXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHRvdGFsQW1vdW50QXRvbSxcbiAgICAgIHBlbmRpbmc6IGlzQW1vdW50UGVuZGluZ1xuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6IHRydWUsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdIFxuICB9KTtcbiAgcmV0dXJuIHBheW1lbnRSZXF1ZXN0O1xufTtcbmNvbnN0IHNsZWVwID0gKHRpbWVvdXRNcykgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcyk7XG4gIH0pO1xufTtcbmNvbnN0IGlzU3RyaXBlSnNQcmVzZW50ID0gKCkgPT4ge1xuICByZXR1cm4gXCJTdHJpcGVcIiBpbiB3aW5kb3c7XG59O1xuY29uc3Qgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QgPSBhc3luYyAocGF5bWVudFJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJwYXltZW50bWV0aG9kIEVWVDo6IFwiLCBldnQpO1xuICAgICAgICByZXNvbHZlKGV2dCk7XG4gICAgICB9KTtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwidG9rZW5cIiwgYXN5bmMgKGV2dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcInRva2VuIEVWVDo6IFwiLCBldnQpO1xuICAgICAgfSk7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheWApKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGNvbmZpcm1TdHJpcGVQclBNID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG0pID0+IHtcbiAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrIHx8ICFuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkobmV4dEFjdGlvbk1ldGFkYXRhKX1gKTtcbiAgfVxuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBzdHJpcGVQbS5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAoY29uZmlybVJlc3VsdC5lcnJvcikge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwiZmFpbFwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke2NvbmZpcm1SZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBgdW5rbm93bmB9YCk7XG4gIH0gZWxzZSB7XG4gICAgc3RyaXBlUG0uY29tcGxldGUoXCJzdWNjZXNzXCIpO1xuICB9XG4gIHJldHVybiBjb25maXJtUmVzdWx0O1xufTtcbmNvbnN0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cgPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhKSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrKTtcbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWRcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdFN0YXR1cyA9IGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQ/LnN0YXR1cztcbiAgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJzdWNjZWVkZWRcIikge1xuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wbV9pZCk7XG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgY29uZmlybVJlc3VsdC5zZXR1cEludGVudCk7XG4gIH0gZWxzZSBpZiAocmVzdWx0U3RhdHVzID09PSBcImNhbmNlbGVkXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheWApO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke2NvbmZpcm1SZXN1bHQuZXJyb3I/Lm1lc3NhZ2UgPz8gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8ubGFzdF9zZXR1cF9lcnJvcj8ubWVzc2FnZSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICAgKTtcbiAgfVxufTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIFVwZGF0ZXMgdG8gdGhpcyBmaWxlIHNob3VsZCBhbHNvIGJlIHJlcGxpY2F0ZWQgdG8gQG9wZW50ZWxlbWV0cnkvY29yZSB0b28uXG4vKipcbiAqIC0gZ2xvYmFsVGhpcyAoTmV3IHN0YW5kYXJkKVxuICogLSBzZWxmIChXaWxsIHJldHVybiB0aGUgY3VycmVudCB3aW5kb3cgaW5zdGFuY2UgZm9yIHN1cHBvcnRlZCBicm93c2VycylcbiAqIC0gd2luZG93IChmYWxsYmFjayBmb3Igb2xkZXIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbnMpXG4gKiAtIGdsb2JhbCAoTm9kZUpTIGltcGxlbWVudGF0aW9uKVxuICogLSA8b2JqZWN0PiAoV2hlbiBhbGwgZWxzZSBmYWlscylcbiAqL1xuLyoqIG9ubHkgZ2xvYmFscyB0aGF0IGNvbW1vbiB0byBub2RlIGFuZCBicm93c2VycyBhcmUgYWxsb3dlZCAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vZGUvbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvZXMtYnVpbHRpbnMsIG5vLXVuZGVmXG52YXIgX2dsb2JhbFRoaXMgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCdcbiAgICA/IGdsb2JhbFRoaXNcbiAgICA6IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlbGZcbiAgICAgICAgOiB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyB3aW5kb3dcbiAgICAgICAgICAgIDogdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICA/IGdsb2JhbFxuICAgICAgICAgICAgICAgIDoge307XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbnZhciBWRVJTSU9OID0gJzEuOS4wJztcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciByZSA9IC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspKC0oLispKT8kLztcbi8qKlxuICogQ3JlYXRlIGEgZnVuY3Rpb24gdG8gdGVzdCBhbiBBUEkgdmVyc2lvbiB0byBzZWUgaWYgaXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBwcm92aWRlZCBvd25WZXJzaW9uLlxuICpcbiAqIFRoZSByZXR1cm5lZCBmdW5jdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBzZW1hbnRpY3M6XG4gKiAtIEV4YWN0IG1hdGNoIGlzIGFsd2F5cyBjb21wYXRpYmxlXG4gKiAtIE1ham9yIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICogICAgLSAxLnggcGFja2FnZSBjYW5ub3QgdXNlIGdsb2JhbCAyLnggcGFja2FnZVxuICogICAgLSAyLnggcGFja2FnZSBjYW5ub3QgdXNlIGdsb2JhbCAxLnggcGFja2FnZVxuICogLSBUaGUgbWlub3IgdmVyc2lvbiBvZiB0aGUgQVBJIG1vZHVsZSByZXF1ZXN0aW5nIGFjY2VzcyB0byB0aGUgZ2xvYmFsIEFQSSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbWlub3IgdmVyc2lvbiBvZiB0aGlzIEFQSVxuICogICAgLSAxLjMgcGFja2FnZSBtYXkgdXNlIDEuNCBnbG9iYWwgYmVjYXVzZSB0aGUgbGF0ZXIgZ2xvYmFsIGNvbnRhaW5zIGFsbCBmdW5jdGlvbnMgMS4zIGV4cGVjdHNcbiAqICAgIC0gMS40IHBhY2thZ2UgbWF5IE5PVCB1c2UgMS4zIGdsb2JhbCBiZWNhdXNlIGl0IG1heSB0cnkgdG8gY2FsbCBmdW5jdGlvbnMgd2hpY2ggZG9uJ3QgZXhpc3Qgb24gMS4zXG4gKiAtIElmIHRoZSBtYWpvciB2ZXJzaW9uIGlzIDAsIHRoZSBtaW5vciB2ZXJzaW9uIGlzIHRyZWF0ZWQgYXMgdGhlIG1ham9yIGFuZCB0aGUgcGF0Y2ggaXMgdHJlYXRlZCBhcyB0aGUgbWlub3JcbiAqIC0gUGF0Y2ggYW5kIGJ1aWxkIHRhZyBkaWZmZXJlbmNlcyBhcmUgbm90IGNvbnNpZGVyZWQgYXQgdGhpcyB0aW1lXG4gKlxuICogQHBhcmFtIG93blZlcnNpb24gdmVyc2lvbiB3aGljaCBzaG91bGQgYmUgY2hlY2tlZCBhZ2FpbnN0XG4gKi9cbmZ1bmN0aW9uIF9tYWtlQ29tcGF0aWJpbGl0eUNoZWNrKG93blZlcnNpb24pIHtcbiAgICB2YXIgYWNjZXB0ZWRWZXJzaW9ucyA9IG5ldyBTZXQoW293blZlcnNpb25dKTtcbiAgICB2YXIgcmVqZWN0ZWRWZXJzaW9ucyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgbXlWZXJzaW9uTWF0Y2ggPSBvd25WZXJzaW9uLm1hdGNoKHJlKTtcbiAgICBpZiAoIW15VmVyc2lvbk1hdGNoKSB7XG4gICAgICAgIC8vIHdlIGNhbm5vdCBndWFyYW50ZWUgY29tcGF0aWJpbGl0eSBzbyB3ZSBhbHdheXMgcmV0dXJuIG5vb3BcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9O1xuICAgIH1cbiAgICB2YXIgb3duVmVyc2lvblBhcnNlZCA9IHtcbiAgICAgICAgbWFqb3I6ICtteVZlcnNpb25NYXRjaFsxXSxcbiAgICAgICAgbWlub3I6ICtteVZlcnNpb25NYXRjaFsyXSxcbiAgICAgICAgcGF0Y2g6ICtteVZlcnNpb25NYXRjaFszXSxcbiAgICAgICAgcHJlcmVsZWFzZTogbXlWZXJzaW9uTWF0Y2hbNF0sXG4gICAgfTtcbiAgICAvLyBpZiBvd25WZXJzaW9uIGhhcyBhIHByZXJlbGVhc2UgdGFnLCB2ZXJzaW9ucyBtdXN0IG1hdGNoIGV4YWN0bHlcbiAgICBpZiAob3duVmVyc2lvblBhcnNlZC5wcmVyZWxlYXNlICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzRXhhY3RtYXRjaChnbG9iYWxWZXJzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsVmVyc2lvbiA9PT0gb3duVmVyc2lvbjtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX3JlamVjdCh2KSB7XG4gICAgICAgIHJlamVjdGVkVmVyc2lvbnMuYWRkKHYpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9hY2NlcHQodikge1xuICAgICAgICBhY2NlcHRlZFZlcnNpb25zLmFkZCh2KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBpc0NvbXBhdGlibGUoZ2xvYmFsVmVyc2lvbikge1xuICAgICAgICBpZiAoYWNjZXB0ZWRWZXJzaW9ucy5oYXMoZ2xvYmFsVmVyc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWplY3RlZFZlcnNpb25zLmhhcyhnbG9iYWxWZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBnbG9iYWxWZXJzaW9uTWF0Y2ggPSBnbG9iYWxWZXJzaW9uLm1hdGNoKHJlKTtcbiAgICAgICAgaWYgKCFnbG9iYWxWZXJzaW9uTWF0Y2gpIHtcbiAgICAgICAgICAgIC8vIGNhbm5vdCBwYXJzZSBvdGhlciB2ZXJzaW9uXG4gICAgICAgICAgICAvLyB3ZSBjYW5ub3QgZ3VhcmFudGVlIGNvbXBhdGliaWxpdHkgc28gd2UgYWx3YXlzIG5vb3BcbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBnbG9iYWxWZXJzaW9uUGFyc2VkID0ge1xuICAgICAgICAgICAgbWFqb3I6ICtnbG9iYWxWZXJzaW9uTWF0Y2hbMV0sXG4gICAgICAgICAgICBtaW5vcjogK2dsb2JhbFZlcnNpb25NYXRjaFsyXSxcbiAgICAgICAgICAgIHBhdGNoOiArZ2xvYmFsVmVyc2lvbk1hdGNoWzNdLFxuICAgICAgICAgICAgcHJlcmVsZWFzZTogZ2xvYmFsVmVyc2lvbk1hdGNoWzRdLFxuICAgICAgICB9O1xuICAgICAgICAvLyBpZiBnbG9iYWxWZXJzaW9uIGhhcyBhIHByZXJlbGVhc2UgdGFnLCB2ZXJzaW9ucyBtdXN0IG1hdGNoIGV4YWN0bHlcbiAgICAgICAgaWYgKGdsb2JhbFZlcnNpb25QYXJzZWQucHJlcmVsZWFzZSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtYWpvciB2ZXJzaW9ucyBtdXN0IG1hdGNoXG4gICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1ham9yICE9PSBnbG9iYWxWZXJzaW9uUGFyc2VkLm1ham9yKSB7XG4gICAgICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5tYWpvciA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWlub3IgPT09IGdsb2JhbFZlcnNpb25QYXJzZWQubWlub3IgJiZcbiAgICAgICAgICAgICAgICBvd25WZXJzaW9uUGFyc2VkLnBhdGNoIDw9IGdsb2JhbFZlcnNpb25QYXJzZWQucGF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2FjY2VwdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1pbm9yIDw9IGdsb2JhbFZlcnNpb25QYXJzZWQubWlub3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfYWNjZXB0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgIH07XG59XG4vKipcbiAqIFRlc3QgYW4gQVBJIHZlcnNpb24gdG8gc2VlIGlmIGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGlzIEFQSS5cbiAqXG4gKiAtIEV4YWN0IG1hdGNoIGlzIGFsd2F5cyBjb21wYXRpYmxlXG4gKiAtIE1ham9yIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICogICAgLSAxLnggcGFja2FnZSBjYW5ub3QgdXNlIGdsb2JhbCAyLnggcGFja2FnZVxuICogICAgLSAyLnggcGFja2FnZSBjYW5ub3QgdXNlIGdsb2JhbCAxLnggcGFja2FnZVxuICogLSBUaGUgbWlub3IgdmVyc2lvbiBvZiB0aGUgQVBJIG1vZHVsZSByZXF1ZXN0aW5nIGFjY2VzcyB0byB0aGUgZ2xvYmFsIEFQSSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbWlub3IgdmVyc2lvbiBvZiB0aGlzIEFQSVxuICogICAgLSAxLjMgcGFja2FnZSBtYXkgdXNlIDEuNCBnbG9iYWwgYmVjYXVzZSB0aGUgbGF0ZXIgZ2xvYmFsIGNvbnRhaW5zIGFsbCBmdW5jdGlvbnMgMS4zIGV4cGVjdHNcbiAqICAgIC0gMS40IHBhY2thZ2UgbWF5IE5PVCB1c2UgMS4zIGdsb2JhbCBiZWNhdXNlIGl0IG1heSB0cnkgdG8gY2FsbCBmdW5jdGlvbnMgd2hpY2ggZG9uJ3QgZXhpc3Qgb24gMS4zXG4gKiAtIElmIHRoZSBtYWpvciB2ZXJzaW9uIGlzIDAsIHRoZSBtaW5vciB2ZXJzaW9uIGlzIHRyZWF0ZWQgYXMgdGhlIG1ham9yIGFuZCB0aGUgcGF0Y2ggaXMgdHJlYXRlZCBhcyB0aGUgbWlub3JcbiAqIC0gUGF0Y2ggYW5kIGJ1aWxkIHRhZyBkaWZmZXJlbmNlcyBhcmUgbm90IGNvbnNpZGVyZWQgYXQgdGhpcyB0aW1lXG4gKlxuICogQHBhcmFtIHZlcnNpb24gdmVyc2lvbiBvZiB0aGUgQVBJIHJlcXVlc3RpbmcgYW4gaW5zdGFuY2Ugb2YgdGhlIGdsb2JhbCBBUElcbiAqL1xudmFyIGlzQ29tcGF0aWJsZSA9IF9tYWtlQ29tcGF0aWJpbGl0eUNoZWNrKFZFUlNJT04pO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIG1ham9yID0gVkVSU0lPTi5zcGxpdCgnLicpWzBdO1xudmFyIEdMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVkgPSBTeW1ib2wuZm9yKFwib3BlbnRlbGVtZXRyeS5qcy5hcGkuXCIgKyBtYWpvcik7XG52YXIgX2dsb2JhbCA9IF9nbG9iYWxUaGlzO1xuZnVuY3Rpb24gcmVnaXN0ZXJHbG9iYWwodHlwZSwgaW5zdGFuY2UsIGRpYWcsIGFsbG93T3ZlcnJpZGUpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKGFsbG93T3ZlcnJpZGUgPT09IHZvaWQgMCkgeyBhbGxvd092ZXJyaWRlID0gZmFsc2U7IH1cbiAgICB2YXIgYXBpID0gKF9nbG9iYWxbR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWV0gPSAoX2EgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT04sXG4gICAgfSk7XG4gICAgaWYgKCFhbGxvd092ZXJyaWRlICYmIGFwaVt0eXBlXSkge1xuICAgICAgICAvLyBhbHJlYWR5IHJlZ2lzdGVyZWQgYW4gQVBJIG9mIHRoaXMgdHlwZVxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBBdHRlbXB0ZWQgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiBvZiBBUEk6IFwiICsgdHlwZSk7XG4gICAgICAgIGRpYWcuZXJyb3IoZXJyLnN0YWNrIHx8IGVyci5tZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYXBpLnZlcnNpb24gIT09IFZFUlNJT04pIHtcbiAgICAgICAgLy8gQWxsIHJlZ2lzdGVyZWQgQVBJcyBtdXN0IGJlIG9mIHRoZSBzYW1lIHZlcnNpb24gZXhhY3RseVxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RyYXRpb24gb2YgdmVyc2lvbiB2XCIgKyBhcGkudmVyc2lvbiArIFwiIGZvciBcIiArIHR5cGUgKyBcIiBkb2VzIG5vdCBtYXRjaCBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgQVBJIHZcIiArIFZFUlNJT04pO1xuICAgICAgICBkaWFnLmVycm9yKGVyci5zdGFjayB8fCBlcnIubWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYXBpW3R5cGVdID0gaW5zdGFuY2U7XG4gICAgZGlhZy5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0ZXJlZCBhIGdsb2JhbCBmb3IgXCIgKyB0eXBlICsgXCIgdlwiICsgVkVSU0lPTiArIFwiLlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGdldEdsb2JhbCh0eXBlKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgZ2xvYmFsVmVyc2lvbiA9IChfYSA9IF9nbG9iYWxbR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52ZXJzaW9uO1xuICAgIGlmICghZ2xvYmFsVmVyc2lvbiB8fCAhaXNDb21wYXRpYmxlKGdsb2JhbFZlcnNpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIChfYiA9IF9nbG9iYWxbR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWV0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlt0eXBlXTtcbn1cbmZ1bmN0aW9uIHVucmVnaXN0ZXJHbG9iYWwodHlwZSwgZGlhZykge1xuICAgIGRpYWcuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFVucmVnaXN0ZXJpbmcgYSBnbG9iYWwgZm9yIFwiICsgdHlwZSArIFwiIHZcIiArIFZFUlNJT04gKyBcIi5cIik7XG4gICAgdmFyIGFwaSA9IF9nbG9iYWxbR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWV07XG4gICAgaWYgKGFwaSkge1xuICAgICAgICBkZWxldGUgYXBpW3R5cGVdO1xuICAgIH1cbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX3JlYWQkMyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5JDMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbi8qKlxuICogQ29tcG9uZW50IExvZ2dlciB3aGljaCBpcyBtZWFudCB0byBiZSB1c2VkIGFzIHBhcnQgb2YgYW55IGNvbXBvbmVudCB3aGljaFxuICogd2lsbCBhZGQgYXV0b21hdGljYWxseSBhZGRpdGlvbmFsIG5hbWVzcGFjZSBpbiBmcm9udCBvZiB0aGUgbG9nIG1lc3NhZ2UuXG4gKiBJdCB3aWxsIHRoZW4gZm9yd2FyZCBhbGwgbWVzc2FnZSB0byBnbG9iYWwgZGlhZyBsb2dnZXJcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBjTG9nZ2VyID0gZGlhZy5jcmVhdGVDb21wb25lbnRMb2dnZXIoeyBuYW1lc3BhY2U6ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24taHR0cCcgfSk7XG4gKiBjTG9nZ2VyLmRlYnVnKCd0ZXN0Jyk7XG4gKiAvLyBAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24taHR0cCB0ZXN0XG4gKi9cbnZhciBEaWFnQ29tcG9uZW50TG9nZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERpYWdDb21wb25lbnRMb2dnZXIocHJvcHMpIHtcbiAgICAgICAgdGhpcy5fbmFtZXNwYWNlID0gcHJvcHMubmFtZXNwYWNlIHx8ICdEaWFnQ29tcG9uZW50TG9nZ2VyJztcbiAgICB9XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvZ1Byb3h5KCdkZWJ1ZycsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2Vycm9yJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9O1xuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLmluZm8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvZ1Byb3h5KCdpbmZvJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9O1xuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLndhcm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvZ1Byb3h5KCd3YXJuJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9O1xuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLnZlcmJvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvZ1Byb3h5KCd2ZXJib3NlJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBEaWFnQ29tcG9uZW50TG9nZ2VyO1xufSgpKTtcbmZ1bmN0aW9uIGxvZ1Byb3h5KGZ1bmNOYW1lLCBuYW1lc3BhY2UsIGFyZ3MpIHtcbiAgICB2YXIgbG9nZ2VyID0gZ2V0R2xvYmFsKCdkaWFnJyk7XG4gICAgLy8gc2hvcnRjdXQgaWYgbG9nZ2VyIG5vdCBzZXRcbiAgICBpZiAoIWxvZ2dlcikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFyZ3MudW5zaGlmdChuYW1lc3BhY2UpO1xuICAgIHJldHVybiBsb2dnZXJbZnVuY05hbWVdLmFwcGx5KGxvZ2dlciwgX19zcHJlYWRBcnJheSQzKFtdLCBfX3JlYWQkMyhhcmdzKSwgZmFsc2UpKTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgYXZhaWxhYmxlIGludGVybmFsIGxvZ2dpbmcgbGV2ZWxzIGZvciB0aGUgZGlhZ25vc3RpYyBsb2dnZXIsIHRoZSBudW1lcmljIHZhbHVlc1xuICogb2YgdGhlIGxldmVscyBhcmUgZGVmaW5lZCB0byBtYXRjaCB0aGUgb3JpZ2luYWwgdmFsdWVzIGZyb20gdGhlIGluaXRpYWwgTG9nTGV2ZWwgdG8gYXZvaWRcbiAqIGNvbXBhdGliaWxpdHkvbWlncmF0aW9uIGlzc3VlcyBmb3IgYW55IGltcGxlbWVudGF0aW9uIHRoYXQgYXNzdW1lIHRoZSBudW1lcmljIG9yZGVyaW5nLlxuICovXG52YXIgRGlhZ0xvZ0xldmVsO1xuKGZ1bmN0aW9uIChEaWFnTG9nTGV2ZWwpIHtcbiAgICAvKiogRGlhZ25vc3RpYyBMb2dnaW5nIGxldmVsIHNldHRpbmcgdG8gZGlzYWJsZSBhbGwgbG9nZ2luZyAoZXhjZXB0IGFuZCBmb3JjZWQgbG9ncykgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiTk9ORVwiXSA9IDBdID0gXCJOT05FXCI7XG4gICAgLyoqIElkZW50aWZpZXMgYW4gZXJyb3Igc2NlbmFyaW8gKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiRVJST1JcIl0gPSAzMF0gPSBcIkVSUk9SXCI7XG4gICAgLyoqIElkZW50aWZpZXMgYSB3YXJuaW5nIHNjZW5hcmlvICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIldBUk5cIl0gPSA1MF0gPSBcIldBUk5cIjtcbiAgICAvKiogR2VuZXJhbCBpbmZvcm1hdGlvbmFsIGxvZyBtZXNzYWdlICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIklORk9cIl0gPSA2MF0gPSBcIklORk9cIjtcbiAgICAvKiogR2VuZXJhbCBkZWJ1ZyBsb2cgbWVzc2FnZSAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJERUJVR1wiXSA9IDcwXSA9IFwiREVCVUdcIjtcbiAgICAvKipcbiAgICAgKiBEZXRhaWxlZCB0cmFjZSBsZXZlbCBsb2dnaW5nIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGRldmVsb3BtZW50LCBzaG91bGQgb25seSBiZSBzZXRcbiAgICAgKiBpbiBhIGRldmVsb3BtZW50IGVudmlyb25tZW50LlxuICAgICAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJWRVJCT1NFXCJdID0gODBdID0gXCJWRVJCT1NFXCI7XG4gICAgLyoqIFVzZWQgdG8gc2V0IHRoZSBsb2dnaW5nIGxldmVsIHRvIGluY2x1ZGUgYWxsIGxvZ2dpbmcgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiQUxMXCJdID0gOTk5OV0gPSBcIkFMTFwiO1xufSkoRGlhZ0xvZ0xldmVsIHx8IChEaWFnTG9nTGV2ZWwgPSB7fSkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlTG9nTGV2ZWxEaWFnTG9nZ2VyKG1heExldmVsLCBsb2dnZXIpIHtcbiAgICBpZiAobWF4TGV2ZWwgPCBEaWFnTG9nTGV2ZWwuTk9ORSkge1xuICAgICAgICBtYXhMZXZlbCA9IERpYWdMb2dMZXZlbC5OT05FO1xuICAgIH1cbiAgICBlbHNlIGlmIChtYXhMZXZlbCA+IERpYWdMb2dMZXZlbC5BTEwpIHtcbiAgICAgICAgbWF4TGV2ZWwgPSBEaWFnTG9nTGV2ZWwuQUxMO1xuICAgIH1cbiAgICAvLyBJbiBjYXNlIHRoZSBsb2dnZXIgaXMgbnVsbCBvciB1bmRlZmluZWRcbiAgICBsb2dnZXIgPSBsb2dnZXIgfHwge307XG4gICAgZnVuY3Rpb24gX2ZpbHRlckZ1bmMoZnVuY05hbWUsIHRoZUxldmVsKSB7XG4gICAgICAgIHZhciB0aGVGdW5jID0gbG9nZ2VyW2Z1bmNOYW1lXTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGVGdW5jID09PSAnZnVuY3Rpb24nICYmIG1heExldmVsID49IHRoZUxldmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhlRnVuYy5iaW5kKGxvZ2dlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3I6IF9maWx0ZXJGdW5jKCdlcnJvcicsIERpYWdMb2dMZXZlbC5FUlJPUiksXG4gICAgICAgIHdhcm46IF9maWx0ZXJGdW5jKCd3YXJuJywgRGlhZ0xvZ0xldmVsLldBUk4pLFxuICAgICAgICBpbmZvOiBfZmlsdGVyRnVuYygnaW5mbycsIERpYWdMb2dMZXZlbC5JTkZPKSxcbiAgICAgICAgZGVidWc6IF9maWx0ZXJGdW5jKCdkZWJ1ZycsIERpYWdMb2dMZXZlbC5ERUJVRyksXG4gICAgICAgIHZlcmJvc2U6IF9maWx0ZXJGdW5jKCd2ZXJib3NlJywgRGlhZ0xvZ0xldmVsLlZFUkJPU0UpLFxuICAgIH07XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkJDIgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSQyID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG52YXIgQVBJX05BTUUkMiA9ICdkaWFnJztcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBpbnRlcm5hbFxuICogZGlhZ25vc3RpYyBBUElcbiAqL1xudmFyIERpYWdBUEkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCBjb25zdHJ1Y3RvclxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZnVuY3Rpb24gRGlhZ0FQSSgpIHtcbiAgICAgICAgZnVuY3Rpb24gX2xvZ1Byb3h5KGZ1bmNOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgbG9nZ2VyID0gZ2V0R2xvYmFsKCdkaWFnJyk7XG4gICAgICAgICAgICAgICAgLy8gc2hvcnRjdXQgaWYgbG9nZ2VyIG5vdCBzZXRcbiAgICAgICAgICAgICAgICBpZiAoIWxvZ2dlcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2dnZXJbZnVuY05hbWVdLmFwcGx5KGxvZ2dlciwgX19zcHJlYWRBcnJheSQyKFtdLCBfX3JlYWQkMihhcmdzKSwgZmFsc2UpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXNpbmcgc2VsZiBsb2NhbCB2YXJpYWJsZSBmb3IgbWluaWZpY2F0aW9uIHB1cnBvc2VzIGFzICd0aGlzJyBjYW5ub3QgYmUgbWluaWZpZWRcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICAvLyBEaWFnQVBJIHNwZWNpZmljIGZ1bmN0aW9uc1xuICAgICAgICB2YXIgc2V0TG9nZ2VyID0gZnVuY3Rpb24gKGxvZ2dlciwgb3B0aW9uc09yTG9nTGV2ZWwpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnNPckxvZ0xldmVsID09PSB2b2lkIDApIHsgb3B0aW9uc09yTG9nTGV2ZWwgPSB7IGxvZ0xldmVsOiBEaWFnTG9nTGV2ZWwuSU5GTyB9OyB9XG4gICAgICAgICAgICBpZiAobG9nZ2VyID09PSBzZWxmKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlcmUgaXNuJ3QgbXVjaCB3ZSBjYW4gZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAvLyBMb2dnaW5nIHRvIHRoZSBjb25zb2xlIG1pZ2h0IGJyZWFrIHRoZSB1c2VyIGFwcGxpY2F0aW9uLlxuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBsb2cgdG8gc2VsZi4gSWYgYSBsb2dnZXIgd2FzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBpdCB3aWxsIHJlY2VpdmUgdGhlIGxvZy5cbiAgICAgICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdDYW5ub3QgdXNlIGRpYWcgYXMgdGhlIGxvZ2dlciBmb3IgaXRzZWxmLiBQbGVhc2UgdXNlIGEgRGlhZ0xvZ2dlciBpbXBsZW1lbnRhdGlvbiBsaWtlIENvbnNvbGVEaWFnTG9nZ2VyIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uJyk7XG4gICAgICAgICAgICAgICAgc2VsZi5lcnJvcigoX2EgPSBlcnIuc3RhY2spICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNPckxvZ0xldmVsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNPckxvZ0xldmVsID0ge1xuICAgICAgICAgICAgICAgICAgICBsb2dMZXZlbDogb3B0aW9uc09yTG9nTGV2ZWwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBvbGRMb2dnZXIgPSBnZXRHbG9iYWwoJ2RpYWcnKTtcbiAgICAgICAgICAgIHZhciBuZXdMb2dnZXIgPSBjcmVhdGVMb2dMZXZlbERpYWdMb2dnZXIoKF9iID0gb3B0aW9uc09yTG9nTGV2ZWwubG9nTGV2ZWwpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IERpYWdMb2dMZXZlbC5JTkZPLCBsb2dnZXIpO1xuICAgICAgICAgICAgLy8gVGhlcmUgYWxyZWFkeSBpcyBhbiBsb2dnZXIgcmVnaXN0ZXJlZC4gV2UnbGwgbGV0IGl0IGtub3cgYmVmb3JlIG92ZXJ3cml0aW5nIGl0LlxuICAgICAgICAgICAgaWYgKG9sZExvZ2dlciAmJiAhb3B0aW9uc09yTG9nTGV2ZWwuc3VwcHJlc3NPdmVycmlkZU1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhY2sgPSAoX2MgPSBuZXcgRXJyb3IoKS5zdGFjaykgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogJzxmYWlsZWQgdG8gZ2VuZXJhdGUgc3RhY2t0cmFjZT4nO1xuICAgICAgICAgICAgICAgIG9sZExvZ2dlci53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBiZSBvdmVyd3JpdHRlbiBmcm9tIFwiICsgc3RhY2spO1xuICAgICAgICAgICAgICAgIG5ld0xvZ2dlci53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBvdmVyd3JpdGUgb25lIGFscmVhZHkgcmVnaXN0ZXJlZCBmcm9tIFwiICsgc3RhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyR2xvYmFsKCdkaWFnJywgbmV3TG9nZ2VyLCBzZWxmLCB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5zZXRMb2dnZXIgPSBzZXRMb2dnZXI7XG4gICAgICAgIHNlbGYuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHVucmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUkMiwgc2VsZik7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYuY3JlYXRlQ29tcG9uZW50TG9nZ2VyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGlhZ0NvbXBvbmVudExvZ2dlcihvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi52ZXJib3NlID0gX2xvZ1Byb3h5KCd2ZXJib3NlJyk7XG4gICAgICAgIHNlbGYuZGVidWcgPSBfbG9nUHJveHkoJ2RlYnVnJyk7XG4gICAgICAgIHNlbGYuaW5mbyA9IF9sb2dQcm94eSgnaW5mbycpO1xuICAgICAgICBzZWxmLndhcm4gPSBfbG9nUHJveHkoJ3dhcm4nKTtcbiAgICAgICAgc2VsZi5lcnJvciA9IF9sb2dQcm94eSgnZXJyb3InKTtcbiAgICB9XG4gICAgLyoqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBEaWFnQVBJIEFQSSAqL1xuICAgIERpYWdBUEkuaW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IERpYWdBUEkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gICAgfTtcbiAgICByZXR1cm4gRGlhZ0FQSTtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKiogR2V0IGEga2V5IHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgY29udGV4dCB2YWx1ZSAqL1xuZnVuY3Rpb24gY3JlYXRlQ29udGV4dEtleShkZXNjcmlwdGlvbikge1xuICAgIC8vIFRoZSBzcGVjaWZpY2F0aW9uIHN0YXRlcyB0aGF0IGZvciB0aGUgc2FtZSBpbnB1dCwgbXVsdGlwbGUgY2FsbHMgc2hvdWxkXG4gICAgLy8gcmV0dXJuIGRpZmZlcmVudCBrZXlzLiBEdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgSlMgZGVwZW5kZW5jeSBtYW5hZ2VtZW50XG4gICAgLy8gc3lzdGVtLCB0aGlzIGNyZWF0ZXMgcHJvYmxlbXMgd2hlcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2Ygc29tZSBwYWNrYWdlXG4gICAgLy8gY291bGQgaG9sZCBkaWZmZXJlbnQga2V5cyBmb3IgdGhlIHNhbWUgcHJvcGVydHkuXG4gICAgLy9cbiAgICAvLyBUaGVyZWZvcmUsIHdlIHVzZSBTeW1ib2wuZm9yIHdoaWNoIHJldHVybnMgdGhlIHNhbWUga2V5IGZvciB0aGUgc2FtZSBpbnB1dC5cbiAgICByZXR1cm4gU3ltYm9sLmZvcihkZXNjcmlwdGlvbik7XG59XG52YXIgQmFzZUNvbnRleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0IGEgbmV3IGNvbnRleHQgd2hpY2ggaW5oZXJpdHMgdmFsdWVzIGZyb20gYW4gb3B0aW9uYWwgcGFyZW50IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyZW50Q29udGV4dCBhIGNvbnRleHQgZnJvbSB3aGljaCB0byBpbmhlcml0IHZhbHVlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIEJhc2VDb250ZXh0KHBhcmVudENvbnRleHQpIHtcbiAgICAgICAgLy8gZm9yIG1pbmlmaWNhdGlvblxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHNlbGYuX2N1cnJlbnRDb250ZXh0ID0gcGFyZW50Q29udGV4dCA/IG5ldyBNYXAocGFyZW50Q29udGV4dCkgOiBuZXcgTWFwKCk7XG4gICAgICAgIHNlbGYuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBzZWxmLl9jdXJyZW50Q29udGV4dC5nZXQoa2V5KTsgfTtcbiAgICAgICAgc2VsZi5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBCYXNlQ29udGV4dChzZWxmLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50Q29udGV4dC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5kZWxldGVWYWx1ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IEJhc2VDb250ZXh0KHNlbGYuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRDb250ZXh0LmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBCYXNlQ29udGV4dDtcbn0oKSk7XG4vKiogVGhlIHJvb3QgY29udGV4dCBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhcmVudCBjb250ZXh0IHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIGNvbnRleHQgKi9cbnZhciBST09UX0NPTlRFWFQgPSBuZXcgQmFzZUNvbnRleHQoKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX3JlYWQkMSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5JDEgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbnZhciBOb29wQ29udGV4dE1hbmFnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9vcENvbnRleHRNYW5hZ2VyKCkge1xuICAgIH1cbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFJPT1RfQ09OVEVYVDtcbiAgICB9O1xuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uIChfY29udGV4dCwgZm4sIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAzOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAzXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZuLmNhbGwuYXBwbHkoZm4sIF9fc3ByZWFkQXJyYXkkMShbdGhpc0FyZ10sIF9fcmVhZCQxKGFyZ3MpLCBmYWxzZSkpO1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKF9jb250ZXh0LCB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9O1xuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICByZXR1cm4gTm9vcENvbnRleHRNYW5hZ2VyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX3JlYWQgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xudmFyIEFQSV9OQU1FJDEgPSAnY29udGV4dCc7XG52YXIgTk9PUF9DT05URVhUX01BTkFHRVIgPSBuZXcgTm9vcENvbnRleHRNYW5hZ2VyKCk7XG4vKipcbiAqIFNpbmdsZXRvbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIE9wZW5UZWxlbWV0cnkgQ29udGV4dCBBUElcbiAqL1xudmFyIENvbnRleHRBUEkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqIEVtcHR5IHByaXZhdGUgY29uc3RydWN0b3IgcHJldmVudHMgZW5kIHVzZXJzIGZyb20gY29uc3RydWN0aW5nIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBUEkgKi9cbiAgICBmdW5jdGlvbiBDb250ZXh0QVBJKCkge1xuICAgIH1cbiAgICAvKiogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIENvbnRleHQgQVBJICovXG4gICAgQ29udGV4dEFQSS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgQ29udGV4dEFQSSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY3VycmVudCBjb250ZXh0IG1hbmFnZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZXh0IG1hbmFnZXIgd2FzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLCBlbHNlIGZhbHNlXG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuc2V0R2xvYmFsQ29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbiAoY29udGV4dE1hbmFnZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FJDEsIGNvbnRleHRNYW5hZ2VyLCBEaWFnQVBJLmluc3RhbmNlKCkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvbnRleHRcbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmFjdGl2ZSgpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZSBhIGZ1bmN0aW9uIHdpdGggYW4gYWN0aXZlIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gYmUgYWN0aXZlIGR1cmluZyBmdW5jdGlvbiBleGVjdXRpb25cbiAgICAgKiBAcGFyYW0gZm4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBpbiBhIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gdGhpc0FyZyBvcHRpb25hbCByZWNlaXZlciB0byBiZSB1c2VkIGZvciBjYWxsaW5nIGZuXG4gICAgICogQHBhcmFtIGFyZ3Mgb3B0aW9uYWwgYXJndW1lbnRzIGZvcndhcmRlZCB0byBmblxuICAgICAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbiAoY29udGV4dCwgZm4sIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDM7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDNdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKSkud2l0aC5hcHBseShfYSwgX19zcHJlYWRBcnJheShbY29udGV4dCwgZm4sIHRoaXNBcmddLCBfX3JlYWQoYXJncyksIGZhbHNlKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGEgY29udGV4dCB0byBhIHRhcmdldCBmdW5jdGlvbiBvciBldmVudCBlbWl0dGVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGJpbmQgdG8gdGhlIGV2ZW50IGVtaXR0ZXIgb3IgZnVuY3Rpb24uIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IGZ1bmN0aW9uIG9yIGV2ZW50IGVtaXR0ZXIgdG8gYmluZFxuICAgICAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoY29udGV4dCwgdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmJpbmQoY29udGV4dCwgdGFyZ2V0KTtcbiAgICB9O1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLl9nZXRDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEdsb2JhbChBUElfTkFNRSQxKSB8fCBOT09QX0NPTlRFWFRfTUFOQUdFUjtcbiAgICB9O1xuICAgIC8qKiBEaXNhYmxlIGFuZCByZW1vdmUgdGhlIGdsb2JhbCBjb250ZXh0IG1hbmFnZXIgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmRpc2FibGUoKTtcbiAgICAgICAgdW5yZWdpc3Rlckdsb2JhbChBUElfTkFNRSQxLCBEaWFnQVBJLmluc3RhbmNlKCkpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbnRleHRBUEk7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFRyYWNlRmxhZ3M7XG4oZnVuY3Rpb24gKFRyYWNlRmxhZ3MpIHtcbiAgICAvKiogUmVwcmVzZW50cyBubyBmbGFnIHNldC4gKi9cbiAgICBUcmFjZUZsYWdzW1RyYWNlRmxhZ3NbXCJOT05FXCJdID0gMF0gPSBcIk5PTkVcIjtcbiAgICAvKiogQml0IHRvIHJlcHJlc2VudCB3aGV0aGVyIHRyYWNlIGlzIHNhbXBsZWQgaW4gdHJhY2UgZmxhZ3MuICovXG4gICAgVHJhY2VGbGFnc1tUcmFjZUZsYWdzW1wiU0FNUExFRFwiXSA9IDFdID0gXCJTQU1QTEVEXCI7XG59KShUcmFjZUZsYWdzIHx8IChUcmFjZUZsYWdzID0ge30pKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBJTlZBTElEX1NQQU5JRCA9ICcwMDAwMDAwMDAwMDAwMDAwJztcbnZhciBJTlZBTElEX1RSQUNFSUQgPSAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnO1xudmFyIElOVkFMSURfU1BBTl9DT05URVhUID0ge1xuICAgIHRyYWNlSWQ6IElOVkFMSURfVFJBQ0VJRCxcbiAgICBzcGFuSWQ6IElOVkFMSURfU1BBTklELFxuICAgIHRyYWNlRmxhZ3M6IFRyYWNlRmxhZ3MuTk9ORSxcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKipcbiAqIFRoZSBOb25SZWNvcmRpbmdTcGFuIGlzIHRoZSBkZWZhdWx0IHtAbGluayBTcGFufSB0aGF0IGlzIHVzZWQgd2hlbiBubyBTcGFuXG4gKiBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUuIEFsbCBvcGVyYXRpb25zIGFyZSBuby1vcCBpbmNsdWRpbmcgY29udGV4dFxuICogcHJvcGFnYXRpb24uXG4gKi9cbnZhciBOb25SZWNvcmRpbmdTcGFuID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vblJlY29yZGluZ1NwYW4oX3NwYW5Db250ZXh0KSB7XG4gICAgICAgIGlmIChfc3BhbkNvbnRleHQgPT09IHZvaWQgMCkgeyBfc3BhbkNvbnRleHQgPSBJTlZBTElEX1NQQU5fQ09OVEVYVDsgfVxuICAgICAgICB0aGlzLl9zcGFuQ29udGV4dCA9IF9zcGFuQ29udGV4dDtcbiAgICB9XG4gICAgLy8gUmV0dXJucyBhIFNwYW5Db250ZXh0LlxuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnNwYW5Db250ZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3BhbkNvbnRleHQ7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChfa2V5LCBfdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnNldEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoX2F0dHJpYnV0ZXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmFkZEV2ZW50ID0gZnVuY3Rpb24gKF9uYW1lLCBfYXR0cmlidXRlcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmFkZExpbmsgPSBmdW5jdGlvbiAoX2xpbmspIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5hZGRMaW5rcyA9IGZ1bmN0aW9uIChfbGlua3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnNldFN0YXR1cyA9IGZ1bmN0aW9uIChfc3RhdHVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS51cGRhdGVOYW1lID0gZnVuY3Rpb24gKF9uYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoX2VuZFRpbWUpIHsgfTtcbiAgICAvLyBpc1JlY29yZGluZyBhbHdheXMgcmV0dXJucyBmYWxzZSBmb3IgTm9uUmVjb3JkaW5nU3Bhbi5cbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5pc1JlY29yZGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5yZWNvcmRFeGNlcHRpb24gPSBmdW5jdGlvbiAoX2V4Y2VwdGlvbiwgX3RpbWUpIHsgfTtcbiAgICByZXR1cm4gTm9uUmVjb3JkaW5nU3Bhbjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKipcbiAqIHNwYW4ga2V5XG4gKi9cbnZhciBTUEFOX0tFWSA9IGNyZWF0ZUNvbnRleHRLZXkoJ09wZW5UZWxlbWV0cnkgQ29udGV4dCBLZXkgU1BBTicpO1xuLyoqXG4gKiBSZXR1cm4gdGhlIHNwYW4gaWYgb25lIGV4aXN0c1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gZ2V0IHNwYW4gZnJvbVxuICovXG5mdW5jdGlvbiBnZXRTcGFuKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dC5nZXRWYWx1ZShTUEFOX0tFWSkgfHwgdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBHZXRzIHRoZSBzcGFuIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCwgaWYgb25lIGV4aXN0cy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aXZlU3BhbigpIHtcbiAgICByZXR1cm4gZ2V0U3BhbihDb250ZXh0QVBJLmdldEluc3RhbmNlKCkuYWN0aXZlKCkpO1xufVxuLyoqXG4gKiBTZXQgdGhlIHNwYW4gb24gYSBjb250ZXh0XG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byB1c2UgYXMgcGFyZW50XG4gKiBAcGFyYW0gc3BhbiBzcGFuIHRvIHNldCBhY3RpdmVcbiAqL1xuZnVuY3Rpb24gc2V0U3Bhbihjb250ZXh0LCBzcGFuKSB7XG4gICAgcmV0dXJuIGNvbnRleHQuc2V0VmFsdWUoU1BBTl9LRVksIHNwYW4pO1xufVxuLyoqXG4gKiBSZW1vdmUgY3VycmVudCBzcGFuIHN0b3JlZCBpbiB0aGUgY29udGV4dFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gZGVsZXRlIHNwYW4gZnJvbVxuICovXG5mdW5jdGlvbiBkZWxldGVTcGFuKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dC5kZWxldGVWYWx1ZShTUEFOX0tFWSk7XG59XG4vKipcbiAqIFdyYXAgc3BhbiBjb250ZXh0IGluIGEgTm9vcFNwYW4gYW5kIHNldCBhcyBzcGFuIGluIGEgbmV3XG4gKiBjb250ZXh0XG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBzZXQgYWN0aXZlIHNwYW4gb25cbiAqIEBwYXJhbSBzcGFuQ29udGV4dCBzcGFuIGNvbnRleHQgdG8gYmUgd3JhcHBlZFxuICovXG5mdW5jdGlvbiBzZXRTcGFuQ29udGV4dChjb250ZXh0LCBzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiBzZXRTcGFuKGNvbnRleHQsIG5ldyBOb25SZWNvcmRpbmdTcGFuKHNwYW5Db250ZXh0KSk7XG59XG4vKipcbiAqIEdldCB0aGUgc3BhbiBjb250ZXh0IG9mIHRoZSBzcGFuIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGdldCB2YWx1ZXMgZnJvbVxuICovXG5mdW5jdGlvbiBnZXRTcGFuQ29udGV4dChjb250ZXh0KSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBnZXRTcGFuKGNvbnRleHQpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3BhbkNvbnRleHQoKTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBWQUxJRF9UUkFDRUlEX1JFR0VYID0gL14oWzAtOWEtZl17MzJ9KSQvaTtcbnZhciBWQUxJRF9TUEFOSURfUkVHRVggPSAvXlswLTlhLWZdezE2fSQvaTtcbmZ1bmN0aW9uIGlzVmFsaWRUcmFjZUlkKHRyYWNlSWQpIHtcbiAgICByZXR1cm4gVkFMSURfVFJBQ0VJRF9SRUdFWC50ZXN0KHRyYWNlSWQpICYmIHRyYWNlSWQgIT09IElOVkFMSURfVFJBQ0VJRDtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRTcGFuSWQoc3BhbklkKSB7XG4gICAgcmV0dXJuIFZBTElEX1NQQU5JRF9SRUdFWC50ZXN0KHNwYW5JZCkgJiYgc3BhbklkICE9PSBJTlZBTElEX1NQQU5JRDtcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoaXMge0BsaW5rIFNwYW5Db250ZXh0fSBpcyB2YWxpZC5cbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIHtAbGluayBTcGFuQ29udGV4dH0gaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGlzU3BhbkNvbnRleHRWYWxpZChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiAoaXNWYWxpZFRyYWNlSWQoc3BhbkNvbnRleHQudHJhY2VJZCkgJiYgaXNWYWxpZFNwYW5JZChzcGFuQ29udGV4dC5zcGFuSWQpKTtcbn1cbi8qKlxuICogV3JhcCB0aGUgZ2l2ZW4ge0BsaW5rIFNwYW5Db250ZXh0fSBpbiBhIG5ldyBub24tcmVjb3JkaW5nIHtAbGluayBTcGFufVxuICpcbiAqIEBwYXJhbSBzcGFuQ29udGV4dCBzcGFuIGNvbnRleHQgdG8gYmUgd3JhcHBlZFxuICogQHJldHVybnMgYSBuZXcgbm9uLXJlY29yZGluZyB7QGxpbmsgU3Bhbn0gd2l0aCB0aGUgcHJvdmlkZWQgY29udGV4dFxuICovXG5mdW5jdGlvbiB3cmFwU3BhbkNvbnRleHQoc3BhbkNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IE5vblJlY29yZGluZ1NwYW4oc3BhbkNvbnRleHQpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIGNvbnRleHRBcGkgPSBDb250ZXh0QVBJLmdldEluc3RhbmNlKCk7XG4vKipcbiAqIE5vLW9wIGltcGxlbWVudGF0aW9ucyBvZiB7QGxpbmsgVHJhY2VyfS5cbiAqL1xudmFyIE5vb3BUcmFjZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9vcFRyYWNlcigpIHtcbiAgICB9XG4gICAgLy8gc3RhcnRTcGFuIHN0YXJ0cyBhIG5vb3Agc3Bhbi5cbiAgICBOb29wVHJhY2VyLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgY29udGV4dCkge1xuICAgICAgICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSB7IGNvbnRleHQgPSBjb250ZXh0QXBpLmFjdGl2ZSgpOyB9XG4gICAgICAgIHZhciByb290ID0gQm9vbGVhbihvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucm9vdCk7XG4gICAgICAgIGlmIChyb290KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE5vblJlY29yZGluZ1NwYW4oKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50RnJvbUNvbnRleHQgPSBjb250ZXh0ICYmIGdldFNwYW5Db250ZXh0KGNvbnRleHQpO1xuICAgICAgICBpZiAoaXNTcGFuQ29udGV4dChwYXJlbnRGcm9tQ29udGV4dCkgJiZcbiAgICAgICAgICAgIGlzU3BhbkNvbnRleHRWYWxpZChwYXJlbnRGcm9tQ29udGV4dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbihwYXJlbnRGcm9tQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE5vblJlY29yZGluZ1NwYW4oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTm9vcFRyYWNlci5wcm90b3R5cGUuc3RhcnRBY3RpdmVTcGFuID0gZnVuY3Rpb24gKG5hbWUsIGFyZzIsIGFyZzMsIGFyZzQpIHtcbiAgICAgICAgdmFyIG9wdHM7XG4gICAgICAgIHZhciBjdHg7XG4gICAgICAgIHZhciBmbjtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgZm4gPSBhcmcyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIG9wdHMgPSBhcmcyO1xuICAgICAgICAgICAgZm4gPSBhcmczO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3B0cyA9IGFyZzI7XG4gICAgICAgICAgICBjdHggPSBhcmczO1xuICAgICAgICAgICAgZm4gPSBhcmc0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJlbnRDb250ZXh0ID0gY3R4ICE9PSBudWxsICYmIGN0eCAhPT0gdm9pZCAwID8gY3R4IDogY29udGV4dEFwaS5hY3RpdmUoKTtcbiAgICAgICAgdmFyIHNwYW4gPSB0aGlzLnN0YXJ0U3BhbihuYW1lLCBvcHRzLCBwYXJlbnRDb250ZXh0KTtcbiAgICAgICAgdmFyIGNvbnRleHRXaXRoU3BhblNldCA9IHNldFNwYW4ocGFyZW50Q29udGV4dCwgc3Bhbik7XG4gICAgICAgIHJldHVybiBjb250ZXh0QXBpLndpdGgoY29udGV4dFdpdGhTcGFuU2V0LCBmbiwgdW5kZWZpbmVkLCBzcGFuKTtcbiAgICB9O1xuICAgIHJldHVybiBOb29wVHJhY2VyO1xufSgpKTtcbmZ1bmN0aW9uIGlzU3BhbkNvbnRleHQoc3BhbkNvbnRleHQpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBzcGFuQ29udGV4dCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdHlwZW9mIHNwYW5Db250ZXh0WydzcGFuSWQnXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgdHlwZW9mIHNwYW5Db250ZXh0Wyd0cmFjZUlkJ10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgIHR5cGVvZiBzcGFuQ29udGV4dFsndHJhY2VGbGFncyddID09PSAnbnVtYmVyJyk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgTk9PUF9UUkFDRVIgPSBuZXcgTm9vcFRyYWNlcigpO1xuLyoqXG4gKiBQcm94eSB0cmFjZXIgcHJvdmlkZWQgYnkgdGhlIHByb3h5IHRyYWNlciBwcm92aWRlclxuICovXG52YXIgUHJveHlUcmFjZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUHJveHlUcmFjZXIoX3Byb3ZpZGVyLCBuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3Byb3ZpZGVyID0gX3Byb3ZpZGVyO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cbiAgICBQcm94eVRyYWNlci5wcm90b3R5cGUuc3RhcnRTcGFuID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRyYWNlcigpLnN0YXJ0U3BhbihuYW1lLCBvcHRpb25zLCBjb250ZXh0KTtcbiAgICB9O1xuICAgIFByb3h5VHJhY2VyLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbiAoX25hbWUsIF9vcHRpb25zLCBfY29udGV4dCwgX2ZuKSB7XG4gICAgICAgIHZhciB0cmFjZXIgPSB0aGlzLl9nZXRUcmFjZXIoKTtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkodHJhY2VyLnN0YXJ0QWN0aXZlU3BhbiwgdHJhY2VyLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogVHJ5IHRvIGdldCBhIHRyYWNlciBmcm9tIHRoZSBwcm94eSB0cmFjZXIgcHJvdmlkZXIuXG4gICAgICogSWYgdGhlIHByb3h5IHRyYWNlciBwcm92aWRlciBoYXMgbm8gZGVsZWdhdGUsIHJldHVybiBhIG5vb3AgdHJhY2VyLlxuICAgICAqL1xuICAgIFByb3h5VHJhY2VyLnByb3RvdHlwZS5fZ2V0VHJhY2VyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHJhY2VyID0gdGhpcy5fcHJvdmlkZXIuZ2V0RGVsZWdhdGVUcmFjZXIodGhpcy5uYW1lLCB0aGlzLnZlcnNpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIGlmICghdHJhY2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gTk9PUF9UUkFDRVI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSB0cmFjZXI7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICB9O1xuICAgIHJldHVybiBQcm94eVRyYWNlcjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSB7QGxpbmsgVHJhY2VyUHJvdmlkZXJ9IHdoaWNoIHJldHVybnMgYW4gaW1wb3RlbnRcbiAqIFRyYWNlciBmb3IgYWxsIGNhbGxzIHRvIGBnZXRUcmFjZXJgLlxuICpcbiAqIEFsbCBvcGVyYXRpb25zIGFyZSBuby1vcC5cbiAqL1xudmFyIE5vb3BUcmFjZXJQcm92aWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wVHJhY2VyUHJvdmlkZXIoKSB7XG4gICAgfVxuICAgIE5vb3BUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24gKF9uYW1lLCBfdmVyc2lvbiwgX29wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb29wVHJhY2VyKCk7XG4gICAgfTtcbiAgICByZXR1cm4gTm9vcFRyYWNlclByb3ZpZGVyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBOT09QX1RSQUNFUl9QUk9WSURFUiA9IG5ldyBOb29wVHJhY2VyUHJvdmlkZXIoKTtcbi8qKlxuICogVHJhY2VyIHByb3ZpZGVyIHdoaWNoIHByb3ZpZGVzIHtAbGluayBQcm94eVRyYWNlcn1zLlxuICpcbiAqIEJlZm9yZSBhIGRlbGVnYXRlIGlzIHNldCwgdHJhY2VycyBwcm92aWRlZCBhcmUgTm9PcC5cbiAqICAgV2hlbiBhIGRlbGVnYXRlIGlzIHNldCwgdHJhY2VzIGFyZSBwcm92aWRlZCBmcm9tIHRoZSBkZWxlZ2F0ZS5cbiAqICAgV2hlbiBhIGRlbGVnYXRlIGlzIHNldCBhZnRlciB0cmFjZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHByb3ZpZGVkLFxuICogICBhbGwgdHJhY2VycyBhbHJlYWR5IHByb3ZpZGVkIHdpbGwgdXNlIHRoZSBwcm92aWRlZCBkZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xudmFyIFByb3h5VHJhY2VyUHJvdmlkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUHJveHlUcmFjZXJQcm92aWRlcigpIHtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGEge0BsaW5rIFByb3h5VHJhY2VyfVxuICAgICAqL1xuICAgIFByb3h5VHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uIChuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLmdldERlbGVnYXRlVHJhY2VyKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBuZXcgUHJveHlUcmFjZXIodGhpcywgbmFtZSwgdmVyc2lvbiwgb3B0aW9ucykpO1xuICAgIH07XG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0RGVsZWdhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2RlbGVnYXRlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBOT09QX1RSQUNFUl9QUk9WSURFUjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFNldCB0aGUgZGVsZWdhdGUgdHJhY2VyIHByb3ZpZGVyXG4gICAgICovXG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuc2V0RGVsZWdhdGUgPSBmdW5jdGlvbiAoZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICB9O1xuICAgIFByb3h5VHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLmdldERlbGVnYXRlVHJhY2VyID0gZnVuY3Rpb24gKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5fZGVsZWdhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRUcmFjZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICByZXR1cm4gUHJveHlUcmFjZXJQcm92aWRlcjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgU3BhbktpbmQ7XG4oZnVuY3Rpb24gKFNwYW5LaW5kKSB7XG4gICAgLyoqIERlZmF1bHQgdmFsdWUuIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGlzIHVzZWQgaW50ZXJuYWxseS4gKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIklOVEVSTkFMXCJdID0gMF0gPSBcIklOVEVSTkFMXCI7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gY292ZXJzIHNlcnZlci1zaWRlIGhhbmRsaW5nIG9mIGFuIFJQQyBvciBvdGhlclxuICAgICAqIHJlbW90ZSByZXF1ZXN0LlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiU0VSVkVSXCJdID0gMV0gPSBcIlNFUlZFUlwiO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGNvdmVycyB0aGUgY2xpZW50LXNpZGUgd3JhcHBlciBhcm91bmQgYW4gUlBDIG9yXG4gICAgICogb3RoZXIgcmVtb3RlIHJlcXVlc3QuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJDTElFTlRcIl0gPSAyXSA9IFwiQ0xJRU5UXCI7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gZGVzY3JpYmVzIHByb2R1Y2VyIHNlbmRpbmcgYSBtZXNzYWdlIHRvIGFcbiAgICAgKiBicm9rZXIuIFVubGlrZSBjbGllbnQgYW5kIHNlcnZlciwgdGhlcmUgaXMgbm8gZGlyZWN0IGNyaXRpY2FsIHBhdGggbGF0ZW5jeVxuICAgICAqIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHByb2R1Y2VyIGFuZCBjb25zdW1lciBzcGFucy5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIlBST0RVQ0VSXCJdID0gM10gPSBcIlBST0RVQ0VSXCI7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gZGVzY3JpYmVzIGNvbnN1bWVyIHJlY2VpdmluZyBhIG1lc3NhZ2UgZnJvbSBhXG4gICAgICogYnJva2VyLiBVbmxpa2UgY2xpZW50IGFuZCBzZXJ2ZXIsIHRoZXJlIGlzIG5vIGRpcmVjdCBjcml0aWNhbCBwYXRoIGxhdGVuY3lcbiAgICAgKiByZWxhdGlvbnNoaXAgYmV0d2VlbiBwcm9kdWNlciBhbmQgY29uc3VtZXIgc3BhbnMuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJDT05TVU1FUlwiXSA9IDRdID0gXCJDT05TVU1FUlwiO1xufSkoU3BhbktpbmQgfHwgKFNwYW5LaW5kID0ge30pKTtcblxuLyoqXG4gKiBBbiBlbnVtZXJhdGlvbiBvZiBzdGF0dXMgY29kZXMuXG4gKi9cbnZhciBTcGFuU3RhdHVzQ29kZTtcbihmdW5jdGlvbiAoU3BhblN0YXR1c0NvZGUpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzdGF0dXMuXG4gICAgICovXG4gICAgU3BhblN0YXR1c0NvZGVbU3BhblN0YXR1c0NvZGVbXCJVTlNFVFwiXSA9IDBdID0gXCJVTlNFVFwiO1xuICAgIC8qKlxuICAgICAqIFRoZSBvcGVyYXRpb24gaGFzIGJlZW4gdmFsaWRhdGVkIGJ5IGFuIEFwcGxpY2F0aW9uIGRldmVsb3BlciBvclxuICAgICAqIE9wZXJhdG9yIHRvIGhhdmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAgICAgKi9cbiAgICBTcGFuU3RhdHVzQ29kZVtTcGFuU3RhdHVzQ29kZVtcIk9LXCJdID0gMV0gPSBcIk9LXCI7XG4gICAgLyoqXG4gICAgICogVGhlIG9wZXJhdGlvbiBjb250YWlucyBhbiBlcnJvci5cbiAgICAgKi9cbiAgICBTcGFuU3RhdHVzQ29kZVtTcGFuU3RhdHVzQ29kZVtcIkVSUk9SXCJdID0gMl0gPSBcIkVSUk9SXCI7XG59KShTcGFuU3RhdHVzQ29kZSB8fCAoU3BhblN0YXR1c0NvZGUgPSB7fSkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gU3BsaXQgbW9kdWxlLWxldmVsIHZhcmlhYmxlIGRlZmluaXRpb24gaW50byBzZXBhcmF0ZSBmaWxlcyB0byBhbGxvd1xuLy8gdHJlZS1zaGFraW5nIG9uIGVhY2ggYXBpIGluc3RhbmNlLlxuLyoqIEVudHJ5cG9pbnQgZm9yIGNvbnRleHQgQVBJICovXG52YXIgY29udGV4dCA9IENvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBBUElfTkFNRSA9ICd0cmFjZSc7XG4vKipcbiAqIFNpbmdsZXRvbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIE9wZW5UZWxlbWV0cnkgVHJhY2luZyBBUElcbiAqL1xudmFyIFRyYWNlQVBJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKiBFbXB0eSBwcml2YXRlIGNvbnN0cnVjdG9yIHByZXZlbnRzIGVuZCB1c2VycyBmcm9tIGNvbnN0cnVjdGluZyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQVBJICovXG4gICAgZnVuY3Rpb24gVHJhY2VBUEkoKSB7XG4gICAgICAgIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgUHJveHlUcmFjZXJQcm92aWRlcigpO1xuICAgICAgICB0aGlzLndyYXBTcGFuQ29udGV4dCA9IHdyYXBTcGFuQ29udGV4dDtcbiAgICAgICAgdGhpcy5pc1NwYW5Db250ZXh0VmFsaWQgPSBpc1NwYW5Db250ZXh0VmFsaWQ7XG4gICAgICAgIHRoaXMuZGVsZXRlU3BhbiA9IGRlbGV0ZVNwYW47XG4gICAgICAgIHRoaXMuZ2V0U3BhbiA9IGdldFNwYW47XG4gICAgICAgIHRoaXMuZ2V0QWN0aXZlU3BhbiA9IGdldEFjdGl2ZVNwYW47XG4gICAgICAgIHRoaXMuZ2V0U3BhbkNvbnRleHQgPSBnZXRTcGFuQ29udGV4dDtcbiAgICAgICAgdGhpcy5zZXRTcGFuID0gc2V0U3BhbjtcbiAgICAgICAgdGhpcy5zZXRTcGFuQ29udGV4dCA9IHNldFNwYW5Db250ZXh0O1xuICAgIH1cbiAgICAvKiogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIFRyYWNlIEFQSSAqL1xuICAgIFRyYWNlQVBJLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBUcmFjZUFQSSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY3VycmVudCBnbG9iYWwgdHJhY2VyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdHJhY2VyIHByb3ZpZGVyIHdhcyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCwgZWxzZSBmYWxzZVxuICAgICAqL1xuICAgIFRyYWNlQVBJLnByb3RvdHlwZS5zZXRHbG9iYWxUcmFjZXJQcm92aWRlciA9IGZ1bmN0aW9uIChwcm92aWRlcikge1xuICAgICAgICB2YXIgc3VjY2VzcyA9IHJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FLCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLCBEaWFnQVBJLmluc3RhbmNlKCkpO1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlci5zZXREZWxlZ2F0ZShwcm92aWRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBnbG9iYWwgdHJhY2VyIHByb3ZpZGVyLlxuICAgICAqL1xuICAgIFRyYWNlQVBJLnByb3RvdHlwZS5nZXRUcmFjZXJQcm92aWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEdsb2JhbChBUElfTkFNRSkgfHwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlcjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB0cmFjZXIgZnJvbSB0aGUgZ2xvYmFsIHRyYWNlciBwcm92aWRlci5cbiAgICAgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24gKG5hbWUsIHZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhY2VyUHJvdmlkZXIoKS5nZXRUcmFjZXIobmFtZSwgdmVyc2lvbik7XG4gICAgfTtcbiAgICAvKiogUmVtb3ZlIHRoZSBnbG9iYWwgdHJhY2VyIHByb3ZpZGVyICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHVucmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgICAgIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgUHJveHlUcmFjZXJQcm92aWRlcigpO1xuICAgIH07XG4gICAgcmV0dXJuIFRyYWNlQVBJO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIFNwbGl0IG1vZHVsZS1sZXZlbCB2YXJpYWJsZSBkZWZpbml0aW9uIGludG8gc2VwYXJhdGUgZmlsZXMgdG8gYWxsb3dcbi8vIHRyZWUtc2hha2luZyBvbiBlYWNoIGFwaSBpbnN0YW5jZS5cbi8qKiBFbnRyeXBvaW50IGZvciB0cmFjZSBBUEkgKi9cbnZhciB0cmFjZSA9IFRyYWNlQVBJLmdldEluc3RhbmNlKCk7XG5cbmNvbnN0IGNyZWF0ZUNERVNwYW4gPSBhc3luYyAoY2RlQ29ubiwgZGF0YSwgb3BlcmF0aW9uKSA9PiB7XG4gIGNvbnN0IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIik7XG4gIGNvbnN0IHBhcmVudENvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICBjb25zdCBzcGFuID0gdHJhY2VyLnN0YXJ0U3BhbihcbiAgICBgY2RlLiR7ZGF0YS50eXBlfWAsXG4gICAge1xuICAgICAga2luZDogU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBcIm1lc3NhZ2UudHlwZVwiOiBkYXRhLnR5cGUsXG4gICAgICAgIC4uLmNkZUNvbm4udHJhY2luZ0NvbnRleHQgJiYge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC52ZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LnJlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LnJlZmVycmVyXG4gICAgICAgIH0sXG4gICAgICAgIFwiY2RlLm1lc3NhZ2UudHlwZVwiOiBkYXRhLnR5cGUsXG4gICAgICAgIFwiY2RlLm1lc3NhZ2UucGF5bG9hZFwiOiBKU09OLnN0cmluZ2lmeShkYXRhLnBheWxvYWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBwYXJlbnRDb250ZXh0XG4gICk7XG4gIHJldHVybiBjb250ZXh0LndpdGgodHJhY2Uuc2V0U3BhbihwYXJlbnRDb250ZXh0LCBzcGFuKSwgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcGVyYXRpb24oKTtcbiAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICBtZXNzYWdlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzcGFuLmVuZCgpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgY3JlYXRlVHJhY2tpbmdTcGFuID0gYXN5bmMgKG9wdGlvbnMsIG9wZXJhdGlvbikgPT4ge1xuICBjb25zdCB0cmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICBjb25zdCBwYXJlbnRDb250ZXh0ID0gY29udGV4dC5hY3RpdmUoKTtcbiAgY29uc3Qgc3BhbiA9IHRyYWNlci5zdGFydFNwYW4oXG4gICAgYGZvcm0uJHtvcHRpb25zLnNwYW5OYW1lfWAsXG4gICAge1xuICAgICAga2luZDogU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IG9wdGlvbnMuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogb3B0aW9ucy5kZXZpY2VUb2tlbixcbiAgICAgICAgXCJvanMuZm9ybUlkXCI6IG9wdGlvbnMuZm9ybUlkLFxuICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IG9wdGlvbnMucmVsZWFzZVZlcnNpb24sXG4gICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IG9wdGlvbnMuYmFzZVVybCxcbiAgICAgICAgXCJvanMucmVmZXJyZXJcIjogb3B0aW9ucy5yZWZlcnJlcixcbiAgICAgICAgLi4ub3B0aW9ucy5wYXltZW50Um91dGVJZCAmJiB7IFwicGF5bWVudC5yb3V0ZV9pZFwiOiBvcHRpb25zLnBheW1lbnRSb3V0ZUlkIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcmVudENvbnRleHRcbiAgKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcGVyYXRpb24oKTtcbiAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZVxuICAgIH0pO1xuICAgIHRocm93IGVycm9yO1xuICB9IGZpbmFsbHkge1xuICAgIHNwYW4uZW5kKCk7XG4gIH1cbn07XG5cbmNsYXNzIENkZUVycm9yIGV4dGVuZHMgQ3VzdG9tRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgIGNvbnN0IGZyaWVuZGx5TWVzc2FnZSA9IGAke3Jlc3BvbnNlLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihmcmllbmRseU1lc3NhZ2UpO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgcXVlcnlDREUgPSBhc3luYyAoY2RlQ29ubiwgZGF0YSwgcmVzcG9uc2VTY2hlbWEsIHRyYWNraW5nS2V5KSA9PiB7XG4gIHJldHVybiBjcmVhdGVDREVTcGFuKGNkZUNvbm4sIGRhdGEsIGFzeW5jICgpID0+IHtcbiAgICBpZiAodHJhY2tpbmdLZXkpIHtcbiAgICAgIHRyYWNrKHRyYWNraW5nS2V5LCB7XG4gICAgICAgIC4uLmRhdGFcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNkZUNvbm4uc2VuZChkYXRhKTtcbiAgICBpZiAoaXNDREVSZXNwb25zZUVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgY29uc3QgY29ubmVjdGlvbiA9IG5hdmlnYXRvci5jb25uZWN0aW9uO1xuICAgICAgdHJhY2soXCJjZGVfcmVzcG9uc2VfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcl9tZXNzYWdlOiByZXNwb25zZS5tZXNzYWdlLFxuICAgICAgICBtZXNzYWdlX3R5cGU6IGRhdGEudHlwZSxcbiAgICAgICAgdXNlcl9hZ2VudDogbmF2aWdhdG9yLnVzZXJBZ2VudCxcbiAgICAgICAgb25saW5lOiBuYXZpZ2F0b3Iub25MaW5lLFxuICAgICAgICBoYXNfZm9jdXM6IGRvY3VtZW50Lmhhc0ZvY3VzKCksXG4gICAgICAgIGhyZWY6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgICBkb2N1bWVudF92aXNpYmlsaXR5X3N0YXRlOiBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUsXG4gICAgICAgIGNvbm5lY3Rpb25fZG93bmxpbms6IGNvbm5lY3Rpb24/LmRvd25saW5rLFxuICAgICAgICBjb25uZWN0aW9uX2VmZmVjdGl2ZV90eXBlOiBjb25uZWN0aW9uPy5lZmZlY3RpdmVUeXBlLFxuICAgICAgICBjb25uZWN0aW9uX3J0dDogY29ubmVjdGlvbj8ucnR0LFxuICAgICAgICBjb25uZWN0aW9uX3NhdmVfZGF0YTogY29ubmVjdGlvbj8uc2F2ZURhdGFcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IENkZUVycm9yKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgaWYgKCFjaGVja0lmQ29uZm9ybXNUb1NjaGVtYShyZXNwb25zZSwgcmVzcG9uc2VTY2hlbWEpKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZVNjaGVtYS5zYWZlUGFyc2UocmVzcG9uc2UpO1xuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpO1xuICAgICAgY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgcmVzcG9uc2VTY2hlbWEsIFwiQWN0dWFsOlwiLCByZXNwb25zZSk7XG4gICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgfVxuICAgIGlmICh0cmFja2luZ0tleSkge1xuICAgICAgdHJhY2sodHJhY2tpbmdLZXksIHtcbiAgICAgICAgLi4ucmVzcG9uc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0pO1xufTtcbmNvbnN0IGNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hID0gKHZhbHVlLCBzY2hlbWEpID0+IHtcbiAgcmV0dXJuIHNjaGVtYS5zYWZlUGFyc2UodmFsdWUpLnN1Y2Nlc3M7XG59O1xuY29uc3QgaXNDREVSZXNwb25zZUVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gIHJldHVybiBDREVSZXNwb25zZUVycm9yLnNhZmVQYXJzZShyZXNwb25zZSkuc3VjY2Vzcztcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXcgPSBhc3luYyAoY2RlQ29ubiwgcmVxdWVzdCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHJlcXVlc3QgfSwgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IGdldFByZWZpbGwgPSBhc3luYyAoY2RlQ29ubikgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIFBheW1lbnRGb3JtUHJlZmlsbCk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJ2Ml9zdGFydF9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZCB9LFxuICAgIFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcInN0YXJ0X3BheW1lbnRfZmxvd1wiXG4gICk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvckNDID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZCB9LFxuICAgIFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlLFxuICAgIFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiXG4gICk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvclBSID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgdHJhY2soXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHtcbiAgICAuLi5wYXlsb2FkXG4gIH0pO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gIHRyYWNrKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wcl9yZXN1bHRcIiwge1xuICAgIC4uLnJlc3VsdFxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5jb25zdCBjb25maXJtUGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZCB9LFxuICAgIENvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlLFxuICAgIFwiY29uZmlybV9wYXltZW50X2Zsb3dcIlxuICApO1xufTtcbmNvbnN0IGZpbmFsaXplU2V0dXBQYXltZW50TWV0aG9kID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQgfSxcbiAgICBTZXR1cENoZWNrb3V0UmVzcG9uc2UsXG4gICAgXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiXG4gICk7XG59O1xuY29uc3QgY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCIsIHBheWxvYWQgfSxcbiAgICBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlLFxuICAgIFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCJcbiAgKTtcbn07XG5jb25zdCBnZXRDaGVja291dFZhbHVlID0gYXN5bmMgKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBwcm9tb0NvZGUpID0+IHtcbiAgY29uc3QgY2hlY2tvdXRQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3KGNkZUNvbm4sIHtcbiAgICBzZWN1cmVfdG9rZW46IHNlY3VyZVRva2VuLFxuICAgIHByb21vdGlvbl9jb2RlOiBwcm9tb0NvZGVcbiAgfSk7XG4gIGNvbnN0IGN1cnJlbmNpZXMgPSBuZXcgU2V0KGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYuY3VycmVuY3kpKTtcbiAgaWYgKGN1cnJlbmNpZXMuc2l6ZSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke2N1cnJlbmNpZXMuc2l6ZX1gKTtcbiAgfVxuICBjb25zdCBjdXJyZW5jeSA9IGN1cnJlbmNpZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCI7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBzdW0oY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeSxcbiAgICBhbW91bnRBdG9tXG4gIH07XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50ID0gYXN5bmMgKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBpc1NldHVwTW9kZSwgcHJvbW9Db2RlKSA9PiB7XG4gIGlmIChpc1NldHVwTW9kZSkge1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIH0gZWxzZSB7XG4gICAgcHJvbW9Db2RlID0gIXByb21vQ29kZSA/IHZvaWQgMCA6IHByb21vQ29kZTtcbiAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKSAmJiAhcHJvbW9Db2RlKSB7XG4gICAgICBwcm9tb0NvZGUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwicHJvbW9Db2RlXCIpO1xuICAgIH1cbiAgICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFZhbHVlKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBwcm9tb0NvZGUpO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGNoZWNrb3V0UHJldmlldy5hbW91bnRBdG9tLCBjdXJyZW5jeTogY2hlY2tvdXRQcmV2aWV3LmN1cnJlbmN5IH07XG4gIH1cbn07XG5jb25zdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zID0gYXN5bmMgKGFsbENkZUNvbm5lY3Rpb25zLCBwYXlsb2FkKSA9PiB7XG4gIGlmIChhbGxDZGVDb25uZWN0aW9ucy5zaXplID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oYWxsQ2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpLm1hcChcbiAgICAgIChjZGVDb25uKSA9PiBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkIH0sIFRva2VuaXplQ2FyZFJlc3BvbnNlKVxuICAgIClcbiAgKTtcbiAgcmV0dXJuIHJlc3BvbnNlcztcbn07XG5jb25zdCBjaGVja291dENhcmRFbGVtZW50cyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQgfSxcbiAgICBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSxcbiAgICBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIlxuICApO1xufTtcbmNvbnN0IHNldHVwQ2hlY2tvdXQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInNldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQgfSwgU2V0dXBDaGVja291dFJlc3BvbnNlLCBcInNldHVwX2NoZWNrb3V0XCIpO1xufTtcbmNvbnN0IHBlcmZvcm1DaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSwgXCJwZXJmb3JtX2NoZWNrb3V0XCIpO1xufTtcbmNvbnN0IENERV9QT0xMSU5HX0lOVEVSVkFMID0gMWUzO1xuY29uc3QgcGluZ0NkZUZvclN0YXR1cyA9IGFzeW5jIChpZnJhbWUsIGNoaWxkT3JpZ2luLCB0eXBlLCByZXNwb25zZU1vZGVsKSA9PiB7XG4gIGNvbnNvbGUubG9nKGNoaWxkT3JpZ2luKTtcbiAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWUsXG4gICAgZGVidWc6IHRydWUsXG4gICAgdGltZW91dDogQ0RFX1BPTExJTkdfSU5URVJWQUwsXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pO1xuICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBxdWVyeUNERShjb25uZWN0aW9uT2JqLCB7IHR5cGUgfSwgcmVzcG9uc2VNb2RlbCk7XG4gIGNvbnNvbGUubG9nKFwi8J+foiBDREUgY29ubmVjdGlvbiBzdWNjZXNzZnVsISBTdG9wcGluZyBwb2xsaW5nLi4uIFJlc3VsdDpcIiwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5jb25zdCBwcmVwYXJlUGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZCB9LFxuICAgIFByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLFxuICAgIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuICApO1xufTtcbmNvbnN0IHNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZSA9IGFzeW5jIChjZGVDb25uLCBlcnJvck1lc3NhZ2UpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkID0geyBtZXNzYWdlOiBlcnJvck1lc3NhZ2UgfTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHF1ZXJ5Q0RFKFxuICAgICAgY2RlQ29ubixcbiAgICAgIHsgdHlwZTogXCJnZXRfc3RhbmRhcmRpemVkX2Vycm9yX2NvZGVcIiwgcGF5bG9hZCB9LFxuICAgICAgQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2VcbiAgICApO1xuICAgIHJldHVybiByZXNwb25zZS5lcnJvcl9jb2RlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbY2RlLWNsaWVudF0gRXJyb3IgZHVyaW5nIGdldFN0YW5kYXJkaXplZEVycm9yQ29kZTpcIiwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgcmV0dXJuIFwiUEFZTUVOVF9GQUlMRURfR0VORVJJQ1wiO1xuICB9XG59O1xuY29uc3Qgc2V0VXNlckRldmljZVRva2VuID0gYXN5bmMgKGNkZUNvbm4sIGRldmljZVRva2VuKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJzZXRfdXNlcl9kZXZpY2VfdG9rZW5cIiwgcGF5bG9hZDogeyBkZXZpY2VfdG9rZW46IGRldmljZVRva2VuIH0gfSxcbiAgICBTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZVxuICApO1xufTtcblxuY29uc3QgY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdCA9IGFzeW5jIChvYmopID0+IHtcbiAgaWYgKHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgfHwgIW9iaikgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0IHBpbmcgPSB7IHR5cGU6IFwicGluZ1wiIH07XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb2JqLnNlbmQocGluZyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIENERSBjb25uZWN0aW9uIGNoZWNrOmAsIGUpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGlzUmVzdWx0VmFsaWQgPSAob2JqLCBpc1ZhbGlkKSA9PiB7XG4gIHJldHVybiAhIW9iaiAmJiBpc1ZhbGlkO1xufTtcblxuY29uc3QgRlJBTUVfQkFTRV9VUkwgPSBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCI7XG5cbi8vIFRoZXNlIHZhbHVlcyBzaG91bGQgTkVWRVIgY2hhbmdlLiBUaGUgdmFsdWVzIGFyZSBwcmVjaXNlbHkgZm9yXG4vLyBnZW5lcmF0aW5nIFVMSURzLlxuY29uc3QgRU5DT0RJTkcgPSBcIjAxMjM0NTY3ODlBQkNERUZHSEpLTU5QUVJTVFZXWFlaXCI7IC8vIENyb2NrZm9yZCdzIEJhc2UzMlxuY29uc3QgRU5DT0RJTkdfTEVOID0gMzI7IC8vIGZyb20gRU5DT0RJTkcubGVuZ3RoO1xuY29uc3QgUkFORE9NX0xFTiA9IDE2O1xuY29uc3QgVElNRV9MRU4gPSAxMDtcbmNvbnN0IFRJTUVfTUFYID0gMjgxNDc0OTc2NzEwNjU1OyAvLyBmcm9tIE1hdGgucG93KDIsIDQ4KSAtIDE7XG5cbnZhciBVTElERXJyb3JDb2RlO1xuKGZ1bmN0aW9uIChVTElERXJyb3JDb2RlKSB7XG4gICAgVUxJREVycm9yQ29kZVtcIkJhc2UzMkluY29ycmVjdEVuY29kaW5nXCJdID0gXCJCMzJfRU5DX0lOVkFMSURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiRGVjb2RlVGltZUludmFsaWRDaGFyYWN0ZXJcIl0gPSBcIkRFQ19USU1FX0NIQVJcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiRGVjb2RlVGltZVZhbHVlTWFsZm9ybWVkXCJdID0gXCJERUNfVElNRV9NQUxGT1JNRURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiRW5jb2RlVGltZU5lZ2F0aXZlXCJdID0gXCJFTkNfVElNRV9ORUdcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiRW5jb2RlVGltZVNpemVFeGNlZWRlZFwiXSA9IFwiRU5DX1RJTUVfU0laRV9FWENFRURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkXCJdID0gXCJFTkNfVElNRV9NQUxGT1JNRURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiUFJOR0RldGVjdEZhaWx1cmVcIl0gPSBcIlBSTkdfREVURUNUXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlVMSURJbnZhbGlkXCJdID0gXCJVTElEX0lOVkFMSURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiVW5leHBlY3RlZFwiXSA9IFwiVU5FWFBFQ1RFRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJVVUlESW52YWxpZFwiXSA9IFwiVVVJRF9JTlZBTElEXCI7XG59KShVTElERXJyb3JDb2RlIHx8IChVTElERXJyb3JDb2RlID0ge30pKTtcbmNsYXNzIFVMSURFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvckNvZGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIoYCR7bWVzc2FnZX0gKCR7ZXJyb3JDb2RlfSlgKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJVTElERXJyb3JcIjtcbiAgICAgICAgdGhpcy5jb2RlID0gZXJyb3JDb2RlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmFuZG9tQ2hhcihwcm5nKSB7XG4gICAgLy8gQ3VycmVudGx5IFBSTkdzIGdlbmVyYXRlIGZyYWN0aW9ucyBmcm9tIDAgdG8gX2xlc3MgdGhhbl8gMSwgc28gbm8gXCIlXCIgaXMgbmVjZXNzYXJ5LlxuICAgIC8vIEhvd2V2ZXIsIGp1c3QgaW4gY2FzZSBhIGZ1dHVyZSBQUk5HIGNhbiBnZW5lcmF0ZSAxLFxuICAgIC8vIHdlIGFyZSBhcHBseWluZyBcIiUgRU5DT0RJTkcgTEVOXCIgdG8gd3JhcCBiYWNrIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXJcbiAgICBjb25zdCByYW5kb21Qb3NpdGlvbiA9IE1hdGguZmxvb3IocHJuZygpICogRU5DT0RJTkdfTEVOKSAlIEVOQ09ESU5HX0xFTjtcbiAgICByZXR1cm4gRU5DT0RJTkcuY2hhckF0KHJhbmRvbVBvc2l0aW9uKTtcbn1cbi8qKlxuICogRGV0ZWN0IHRoZSBiZXN0IFBSTkcgKHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcilcbiAqIEBwYXJhbSByb290IFRoZSByb290IHRvIGNoZWNrIGZyb20gKGdsb2JhbC93aW5kb3cpXG4gKiBAcmV0dXJucyBUaGUgUFJORyBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBkZXRlY3RQUk5HKHJvb3QpIHtcbiAgICBjb25zdCByb290TG9va3VwID0gZGV0ZWN0Um9vdCgpO1xuICAgIGNvbnN0IGdsb2JhbENyeXB0byA9IChyb290TG9va3VwICYmIChyb290TG9va3VwLmNyeXB0byB8fCByb290TG9va3VwLm1zQ3J5cHRvKSkgfHxcbiAgICAgICAgKG51bGwpO1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsQ3J5cHRvPy5nZXRSYW5kb21WYWx1ZXMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMSk7XG4gICAgICAgICAgICBnbG9iYWxDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGJ1ZmZlcik7XG4gICAgICAgICAgICByZXR1cm4gYnVmZmVyWzBdIC8gMHhmZjtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGdsb2JhbENyeXB0bz8ucmFuZG9tQnl0ZXMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gKCkgPT4gZ2xvYmFsQ3J5cHRvLnJhbmRvbUJ5dGVzKDEpLnJlYWRVSW50OCgpIC8gMHhmZjtcbiAgICB9XG4gICAgZWxzZSA7XG4gICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLlBSTkdEZXRlY3RGYWlsdXJlLCBcIkZhaWxlZCB0byBmaW5kIGEgcmVsaWFibGUgUFJOR1wiKTtcbn1cbmZ1bmN0aW9uIGRldGVjdFJvb3QoKSB7XG4gICAgaWYgKGluV2ViV29ya2VyKCkpXG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gZ2xvYmFsVGhpcztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBlbmNvZGVSYW5kb20obGVuLCBwcm5nKSB7XG4gICAgbGV0IHN0ciA9IFwiXCI7XG4gICAgZm9yICg7IGxlbiA+IDA7IGxlbi0tKSB7XG4gICAgICAgIHN0ciA9IHJhbmRvbUNoYXIocHJuZykgKyBzdHI7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG4vKipcbiAqIEVuY29kZSB0aGUgdGltZSBwb3J0aW9uIG9mIGEgVUxJRFxuICogQHBhcmFtIG5vdyBUaGUgY3VycmVudCB0aW1lc3RhbXBcbiAqIEBwYXJhbSBsZW4gTGVuZ3RoIHRvIGdlbmVyYXRlXG4gKiBAcmV0dXJucyBUaGUgZW5jb2RlZCB0aW1lXG4gKi9cbmZ1bmN0aW9uIGVuY29kZVRpbWUobm93LCBsZW4gPSBUSU1FX0xFTikge1xuICAgIGlmIChpc05hTihub3cpKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYSBudW1iZXI6ICR7bm93fWApO1xuICAgIH1cbiAgICBlbHNlIGlmIChub3cgPiBUSU1FX01BWCkge1xuICAgICAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuRW5jb2RlVGltZVNpemVFeGNlZWRlZCwgYENhbm5vdCBlbmNvZGUgYSB0aW1lIGxhcmdlciB0aGFuICR7VElNRV9NQVh9OiAke25vd31gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm93IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuRW5jb2RlVGltZU5lZ2F0aXZlLCBgVGltZSBtdXN0IGJlIHBvc2l0aXZlOiAke25vd31gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoTnVtYmVyLmlzSW50ZWdlcihub3cpID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGFuIGludGVnZXI6ICR7bm93fWApO1xuICAgIH1cbiAgICBsZXQgbW9kLCBzdHIgPSBcIlwiO1xuICAgIGZvciAobGV0IGN1cnJlbnRMZW4gPSBsZW47IGN1cnJlbnRMZW4gPiAwOyBjdXJyZW50TGVuLS0pIHtcbiAgICAgICAgbW9kID0gbm93ICUgRU5DT0RJTkdfTEVOO1xuICAgICAgICBzdHIgPSBFTkNPRElORy5jaGFyQXQobW9kKSArIHN0cjtcbiAgICAgICAgbm93ID0gKG5vdyAtIG1vZCkgLyBFTkNPRElOR19MRU47XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5mdW5jdGlvbiBpbldlYldvcmtlcigpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGU7XG59XG4vKipcbiAqIEdlbmVyYXRlIGEgVUxJRFxuICogQHBhcmFtIHNlZWRUaW1lIE9wdGlvbmFsIHRpbWUgc2VlZFxuICogQHBhcmFtIHBybmcgT3B0aW9uYWwgUFJORyBmdW5jdGlvblxuICogQHJldHVybnMgQSBVTElEIHN0cmluZ1xuICogQGV4YW1wbGVcbiAqICB1bGlkKCk7IC8vIFwiMDFITlpYRDA3TTVDRU41WEE2NkVNWlNSWldcIlxuICovXG5mdW5jdGlvbiB1bGlkKHNlZWRUaW1lLCBwcm5nKSB7XG4gICAgY29uc3QgY3VycmVudFBSTkcgPSBkZXRlY3RQUk5HKCk7XG4gICAgY29uc3Qgc2VlZCA9IERhdGUubm93KCkgO1xuICAgIHJldHVybiBlbmNvZGVUaW1lKHNlZWQsIFRJTUVfTEVOKSArIGVuY29kZVJhbmRvbShSQU5ET01fTEVOLCBjdXJyZW50UFJORyk7XG59XG5cbmNvbnN0IENPT0tJRV9OQU1FID0gXCJvcF9hbmFseXRpY3NfZGV2aWNlX3Rva2VuXCI7XG5jb25zdCBnZXREZXZpY2VUb2tlbiA9ICgpID0+IHtcbiAgY29uc3QgZXhpc3RpbmdDb29raWUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpLmZpbmQoKGNvb2tpZSkgPT4gY29va2llLmluY2x1ZGVzKENPT0tJRV9OQU1FKSk7XG4gIGlmIChleGlzdGluZ0Nvb2tpZSkge1xuICAgIHJldHVybiBleGlzdGluZ0Nvb2tpZS5zcGxpdChcIj1cIilbMV07XG4gIH1cbiAgY29uc3QgdG9rZW4gPSB1bGlkKCk7XG4gIHNldERldmljZVRva2VuKHRva2VuKTtcbiAgcmV0dXJuIHRva2VuO1xufTtcbmNvbnN0IHNldERldmljZVRva2VuID0gKHRva2VuKSA9PiB7XG4gIGNvbnN0IG9uZVllYXJGcm9tTm93ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gIG9uZVllYXJGcm9tTm93LnNldEZ1bGxZZWFyKG9uZVllYXJGcm9tTm93LmdldEZ1bGxZZWFyKCkgKyAxKTtcbiAgZG9jdW1lbnQuY29va2llID0gYCR7Q09PS0lFX05BTUV9PSR7dG9rZW59OyBwYXRoPS87IGV4cGlyZXM9JHtvbmVZZWFyRnJvbU5vdy50b1VUQ1N0cmluZygpfWA7XG59O1xuXG5jb25zdCBleHRyYWN0SXNzdWVzUGVyRmllbGQgPSAoZXJyb3IpID0+IHtcbiAgY29uc3QgaXNzdWVzUGVyRmllbGQgPSB7fTtcbiAgT2JqZWN0LmVudHJpZXMoZXJyb3IpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBGaWVsZE5hbWVFbnVtLnBhcnNlKGtleSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLl9lcnJvcnMpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZS5fZXJyb3JzO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc3N1ZXNQZXJGaWVsZDtcbn07XG5cbmNvbnN0IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSA9IChmb3JtRGl2LCBpbml0aWFsRGljdCkgPT4ge1xuICBjb25zdCBpbmNsdWRlZElucHV0cyA9IEFycmF5LmZyb20oZm9ybURpdi5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pO1xuICBjb25zdCBleHRyYURhdGEgPSBpbmNsdWRlZElucHV0cy5yZWR1Y2UoKGFjYywgaW5wdXQpID0+IHtcbiAgICBjb25zdCBrZXkgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gICAgaWYgKCFrZXkpIHJldHVybiBhY2M7XG4gICAgY29uc3QgdmFsdWUgPSBpbnB1dC50eXBlID09PSBcImNoZWNrYm94XCIgPyBpbnB1dC5jaGVja2VkIDogaW5wdXQudmFsdWU7XG4gICAgcmV0dXJuIHsgLi4uYWNjLCBba2V5XTogdmFsdWUgfTtcbiAgfSwge30pO1xuICByZXR1cm4gZXh0cmFEYXRhO1xufTtcbmNvbnN0IHBhcnNlRXZlbnRQYXlsb2FkID0gKGV2ZW50RGF0YSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBFbGVtZW50RXZlbnQucGFyc2UoZXZlbnREYXRhKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCBldmVudERhdGEsIGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuY29uc3QgZ2VuZXJhdGVBbm9ueW1vdXNWYWx1ZXMgPSAoKSA9PiB7XG4gIGNvbnN0IGlkID0gdjQoKS5zcGxpdChcIi1cIilbMF07XG4gIHJldHVybiB7XG4gICAgZmlyc3ROYW1lOiBgeHhfJHtpZH1gLFxuICAgIGxhc3ROYW1lOiBgeHhfJHtpZH1gLFxuICAgIGVtYWlsOiBgeHhfJHtpZH1AZW1haWwuY29tYCxcbiAgICB6aXBDb2RlOiBgeHhfJHtpZH1gLFxuICAgIGNvdW50cnk6IGBVU2BcbiAgfTtcbn07XG5jb25zdCBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyA9IChmaWVsZHMpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBsaW5lMTogZmllbGRzW0ZpZWxkTmFtZS5MSU5FMV0sXG4gICAgbGluZTI6IGZpZWxkc1tGaWVsZE5hbWUuTElORTJdLFxuICAgIGxpbmUzOiBmaWVsZHNbRmllbGROYW1lLkxJTkUzXSxcbiAgICBjaXR5OiBmaWVsZHNbRmllbGROYW1lLkNJVFldLFxuICAgIHN0YXRlOiBmaWVsZHNbRmllbGROYW1lLlNUQVRFXSxcbiAgICBjb3VudHJ5OiBmaWVsZHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgIHppcF9jb2RlOiBmaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXVxuICB9O1xufTtcbmNvbnN0IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyA9IChmaWVsZHMsIGNoZWNrb3V0X3NldHRpbmdzKSA9PiB7XG4gIGlmICghY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MpIHJldHVybjtcbiAgcmV0dXJuIHtcbiAgICBsaW5lMTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0sXG4gICAgbGluZTI6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdLFxuICAgIGxpbmUzOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSxcbiAgICBjaXR5OiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldLFxuICAgIHN0YXRlOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSxcbiAgICBjb3VudHJ5OiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldLFxuICAgIHppcF9jb2RlOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXVxuICB9O1xufTtcbmNvbnN0IGdldEZ1bGxOYW1lID0gKGZpcnN0TmFtZSwgbGFzdE5hbWUpID0+IHtcbiAgcmV0dXJuIFtmaXJzdE5hbWUsIGxhc3ROYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG59O1xuXG5jb25zdCBzdHlsZXMgPSAoeyB3aWR0aCwgaGVpZ2h0IH0pID0+IGBcbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuXG4ub3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ4ICFpbXBvcnRhbnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG4uY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAke3dpZHRoID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7aGVpZ2h0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGFuaW1hdGlvbjogZmFkZUluIDAuM3MgZWFzZS1vdXQ7XG59XG4uZnJhbWUsICNhZHllbi1jb250YWluZXIsICNhZHllbi1jb250YWluZXIgPiAqIHtcbiAgbWF4LXdpZHRoOiAke3dpZHRoID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7aGVpZ2h0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlcjogbm9uZTtcbn1cbi5jYW5jZWwtYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LXNpemU6IDFyZW07XG4gIGNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRvcDogLTEuNXJlbTtcbiAgcGFkZGluZzogMDtcbiAgcmlnaHQ6IDA7XG59XG5gO1xuY29uc3QgYmFua1NlbGVjdG9yU3R5bGVzID0gKHsgd2lkdGgsIGhlaWdodCB9KSA9PiBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogJHt3aWR0aCA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke2hlaWdodCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYW5pbWF0aW9uOiBmYWRlSW4gMC4zcyBlYXNlLW91dDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBib3gtc2hhZG93OiAwIDEwcHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG4uYmFuay1zZWxlY3Rvci1jb250ZW50IHtcbiAgcGFkZGluZzogMjRweDtcbiAgbWF4LWhlaWdodDogY2FsYygke2hlaWdodCA/PyBcIjYwMHB4XCJ9IC0gNDhweCk7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG4uYmFuay1zZWxlY3Rvci1oZWFkZXIge1xuICBmb250LXNpemU6IDEuMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGNvbG9yOiAjMWExYTFhO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uYmFuay1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAxMnB4O1xufVxuLmJhbmstaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNWU1ZTU7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xufVxuLmJhbmstaXRlbTpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogIzNiODJmNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmFmYztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xuICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5iYW5rLWl0ZW06YWN0aXZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xufVxuLmJhbmstbG9nbyB7XG4gIHdpZHRoOiA0MHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTllY2VmO1xufVxuLmJhbmstbG9nby1wbGFjZWhvbGRlciB7XG4gIHdpZHRoOiA0MHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiAgY29sb3I6ICM2Yzc1N2Q7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG4uYmFuay1pbmZvIHtcbiAgZmxleDogMTtcbn1cbi5iYW5rLWRpc3BsYXktbmFtZSB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICMxYTFhMWE7XG4gIG1hcmdpbi1ib3R0b206IDJweDtcbn1cbi5iYW5rLW5hbWUge1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBjb2xvcjogIzZjNzU3ZDtcbn1cbi5jYW5jZWwtYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LXNpemU6IDFyZW07XG4gIGNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRvcDogLTEuNXJlbTtcbiAgcGFkZGluZzogMDtcbiAgcmlnaHQ6IDA7XG59XG5gO1xuY29uc3QgY3JlYXRlQW5kT3BlbkZyYW1lID0gKHVybCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7IGlkLCB0aXRsZSwgd2lkdGgsIGhlaWdodCwgbmFtZSB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gIHRlbXBsYXRlLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke3N0eWxlcyh7IHdpZHRoLCBoZWlnaHQgfSl9XG4gICAgPC9zdHlsZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8aWZyYW1lIHNyYz1cIiR7dXJsfVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cIiR7aWQgPz8gXCJ0aHJlZS1kcy1pZnJhbWVcIn1cIiB0aXRsZT1cIiR7dGl0bGUgPz8gXCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCJ9XCIgYWxsb3c9XCJwYXltZW50XCIgbmFtZT1cIiR7bmFtZSA/PyBcInRocmVlLWRzLWlmcmFtZVwifVwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gIGNvbnN0IGlmcmFtZSA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIik7XG4gIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICByZXR1cm4geyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9O1xufTtcbmNvbnN0IGNyZWF0ZUFuZE9wZW5CYW5rU2VsZWN0b3IgPSAoYmFua3MsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB0aXRsZSB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICBjb25zdCBiYW5rTGlzdEh0bWwgPSBiYW5rcy5tYXAoKGJhbmssIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBsb2dvSHRtbCA9IGJhbmsucmVzb3VyY2VzLmxvZ29fdXJsID8gYDxpbWcgc3JjPVwiJHtiYW5rLnJlc291cmNlcy5sb2dvX3VybH1cIiBhbHQ9XCIke2JhbmsuZGlzcGxheV9uYW1lfVwiIGNsYXNzPVwiYmFuay1sb2dvXCIgLz5gIDogYDxkaXYgY2xhc3M9XCJiYW5rLWxvZ28tcGxhY2Vob2xkZXJcIj4ke2JhbmsuZGlzcGxheV9uYW1lLnN1YnN0cmluZygwLCAyKS50b1VwcGVyQ2FzZSgpfTwvZGl2PmA7XG4gICAgICByZXR1cm4gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pdGVtXCIgZGF0YS1iYW5rLWluZGV4PVwiJHtpbmRleH1cIj5cbiAgICAgICAgICAke2xvZ29IdG1sfVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWluZm9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWRpc3BsYXktbmFtZVwiPiR7YmFuay5kaXNwbGF5X25hbWV9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1uYW1lXCI+JHtiYW5rLmJhbmtfbmFtZX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgIH0pLmpvaW4oXCJcIik7XG4gICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgICAgPHN0eWxlPlxuICAgICAgICAke2JhbmtTZWxlY3RvclN0eWxlcyh7IHdpZHRoLCBoZWlnaHQgfSl9XG4gICAgICA8L3N0eWxlPlxuICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstc2VsZWN0b3ItY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstc2VsZWN0b3ItaGVhZGVyXCI+JHt0aXRsZSA/PyBcIlNlbGVjdCB5b3VyIGJhbmtcIn08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWxpc3RcIj5cbiAgICAgICAgICAgICAgJHtiYW5rTGlzdEh0bWx9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICAgIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBob3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICAgIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICAgIGNvbnN0IGJhbmtJdGVtcyA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcIi5iYW5rLWl0ZW1cIik7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaG9zdCk7XG4gICAgfTtcbiAgICBjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIikpO1xuICAgIH0pO1xuICAgIGJhbmtJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIHJlc29sdmUoYmFua3NbaW5kZXhdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdCk7XG4gIH0pO1xufTtcbmNvbnN0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtID0gKHBheW1lbnRNZXRob2RUeXBlLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgYmFzZVVybCB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChgYXBwL2RpcmVjdF9kZWJpdC9taWNyb19kZXBvc2l0Lz90eXBlPSR7cGF5bWVudE1ldGhvZFR5cGV9YCwgYmFzZVVybCkudG9TdHJpbmcoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBlbGVtZW50cyA9IGNyZWF0ZUFuZE9wZW5GcmFtZSh1cmwsIHsgd2lkdGgsIGhlaWdodCwgdGl0bGU6IFwiTWljcm8gRGVwb3NpdCBGb3JtXCIgfSk7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKSk7XG4gICAgfTtcbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAocmVzcG9uc2UpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IFwic3VjY2Vzc1wiICYmIHJlc3BvbnNlLnBheWxvYWQpIHtcbiAgICAgICAgaWYgKFwiZXJyb3JcIiBpbiByZXNwb25zZS5wYXlsb2FkKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihyZXNwb25zZS5wYXlsb2FkLmVycm9yKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5wYXlsb2FkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBmYWlsZWRcIikpO1xuICAgICAgfVxuICAgIH07XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHN0YXJ0UG9sbGluZyhcbiAgICAgIGVsZW1lbnRzLmlmcmFtZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG5ldyBVUkwoYmFzZVVybCkub3JpZ2luLFxuICAgICAgXCJtaWNyby1kZXBvc2l0LXN0YXR1c1wiLFxuICAgICAgTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2VcbiAgICApO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9ICgpID0+IHtcbiAgICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICB9O1xuICAgIGNvbnN0IG9yaWdpbmFsSGFuZGxlQ2FuY2VsID0gaGFuZGxlQ2FuY2VsO1xuICAgIGNvbnN0IHdyYXBwZWRIYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgIG9yaWdpbmFsSGFuZGxlQ2FuY2VsKCk7XG4gICAgfTtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB3cmFwcGVkSGFuZGxlQ2FuY2VsKTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBzdGFydFBvbGxpbmcoaWZyYW1lLCBvblN1Y2Nlc3MsIGNoaWxkT3JpZ2luLCB0eXBlLCByZXNwb25zZU1vZGVsKSB7XG4gIGNvbnN0IGhhbmRsZVBvbGxpbmcgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHBpbmdDZGVGb3JTdGF0dXMoaWZyYW1lLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCk7XG4gICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICAgICAgb25TdWNjZXNzKHN0YXR1cyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB9XG4gIH07XG4gIGhhbmRsZVBvbGxpbmcoKTtcbiAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwoaGFuZGxlUG9sbGluZywgQ0RFX1BPTExJTkdfSU5URVJWQUwpO1xuICByZXR1cm4gcG9sbGluZ0ludGVydmFsO1xufVxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzKHtcbiAgZWxlbWVudHMsXG4gIHBvbGxpbmdJbnRlcnZhbCxcbiAgcmVzb2x2ZVxufSkge1xuICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgY29uc3QgY2xlYW51cEV2ZW50TGlzdGVuZXJzID0gKCkgPT4ge1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgfTtcbiAgcmV0dXJuIGNsZWFudXBFdmVudExpc3RlbmVycztcbn1cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHBhcmFtcykge1xuICBjb25zdCB7IHVybCwgYmFzZVVybCwgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIGZyYW1lVGl0bGUgfSA9IHBhcmFtcztcbiAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsLCB7IHdpZHRoOiBmcmFtZVdpZHRoLCBoZWlnaHQ6IGZyYW1lSGVpZ2h0LCB0aXRsZTogZnJhbWVUaXRsZSB9KTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHN0YXR1cykgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpO1xuICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgY2xlYW51cEV2ZW50TGlzdGVuZXJzPy4oKTtcbiAgICB9O1xuICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHN0YXJ0UG9sbGluZyhcbiAgICAgIGVsZW1lbnRzLmlmcmFtZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG5ldyBVUkwoYmFzZVVybCkub3JpZ2luLFxuICAgICAgXCJwaW5nLTNkcy1zdGF0dXNcIixcbiAgICAgIFBpbmczRFNTdGF0dXNSZXNwb25zZVxuICAgICk7XG4gICAgY29uc3QgY2xlYW51cEV2ZW50TGlzdGVuZXJzID0gaGFuZGxlRXZlbnRzKHtcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgcG9sbGluZ0ludGVydmFsLFxuICAgICAgcmVzb2x2ZVxuICAgIH0pO1xuICB9KTtcbn1cbmNvbnN0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0ID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbihwYXJhbXMpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzICE9PSBUaHJlZURTU3RhdHVzLlNVQ0NFU1MpIHtcbiAgICBhc3NlcnROZXZlcihyZXN1bHQuc3RhdHVzKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGhyZWY6IHJlc3VsdC5ocmVmXG4gIH07XG59O1xuY29uc3Qgb3BlblBvcHVwV2luZG93ID0gKHBvcHVwTmFtZSwgdXJsKSA9PiB7XG4gIGNvbnN0IHBvcHVwV2luZG93ID0gd2luZG93Lm9wZW4odXJsLCBcIl9ibGFua1wiKTtcbiAgaWYgKCFwb3B1cFdpbmRvdykge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtwb3B1cE5hbWV9IHBvcHVwIHdpbmRvdyBibG9ja2VkLiBQbGVhc2UgYWxsb3cgcG9wdXBzIGZvciB0aGlzIHNpdGUuYCk7XG4gIH1cbiAgcmV0dXJuIHBvcHVwV2luZG93O1xufTtcbmNvbnN0IHN0YXJ0UG9wdXBXaW5kb3dWZXJpZmljYXRpb25TdHJpY3QgPSBhc3luYyAocG9wdXBOYW1lLCBjZGVDb25uLCBleHBlY3RlZFZlcmlmeVRva2VuLCB1cmwpID0+IHtcbiAgY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcG9wdXBXaW5kb3cgPSBvcGVuUG9wdXBXaW5kb3cocG9wdXBOYW1lLCB1cmwpO1xuICAgIGNvbnN0IHBvbGxpbmcgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB2ZXJpZnlSZXN1bHQgPSBhd2FpdCBjaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZChjZGVDb25uLCBleHBlY3RlZFZlcmlmeVRva2VuKTtcbiAgICAgICAgaWYgKHZlcmlmeVJlc3VsdC5wcmVzZW50KSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nKTtcbiAgICAgICAgICBwb3B1cFdpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgIHJlc29sdmUoeyBocmVmOiB2ZXJpZnlSZXN1bHQuaHJlZiB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChwb3B1cFdpbmRvdy5jbG9zZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyhnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nKTtcbiAgICAgICAgcmVqZWN0KGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufTtcblxuY29uc3QgZGV0ZWN0TGFuZ3VhZ2UgPSAoKSA9PiB7XG4gIGNvbnN0IGxhbmd1YWdlcyA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzIDogW25hdmlnYXRvci5sYW5ndWFnZV07XG4gIGxldCBsYW5ndWFnZSA9IGxhbmd1YWdlcz8uWzBdO1xuICBpZiAobGFuZ3VhZ2UpIHtcbiAgICBsYW5ndWFnZSA9IGxhbmd1YWdlLnNwbGl0KFwiLVwiKVswXTtcbiAgfVxuICByZXR1cm4gbGFuZ3VhZ2U7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyR3LCBlcnJfXzogZXJyX18kdyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSA9ICh7XG4gIHJlcXVpcmVfemlwX2NvZGUsXG4gIHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MsXG4gIHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzLFxuICBwYXltZW50X21ldGhvZCxcbiAgaXNCdXNpbmVzc1B1cmNoYXNlXG59LCBub25DZGVGb3JtSW5wdXRzKSA9PiB7XG4gIGNvbnN0IGNvbmRpdGlvbmFsRmllbGRzID0ge307XG4gIGlmIChwYXltZW50X21ldGhvZCA9PT0gXCJhY2hcIikge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IHouc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSB6LnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICB9XG4gIGlmIChyZXF1aXJlX3ppcF9jb2RlKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkxJTkUxXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5DSVRZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TVEFURV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX0JVU0lORVNTX1BVUkNIQVNFXSA/PyBpc0J1c2luZXNzUHVyY2hhc2UpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQlVTSU5FU1NfTkFNRV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAoT2JqZWN0LmtleXMoY29uZGl0aW9uYWxGaWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHM7XG4gIH1cbiAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcy5leHRlbmQoY29uZGl0aW9uYWxGaWVsZHMpO1xufTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvciwgZGVmYXVsdEZpZWxkVmFsdWVzID0ge30pID0+IHtcbiAgaWYgKGRlZmF1bHRGaWVsZFZhbHVlcykge1xuICAgIGxvZ19fJHcoYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWVsZFZhbHVlcyl9YCk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZmF1bHRGaWVsZFZhbHVlcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgY29uc3QgdmFsdWUgPSBkZWZhdWx0RmllbGRWYWx1ZXNba2V5XTtcbiAgICAgIGlmICghbm9uQ2RlRm9ybUlucHV0c1trZXldKSB7XG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddID0gISFub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddO1xuICBpZiAobm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSkge1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUxXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTNdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ0lUWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU1RBVEVdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdO1xuICB9XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYShkZWZhdWx0RmllbGRWYWx1ZXMsIG5vbkNkZUZvcm1JbnB1dHMpO1xuICBjb25zdCByZXN1bHQgPSB2YWxpZGF0aW9uU2NoZW1hLnNhZmVQYXJzZShub25DZGVGb3JtSW5wdXRzKTtcbiAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHJlc3VsdC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBjb25zdCBpc3N1ZUtleXMgPSBPYmplY3Qua2V5cyhpc3N1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXNzdWVLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBpc3N1ZUtleXNbaV07XG4gICAgICBjb25zdCBlcnJvcnMgPSBpc3N1ZXNbZmllbGROYW1lXTtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyR3KFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbG1vc3QgdGhlcmUhIEp1c3QgYSBmZXcgdGhpbmdzIGhpZ2hsaWdodGVkIGFib3ZlIHRvIGZpeCBiZWZvcmUgeW91IGNhbiBzdWJtaXQuXCIpO1xuICB9XG4gIHJldHVybiByZXN1bHQuZGF0YTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHYsIGVycl9fOiBlcnJfXyR2IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzO1xuY29uc3QgdmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzID0gKHRva2VuaXplUmVzdWx0cywgb25WYWxpZGF0aW9uRXJyb3IpID0+IHtcbiAgZm9yIChjb25zdCB0b2tlbml6ZVJlc3VsdCBvZiB0b2tlbml6ZVJlc3VsdHMpIHtcbiAgICBpZiAodG9rZW5pemVSZXN1bHQuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgIHRva2VuaXplUmVzdWx0LmVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBBbGxGaWVsZE5hbWVzLnNhZmVQYXJzZShlcnJvci5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBlcnJfXyR2KGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7ZXJyb3IuZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHBhcnNlZC5kYXRhO1xuICAgICAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3IuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyR2KGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeSh0b2tlbml6ZVJlc3VsdC5lcnJvcnMpfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IHsgZXJyX186IGVycl9fJHUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uXCIpO1xuY29uc3QgcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke3Jlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIH1cbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufTtcbmNvbnN0IGZpbmRDcG1NYXRjaGluZ1R5cGUgPSAoYWxsQ1BNcywgem9kTW9kZWwpID0+IHtcbiAgY29uc3QgY3BtID0gYWxsQ1BNcy5maW5kKChjcG0yKSA9PiB6b2RNb2RlbC5zYWZlUGFyc2UoY3BtMikuc3VjY2Vzcyk7XG4gIGlmICghY3BtKSB7XG4gICAgZXJyX18kdShgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6YCwgYWxsQ1BNcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbGApO1xuICB9XG4gIHJldHVybiB6b2RNb2RlbC5wYXJzZShjcG0pO1xufTtcbmNvbnN0IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0gPSAoZmllbGRzLCBjaGVja291dF9zZXR0aW5ncykgPT4ge1xuICByZXR1cm4ge1xuICAgIG5ld19jdXN0b21lcl9lbWFpbDogZmllbGRzLmVtYWlsLFxuICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGZpZWxkcy5sYXN0TmFtZSxcbiAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogZmllbGRzLmZpcnN0TmFtZSxcbiAgICBjdXN0b21lcl9idXNpbmVzc19uYW1lOiBmaWVsZHMuYnVzaW5lc3NOYW1lLFxuICAgIGN1c3RvbWVyX3RheF9pZDogZmllbGRzLnRheElkLFxuICAgIGN1c3RvbWVyX3RheF9pZF90eXBlOiBmaWVsZHMudGF4SWRUeXBlLFxuICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhmaWVsZHMpLFxuICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMoZmllbGRzLCBjaGVja291dF9zZXR0aW5ncyksXG4gICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKCksXG4gICAgbmV3X2N1c3RvbWVyX3Bob25lOiBmaWVsZHMucGhvbmVcbiAgfTtcbn07XG5jb25zdCBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwID0gYXN5bmMgKGFyZ3MpID0+IHtcbiAgY29uc3QgeyBsb2dfXzogbG9nX18yIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhhcmdzLmxvZ1ByZWZpeCk7XG4gIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFyZ3MuYW55Q2RlQ29ubmVjdGlvbik7XG4gIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShhcmdzLmNvbmZpcm1SZXN1bHQpO1xuICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICBsb2dfXzIoYFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QuLi5gKTtcbiAgICBjb25zdCBzZXR1cFJlc3VsdCA9IGF3YWl0IGZpbmFsaXplU2V0dXBQYXltZW50TWV0aG9kKGFyZ3MuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcG1faWQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHNldHVwUmVzdWx0IH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKGFyZ3MudXNlUGF5Rmlyc3RGbG93KSB7XG4gICAgICBsb2dfXzIoYFVzaW5nIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgICBpZiAoIWFyZ3MuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgICBlcnJfXyR1KFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgYXJncy5jb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogYXJncy5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7IHByb3ZpZGVyX3R5cGU6IGFyZ3MuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogYXJncy5yZXF1aXJlZEZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzKSxcbiAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhhcmdzLnJlcXVpcmVkRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBwcm9tb3Rpb25fY29kZTogYXJncy5yZXF1aXJlZEZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICB1c2VfY29uZmlybWVkX3BtX2lkOiBjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBhcmdzLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH07XG4gICAgbG9nX18yKGBEb2luZyBjaGVja291dC4uLmAsIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFyZ3MuYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICB9XG59O1xuXG5jb25zdCBQYXltZW50UHJvY2Vzc29yID0gei5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIiwgXCJhZHllblwiLCBcInBheXBhbFwiLCBcInBvY2t5dFwiLCBcImxvb3BcIl0pO1xuKHtcbiAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlfSk7XG5jb25zdCBsb2FkU2NyaXB0ID0gKHtcbiAgc2NyaXB0SWQsXG4gIHNyYyxcbiAgY2hlY2tMb2FkZWRGblxufSkgPT4ge1xuICBjb25zdCBldmVudExpc3RlbmVyQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzY3JpcHQuc3JjID0gc3JjO1xuICAgIHNjcmlwdC5pZCA9IHNjcmlwdElkO1xuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgY29uc3QgZXhpc3RpbmdTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzY3JpcHRJZCk7XG4gICAgaWYgKGNoZWNrTG9hZGVkRm4oKSkge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdTY3JpcHQpIHtcbiAgICAgIHNjcmlwdCA9IGV4aXN0aW5nU2NyaXB0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJsb2FkXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuc2lnbmFsIH1cbiAgICApO1xuICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJlcnJvclwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBldmVudExpc3RlbmVyQ29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICByZWplY3QoXCJGYWlsZWQgdG8gbG9hZCB0aGUgc2NyaXB0XCIpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBldmVudExpc3RlbmVyQ29udHJvbGxlci5zaWduYWwgfVxuICAgICk7XG4gIH0pO1xufTtcblxuY29uc3QgZ2V0UGF5bWVudERhdGFSZXF1ZXN0ID0gKHtcbiAgZ2F0ZXdheSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQsXG4gIG1lcmNoYW50TmFtZSxcbiAgbWVyY2hhbnRJZCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIHByZWZpbGxcbn0pID0+IHtcbiAgY29uc3QgYW1vdW50QXRvbSA9IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uYW1vdW50QXRvbSA/PyBpbml0aWFsUHJldmlldz8uYW1vdW50QXRvbSA/PyAwO1xuICBjb25zdCB0b3RhbFByaWNlID0gTWF0aC5tYXgoYW1vdW50QXRvbSAvIDEwMCwgMCk7XG4gIGNvbnN0IGN1cnJlbmN5Q29kZSA9IChvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmN1cnJlbmN5ID8/IHByZWZpbGw/LmN1cnJlbmN5ID8/IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBiYXNlUmVxdWVzdCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IFwiRlVMTFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGxvd0NyZWRpdENhcmRzOiB0cnVlLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXksXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogdHJ1ZSxcbiAgICBzaGlwcGluZ0FkZHJlc3NSZXF1aXJlZDogcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyxcbiAgICBtZXJjaGFudEluZm86IHtcbiAgICAgIC8vIFBST0QgZW52IHdpbGwgbmVlZCB0aGlzXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wYXkvYXBpL3dlYi9yZWZlcmVuY2UvcmVxdWVzdC1vYmplY3RzI01lcmNoYW50SW5mb1xuICAgICAgbWVyY2hhbnRJZDogbWVyY2hhbnRJZCA/PyBcIlwiLFxuICAgICAgbWVyY2hhbnROYW1lXG4gICAgfSxcbiAgICB0cmFuc2FjdGlvbkluZm86IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICB0b3RhbFByaWNlU3RhdHVzOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5wZW5kaW5nID8gXCJFU1RJTUFURURcIiA6IFwiRklOQUxcIixcbiAgICAgIHRvdGFsUHJpY2U6IHRvdGFsUHJpY2UudG9GaXhlZCgyKVxuICAgIH1cbiAgfTtcbiAgaWYgKCFvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5nb29nbGVQYXlQYXltZW50UmVxdWVzdCkgcmV0dXJuIGJhc2VSZXF1ZXN0O1xuICBpZiAodHlwZW9mIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB7IC4uLmJhc2VSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0KGJhc2VSZXF1ZXN0KSB9O1xuICB9XG4gIHJldHVybiB7IC4uLmJhc2VSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH07XG59O1xuY29uc3QgbG9hZEdvb2dsZVBheVNjcmlwdCA9ICgpID0+IHtcbiAgcmV0dXJuIGxvYWRTY3JpcHQoe1xuICAgIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgICBzcmM6IFwiaHR0cHM6Ly9wYXkuZ29vZ2xlLmNvbS9ncC9wL2pzL3BheS5qc1wiLFxuICAgIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaVxuICB9KTtcbn07XG5sZXQgcGF5bWVudHNDbGllbnQgPSBudWxsO1xuY29uc3QgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQgPSBhc3luYyAoYmFzZVVybCkgPT4ge1xuICBjb25zdCBlbnYgPSBhd2FpdCBnZXRDdXJyZW50RW52KGJhc2VVcmwpO1xuICByZXR1cm4gZW52ID09PSBcInByb2RcIiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCI7XG59O1xuY29uc3QgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQgPSBhc3luYyAoYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoYmFzZVVybCk7XG4gIGlmIChwYXltZW50c0NsaWVudCA9PT0gbnVsbCkge1xuICAgIHBheW1lbnRzQ2xpZW50ID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgbWVyY2hhbnRJbmZvOiBwYXltZW50RGF0YVJlcXVlc3QubWVyY2hhbnRJbmZvXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBheW1lbnRzQ2xpZW50O1xufTtcbmNvbnN0IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghY29tbW9uQWN0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShjb21tb25BY3Rpb24pO1xufTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5ID0gKGZvcm1JbnB1dHMsIHBheW1lbnREYXRhKSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy5pbmZvPy5iaWxsaW5nQWRkcmVzcztcbiAgY29uc3Qgc2hpcHBpbmdBZGRyZXNzID0gcGF5bWVudERhdGEuc2hpcHBpbmdBZGRyZXNzO1xuICBpZiAoYmlsbGluZ0FkZHJlc3MpIHtcbiAgICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLmxhc3ROYW1lUGFydHNdID0gYmlsbGluZ0FkZHJlc3MubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICAgIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBsYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHBheW1lbnREYXRhLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxJTkUxXSA9IGlucHV0c1tGaWVsZE5hbWUuTElORTFdIHx8IGJpbGxpbmdBZGRyZXNzLmFkZHJlc3MxIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl0gPSBpbnB1dHNbRmllbGROYW1lLkxJTkUyXSB8fCBiaWxsaW5nQWRkcmVzcy5hZGRyZXNzMiB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTElORTNdID0gaW5wdXRzW0ZpZWxkTmFtZS5MSU5FM10gfHwgYmlsbGluZ0FkZHJlc3MuYWRkcmVzczMgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNJVFldID0gaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSB8fCBiaWxsaW5nQWRkcmVzcy5sb2NhbGl0eSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TVEFURV0gfHwgYmlsbGluZ0FkZHJlc3MuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0FkZHJlc3MuY291bnRyeUNvZGUgfHwgXCJVU1wiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgYmlsbGluZ0FkZHJlc3MucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJcIjtcbiAgICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICAgIH1cbiAgfVxuICBpZiAoc2hpcHBpbmdBZGRyZXNzKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRkcmVzczEgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdIHx8IHNoaXBwaW5nQWRkcmVzcy5hZGRyZXNzMiB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FM10gfHwgc2hpcHBpbmdBZGRyZXNzLmFkZHJlc3MzIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gfHwgc2hpcHBpbmdBZGRyZXNzLmxvY2FsaXR5IHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSB8fCBzaGlwcGluZ0FkZHJlc3MucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gfHwgc2hpcHBpbmdBZGRyZXNzLmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgfVxuICByZXR1cm4gaW5wdXRzO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kdSwgZXJyX186IGVycl9fJHQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWJhY3NcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhCQUNTRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwidHJ1ZWxheWVyXCI7XG4gICAgbGV0IG1pY3JvRGVwb3NpdERhdGEgPSBudWxsO1xuICAgIGlmICh2ZXJpZmljYXRpb25NZXRob2QgPT09IFwibWljcm9fZGVwb3NpdFwiKSB7XG4gICAgICBsb2dfXyR1KFwiTWljcm8gZGVwb3NpdCB2ZXJpZmljYXRpb24gc2VsZWN0ZWQsIHNob3dpbmcgZm9ybS4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1pY3JvRGVwb3NpdERhdGEgPSBhd2FpdCBjcmVhdGVBbmRPcGVuTWljcm9EZXBvc2l0Rm9ybShcImJhY3NfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCIzNTBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kdShcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyR1KFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkO1xuICAgIGNvbnN0IGF2YWlsYWJsZUJhbmtzID0gc3RhcnRGbG93TmV4dEFjdGlvbnM/LmF2YWlsYWJsZV9iYW5rcztcbiAgICBsZXQgc2VsZWN0ZWRCYW5rO1xuICAgIGlmICh2ZXJpZmljYXRpb25NZXRob2QgPT09IFwidHJ1ZWxheWVyXCIgJiYgYXZhaWxhYmxlQmFua3MgJiYgYXZhaWxhYmxlQmFua3MubGVuZ3RoID49IDEpIHtcbiAgICAgIGxvZ19fJHUoXCJNdWx0aXBsZSBiYW5rcyBhdmFpbGFibGUsIHNob3dpbmcgYmFuayBzZWxlY3Rvci4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNlbGVjdGVkQmFuayA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5CYW5rU2VsZWN0b3IoYXZhaWxhYmxlQmFua3MsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MDBweFwiLFxuICAgICAgICAgIHRpdGxlOiBcIlNlbGVjdCBiYW5rXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHUoYEJhbmsgc2VsZWN0ZWQ6ICR7c2VsZWN0ZWRCYW5rLmRpc3BsYXlfbmFtZX1gKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ19fJHUoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBkaXJlY3REZWJpdERhdGEgPSB7XG4gICAgICB0eXBlOiBcImJhY3NfZGlyZWN0X2RlYml0XCIsXG4gICAgICBiYWNzX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAvLyBUcnVlTGF5ZXJcbiAgICAgICAgYmFua19uYW1lOiBzZWxlY3RlZEJhbms/LmJhbmtfbmFtZSxcbiAgICAgICAgLy8gTWljcm9kZXBvc2l0XG4gICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY291bnRyeV9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgYWNjb3VudF9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/LmFjY291bnRfbnVtYmVyLFxuICAgICAgICBzb3J0X2NvZGU6IG1pY3JvRGVwb3NpdERhdGE/LnNvcnRfY29kZSxcbiAgICAgICAgYWRkcmVzczogeyAuLi5iaWxsaW5nQWRkcmVzcywgdG93bjogYmlsbGluZ0FkZHJlc3MuY2l0eSwgcG9zdGNvZGU6IGJpbGxpbmdBZGRyZXNzLnppcF9jb2RlIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogdmVyaWZpY2F0aW9uTWV0aG9kLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YTogZGlyZWN0RGViaXREYXRhXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIGxvZ19fJHUoXCJCQUNTIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQkFDUyB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyR1KGDilbAgQkFDUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCQUNTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYmFjc1wiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyR0KFwiQkFDUyBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHQsIGVycl9fOiBlcnJfXyRzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1lZnRcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhFRlRGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJwbGFpZFwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kdChcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJlZnRfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI0NTBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kdChcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyR0KFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkO1xuICAgIGNvbnN0IGRpcmVjdERlYml0RGF0YSA9IHtcbiAgICAgIHR5cGU6IFwiZWZ0X2RpcmVjdF9kZWJpdFwiLFxuICAgICAgZWZ0X2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAvLyBQbGFpZFxuICAgICAgICBidXNpbmVzc19hY2NvdW50OiBjdXN0b21QYXJhbXMuaXNCdXNpbmVzc0FjY291bnQgPz8gZmFsc2UsXG4gICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgLy8gTWljcm9kZXBvc2l0XG4gICAgICAgIGluc3RpdHV0aW9uX251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uaW5zdGl0dXRpb25fbnVtYmVyLFxuICAgICAgICB0cmFuc2l0X251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8udHJhbnNpdF9udW1iZXIsXG4gICAgICAgIGFjY291bnRfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hY2NvdW50X251bWJlclxuICAgICAgICAvLyBtYW5kYXRlX3ZlcnNpb246IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IGRpcmVjdERlYml0RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyR0KFwiRUZUIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiRUZUIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJHQoYOKVsCBFRlQgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV3Q29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1lZnRcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG5ld0NvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kcyhcIkVGVCBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHMsIGVycl9fOiBlcnJfXyRyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1zZXBhXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4U0VQQUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWV0aG9kID0gY3VzdG9tUGFyYW1zLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kcyhcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJzZXBhX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMzAwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHMoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kcyhcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBhdmFpbGFibGVCYW5rcyA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IHNlbGVjdGVkQmFuaztcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcInRydWVsYXllclwiICYmIGF2YWlsYWJsZUJhbmtzICYmIGF2YWlsYWJsZUJhbmtzLmxlbmd0aCA+PSAxKSB7XG4gICAgICBsb2dfXyRzKFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBzZWxlY3RlZEJhbmsgPSBhd2FpdCBjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yKGF2YWlsYWJsZUJhbmtzLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNTAwcHhcIixcbiAgICAgICAgICB0aXRsZTogXCJTZWxlY3QgYmFua1wiXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRzKGBCYW5rIHNlbGVjdGVkOiAke3NlbGVjdGVkQmFuay5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyRzKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogdmVyaWZpY2F0aW9uTWV0aG9kLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwic2VwYV9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBzZXBhX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAgICAgLy8gdHJ1ZWxheWVyXG4gICAgICAgICAgICBiYW5rX25hbWU6IHNlbGVjdGVkQmFuaz8uYmFua19uYW1lLFxuICAgICAgICAgICAgY291bnRyeV9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgICAgIC8vIG1pY3JvZGVwb3NpdFxuICAgICAgICAgICAgb3duZXJfbmFtZTogZ2V0RnVsbE5hbWUobm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sIG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgICAgIGliYW46IG1pY3JvRGVwb3NpdERhdGE/LmliYW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmIChyZWRpcmVjdFVybCkge1xuICAgICAgbG9nX18kcyhcIlNFUEEgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJTRVBBIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJHMoYOKVsCBTRVBBIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU0VQQSB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNFUEEgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV3Q29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1zZXBhXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBuZXdDb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJHIoXCJTRVBBIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kciwgZXJyX186IGVycl9fJHEgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWlyd2FsbGV4LWNjXCIpO1xuY29uc3QgQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWA7XG4gICAgZXJyX18kcShkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBwYXJzZUludGVudElkRnJvbTNkc0hyZWYgPSAoaHJlZikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGludGVudElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIWludGVudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIH1cbiAgICBsb2dfXyRyKGBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbSW50ZW50IElEOiAke2ludGVudElkfV1gKTtcbiAgICByZXR1cm4gaW50ZW50SWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyTXNnID0gYEVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyRxKGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgcnVuQWlyd2FsbGV4M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMkMyhlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0KHsgdXJsOiBoZWFkZXJzW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmwgfSk7XG4gIGNvbnN0IGludGVudElkID0gcGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBpbml0aWFsSW50ZW50SWQgPSBoZWFkZXJzW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAoaW5pdGlhbEludGVudElkICE9PSBpbnRlbnRJZCkge1xuICAgIGNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuICAgIGNvbnN0IGRldkVyciA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtpbnRlbnRJZH0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtpbml0aWFsSW50ZW50SWR9KS5gO1xuICAgIGVycl9fJHEoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIGNvbnN0IGV4dHJhTWV0YWRhdGFGb3JDaGVja291dCA9IHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGludGVudElkLFxuICAgICAgY29uc2VudF9pZDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xuICByZXR1cm4gZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0O1xufTtcbmNvbnN0IEFwcGxlUGF5Q3BtJDIgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0kMiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmNvbnN0IGxvYWRBcHBsZVBheVNjcmlwdCA9ICgpID0+IHtcbiAgcmV0dXJuIGxvYWRTY3JpcHQoe1xuICAgIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfYXBwbGVfcGF5X3Nka1wiLFxuICAgIHNyYzogXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLFxuICAgIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvblxuICB9KTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5ID0gKGZvcm1JbnB1dHMsIGFwcGxlUGF5UGF5bWVudCkgPT4ge1xuICBjb25zdCBwbUJpbGxpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3Q7XG4gIGNvbnN0IGJpbGxpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LmJpbGxpbmdDb250YWN0O1xuICBjb25zdCBzaGlwcGluZ0NvbnRhY3QgPSBhcHBsZVBheVBheW1lbnQuc2hpcHBpbmdDb250YWN0O1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgaWYgKHBtQmlsbGluZ0NvbnRhY3QgfHwgYmlsbGluZ0NvbnRhY3QgfHwgc2hpcHBpbmdDb250YWN0KSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBwbUJpbGxpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgYmlsbGluZ0NvbnRhY3Q/LmVtYWlsQWRkcmVzcyB8fCBzaGlwcGluZ0NvbnRhY3Q/LmVtYWlsQWRkcmVzcyB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmNvdW50cnlDb2RlIHx8IGJpbGxpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LnBvc3RhbENvZGUgfHwgYmlsbGluZ0NvbnRhY3Q/LnBvc3RhbENvZGUgfHwgc2hpcHBpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgICBjb25zdCBmaXJzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IHNoaXBwaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IFwiXCI7XG4gICAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgXCJcIjtcbiAgICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5wdXRzO1xufTtcbnoub2JqZWN0KHtcbiAgZGF0YTogei5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgICBlcnJvcnM6IHouYXJyYXkoei5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHouc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHoubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCBjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCA9ICh7XG4gIHRvdGFsLFxuICBwcmVmaWxsXG59KSA9PiB7XG4gIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogdG90YWwuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7cHJlZmlsbC50b2tlbn1gLCBGUkFNRV9CQVNFX1VSTCkudG9TdHJpbmcoKVxuICAgIH07XG4gIH1cbiAgY29uc3QgbGluZUl0ZW0gPSBwcmVmaWxsLmxpbmVfaXRlbXM/LlswXTtcbiAgaWYgKCFsaW5lSXRlbSkgcmV0dXJuIHZvaWQgMDtcbiAgY29uc3QgYXBwbGVJbnRlcnZhbFVuaXQgPSBsaW5lSXRlbT8uYmlsbGluZ19pbnRlcnZhbCA9PT0gXCJ3ZWVrXCIgPyBcImRheVwiIDogbGluZUl0ZW0/LmJpbGxpbmdfaW50ZXJ2YWw7XG4gIGNvbnN0IGFwcGxlSW50ZXJ2YWxDb3VudCA9IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsX2NvdW50ID8gbGluZUl0ZW0/LmJpbGxpbmdfaW50ZXJ2YWwgPT09IFwid2Vla1wiID8gbGluZUl0ZW0/LmJpbGxpbmdfaW50ZXJ2YWxfY291bnQgKiA3IDogbGluZUl0ZW0/LmJpbGxpbmdfaW50ZXJ2YWxfY291bnQgOiB2b2lkIDA7XG4gIHJldHVybiB7XG4gICAgcGF5bWVudERlc2NyaXB0aW9uOiBsaW5lSXRlbT8uZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgYW1vdW50OiB0b3RhbC5hbW91bnQsXG4gICAgICBsYWJlbDogbGluZUl0ZW0/LmRlc2NyaXB0aW9uID8/IFwiXCIsXG4gICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiBhcHBsZUludGVydmFsVW5pdCxcbiAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiBhcHBsZUludGVydmFsQ291bnQsXG4gICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgfSxcbiAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7cHJlZmlsbC50b2tlbn1gXG4gIH07XG59O1xuY29uc3QgY3JlYXRlQXBwbGVQYXlUb3RhbCA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBwcmVmaWxsLFxuICBkZWZhdWx0TGFiZWwgPSBcIlRvdGFsXCJcbn0pID0+IHtcbiAgY29uc3QgY3VycmVuY3lDb2RlID0gKG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uY3VycmVuY3kgPz8gcHJlZmlsbD8uY3VycmVuY3kgPz8gaW5pdGlhbFByZXZpZXcuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgYW1vdW50ID0gKGFtb3VudEF0b20gLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ubGFiZWwgPz8gZGVmYXVsdExhYmVsID8/IFwiVG90YWxcIixcbiAgICAgIHR5cGU6IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LnBlbmRpbmcgPyBcInBlbmRpbmdcIiA6IFwiZmluYWxcIixcbiAgICAgIGFtb3VudFxuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0ID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIHByZWZpbGwsXG4gIGRlZmF1bHRMYWJlbFxufSkgPT4ge1xuICBjb25zdCB7IGN1cnJlbmN5Q29kZSwgdG90YWwgfSA9IGNyZWF0ZUFwcGxlUGF5VG90YWwoe1xuICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgaW5pdGlhbFByZXZpZXcsXG4gICAgcHJlZmlsbCxcbiAgICBkZWZhdWx0TGFiZWxcbiAgfSk7XG4gIGxldCBwYXltZW50UmVxdWVzdCA9IHtcbiAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgIGN1cnJlbmN5Q29kZSxcbiAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXG4gICAgICBcImVtYWlsXCIsXG4gICAgICAuLi5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzID8gW1wicG9zdGFsQWRkcmVzc1wiXSA6IFtdXG4gICAgXSxcbiAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIiwgXCJqY2JcIl0sXG4gICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcInN1cHBvcnRzM0RTXCIsIFwic3VwcG9ydHNDcmVkaXRcIiwgXCJzdXBwb3J0c0RlYml0XCJdLFxuICAgIHRvdGFsXG4gIH07XG4gIGNvbnN0IGlzQWxsUmVjdXJyaW5nID0gcHJlZmlsbC5saW5lX2l0ZW1zLmV2ZXJ5KChpdGVtKSA9PiBpdGVtLmJpbGxpbmdfaW50ZXJ2YWwgJiYgaXRlbS5iaWxsaW5nX2ludGVydmFsX2NvdW50KTtcbiAgaWYgKGlzQWxsUmVjdXJyaW5nKSB7XG4gICAgcGF5bWVudFJlcXVlc3QucmVjdXJyaW5nUGF5bWVudFJlcXVlc3QgPSBjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCh7XG4gICAgICB0b3RhbCxcbiAgICAgIHByZWZpbGxcbiAgICB9KTtcbiAgfVxuICBpZiAoIW92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QpIHJldHVybiBwYXltZW50UmVxdWVzdDtcbiAgaWYgKHR5cGVvZiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHBheW1lbnRSZXF1ZXN0ID0ge1xuICAgICAgLi4ucGF5bWVudFJlcXVlc3QsXG4gICAgICAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QocGF5bWVudFJlcXVlc3QpXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBwYXltZW50UmVxdWVzdCA9IHsgLi4ucGF5bWVudFJlcXVlc3QsIC4uLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9O1xuICB9XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6LmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xuY29uc3QgQWR5ZW5Mb2NhbGUgPSB6LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyRxLCBlcnJfXzogZXJyX18kcCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhZHllbi1jY1wiKTtcbmNvbnN0IEFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tZW52aXJvbm1lbnRcIjogQWR5ZW5FbnZpcm9ubWVudCxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDIgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbjNkc1Jlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRwKGBBZHllbiAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGRlY29kZUFkeWVuQWN0aW9uID0gKGFjdGlvbikgPT4ge1xuICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBKU09OLnBhcnNlKGFjdGlvbik7XG4gIHJldHVybiBkZXNlcmlhbGl6ZWQ7XG59O1xuY29uc3QgaXNBZHllbkF2YWlsYWJsZSA9ICgpID0+IHtcbiAgcmV0dXJuIFwiQWR5ZW5XZWJcIiBpbiB3aW5kb3cgJiYgXCJBZHllbkNoZWNrb3V0XCIgaW4gd2luZG93W1wiQWR5ZW5XZWJcIl07XG59O1xuY29uc3QgZ2V0QWR5ZW5DaGVja291dCA9IGFzeW5jICgpID0+IHtcbiAgbG9nX18kcShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzQWR5ZW5BdmFpbGFibGUoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc0FkeWVuQXZhaWxhYmxlKCkpIHtcbiAgICBlcnJfXyRwKFwiQWR5ZW4gU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBsb2dfXyRxKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIik7XG4gIHJldHVybiB3aW5kb3dbXCJBZHllbldlYlwiXVtcIkFkeWVuQ2hlY2tvdXRcIl07XG59O1xuY29uc3QgaGFuZGxlQWR5ZW4zZHMgPSAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgaGVhZGVycywgbG9jYWxlLCBjb3VudHJ5Q29kZSwgY29tcG9uZW50LCBob3N0LCBjYW5jZWxCdXR0b24gfSA9IHBhcmFtcztcbiAgY29uc3QgYWN0aW9uID0gZGVjb2RlQWR5ZW5BY3Rpb24oaGVhZGVyc1tcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIGxvZ19fJHEoYFJ1bm5pbmcgQWR5ZW4gM0RTIGZsb3cgZm9yIGFjdGlvbiB0eXBlOiAke2FjdGlvbi50eXBlfWApO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgbG9nX18kcShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpO1xuICAgICAgY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNhbmNlbCk7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3Qgb25QYXltZW50RmFpbGVkID0gKHN0YXRlKSA9PiB7XG4gICAgICBlcnJfXyRwKFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIHN0YXRlKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuRkFJTFVSRSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgIGVycl9fJHAoXCJBZHllbiBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5GQUlMVVJFLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25DYW5jZWwgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgIGNvbnN0IG9uQWRkaXRpb25hbERldGFpbHMgPSAoc3RhdGUsIF8sIF9fKSA9PiB7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogc3RhdGUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBnZXRBZHllbkNoZWNrb3V0KCkudGhlbihcbiAgICAgIChhZHllbkNoZWNrb3V0KSA9PiBhZHllbkNoZWNrb3V0KHtcbiAgICAgICAgY2xpZW50S2V5OiBoZWFkZXJzW1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IGhlYWRlcnNbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBjb3VudHJ5Q29kZSxcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlscyxcbiAgICAgICAgb25QYXltZW50RmFpbGVkLFxuICAgICAgICBvbkVycm9yXG4gICAgICB9KVxuICAgICkudGhlbigoY2hlY2tvdXQpID0+IHtcbiAgICAgIGNoZWNrb3V0LmNyZWF0ZUZyb21BY3Rpb24oYWN0aW9uLCB7IGNoYWxsZW5nZVdpbmRvd1NpemU6IFwiMDNcIiB9KS5tb3VudChjb21wb25lbnQpO1xuICAgIH0pO1xuICB9KTtcbn07XG5jb25zdCBkZXRlcm1pbmVMb2NhbGUgPSAocHJlZmlsbExvY2FsZSkgPT4ge1xuICBjb25zdCBicm93c2VyTG9jYWxlID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG4gIGNvbnN0IGxvY2FsZSA9IHByZWZpbGxMb2NhbGUgPz8gYnJvd3NlckxvY2FsZTtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbkxvY2FsZS5zYWZlUGFyc2UobG9jYWxlKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kcChgUmVzb2x2ZWQgaW52YWxpZCBsb2NhbGU6ICR7bG9jYWxlfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKTtcbiAgICByZXR1cm4gXCJlbi1VU1wiO1xuICB9XG4gIGxvZ19fJHEoYFJlc29sdmVkIGxvY2FsZTogJHtwYXJzZVJlc3VsdC5kYXRhfWApO1xuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNBZHllbjNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFkeWVuLWFjdGlvblwiXSAhPT0gdm9pZCAwO1xufTtcbmNvbnN0IHJ1bkFkeWVuM2RzRmxvdyA9IGFzeW5jIChjb3VudHJ5Q29kZSwgZXJyb3JSZXNwb25zZUhlYWRlcnMsIHByZWZpbGxMb2NhbGUpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDIoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCBjb21wb25lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb21wb25lbnQuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH0gPSBjcmVhdGVBbmRPcGVuRnJhbWUoXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIGlmcmFtZS5yZXBsYWNlV2l0aChjb21wb25lbnQpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVBZHllbjNkcyh7XG4gICAgaGVhZGVycyxcbiAgICBsb2NhbGU6IGRldGVybWluZUxvY2FsZShwcmVmaWxsTG9jYWxlKSxcbiAgICBjb3VudHJ5Q29kZSxcbiAgICBjb21wb25lbnQsXG4gICAgaG9zdCxcbiAgICBjYW5jZWxCdXR0b25cbiAgfSk7XG4gIHJlc3VsdC5jbGVhbnVwKCk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGlmICghcmVzdWx0LmFkZGl0aW9uYWxEZXRhaWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCBidXQgbm8gYWRkaXRpb25hbCBkZXRhaWxzIHdlcmUgcmV0dXJuZWRcIik7XG4gICAgfVxuICAgIGxvZ19fJHEoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiByZXN1bHQuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbn07XG5jb25zdCBBcHBsZVBheUNwbSQxID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0kMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kcCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQyKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMihldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBmb3JtSW5wdXRzLFxuICAgICAgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvbnRleHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBjb250ZXh0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBicm93c2VyX2luZm86IGdldEZyYXVkTWV0YWRhdGEoKSxcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRwKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kbywgZXJyX186IGVycl9fJG8gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWR5ZW4tYXBwbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFkeWVuQXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kbyhcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kbyhcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJG8oXCJBcHBsZSBQYXkgTG9hZGVkXCIpO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kbyhcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5hZHllbkFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJG8oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BZHllbkFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCwgaW5pdGlhbFByZXZpZXcgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4ucHJlZmlsbFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBhcHBsZVBheUNwbS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kbyhcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMihldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3MiA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBjcmVhdGVBcHBsZVBheVRvdGFsKHtcbiAgICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGluaXRpYWxQcmV2aWV3MixcbiAgICAgICAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICAgICAgcHJlZmlsbFxuICAgICAgICAgIH0pLnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZCQyKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSBoYW5kbGVDYW5jZWw7XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kbyhcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJG4sIGVycl9fOiBlcnJfXyRuIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFkeWVuLWdvb2dsZS1wYXlcIik7XG5jb25zdCBpbml0QWR5ZW5Hb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMSk7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kbihcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJG4oXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRuKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRuKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRHb29nbGVQYXlFbnZpcm9ubWVudChjb250ZXh0LmJhc2VVcmwpO1xuICAgIGlmIChlbnZpcm9ubWVudCA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIXByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCkge1xuICAgICAgZXJyX18kbihcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJG4oXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgICBwcmVmaWxsLFxuICAgICAgICBnYXRld2F5OiBcImFkeWVuXCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiBpc1JlYWR5VG9QYXkgfSA9IGF3YWl0IGNsaWVudC5pc1JlYWR5VG9QYXkocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGlmICghaXNSZWFkeVRvUGF5KSB7XG4gICAgICAgIGxvZ19fJG4oXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKTtcbiAgICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kbihcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IG9uR29vZ2xlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2pzRmxvd3MuYWR5ZW5Hb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZ29vZ2xlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJG4oXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uR29vZ2xlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFkeWVuR29vZ2xlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJG4oXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSQxKTtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhZHllblwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgdHJhY2soXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogZ29vZ2xlUGF5Q3BtLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZXhjbHVkZVByb3BzKHByZWZpbGwsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgY2xpZW50LmxvYWRQYXltZW50RGF0YShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgbG9nX18kbihcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5KG5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgICAgbWVyZ2VkSW5wdXRzLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgY3VzdG9tUGFyYW1zPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJG4oXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBzdGFydEZsb3dOZXh0QWN0aW9ucyk7XG4gICAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIGJyb3dzZXJfaW5mbzogZ2V0RnJhdWRNZXRhZGF0YSgpLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJG4oXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmIG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgbG9nX18kbihcIkFkeWVuIDNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgICAgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kbihg4pWwIEFkeWVuIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiAhb3VyUG1JZCkge1xuICAgICAgICBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCxcbiAgICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJG4oXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZSBhZnRlciAzRFNcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IG1ldGhvZCBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRuKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRtLCBlcnJfXzogZXJyX18kbSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYWNoXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4QUNIRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJG0oXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwiYWNoX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNDAwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJG0oXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kbShcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFjaF9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBhY2hfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgICAgICAvL3BsYWlkIHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGJ1c2luZXNzX2FjY291bnQ6IGN1c3RvbVBhcmFtcy5pc0J1c2luZXNzQWNjb3VudCA/PyBmYWxzZSxcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgICAgICAvL0FDSCBtaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGFjY291bnRfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hY2NvdW50X251bWJlcixcbiAgICAgICAgICAgIGFiYV9yb3V0aW5nX251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uYWJhX3JvdXRpbmdfbnVtYmVyXG4gICAgICAgICAgICAvLyBtYW5kYXRlX3ZlcnNpb246ICcxLjAnLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyRtKFwiUGxhaWQgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJBQ0ggdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgbG9nX18kbShg4pWwIFBsYWlkIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhaWQgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXdDb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWFjaFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRtKFwiQUNIIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kbCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBldmVudC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IGNvbnRleHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgY29uc3QgcGF5bWVudFNlc3Npb25SZXNwb25zZSA9IG5leHRBY3Rpb25NZXRhZGF0YT8uW1wiYXBwbGVfcGF5X3Nlc3Npb25cIl07XG4gICAgaWYgKCFwYXltZW50U2Vzc2lvblJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50U2Vzc2lvblJlc3BvbnNlKTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLnBheW1lbnRTZXNzaW9uUmVzcG9uc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29udGV4dC5zZXNzaW9uLmFib3J0KCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGUzRFMobmV4dEFjdGlvbk1ldGFkYXRhLCBjb250ZXh0KSB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgfVxuICBsb2dfXyRsKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gIH0pO1xuICBsb2dfXyRsKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICBsb2dfXyRsKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gIHJldHVybiBjb25maXJtUmVzdWx0O1xufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMShldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBmb3JtSW5wdXRzLFxuICAgICAgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvbnRleHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBjb250ZXh0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgfSk7XG4gICAgY29uc3QgcmVxdWlyZWRVc2VyQWN0aW9ucyA9IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF07XG4gICAgY29uc3QgY29uc2VudElkID0gcmVxdWlyZWRVc2VyQWN0aW9ucy5jb25zZW50X2lkO1xuICAgIGlmICghY29uc2VudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShwYXltZW50RGF0YS50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRsKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgbGV0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YT8ucmVkaXJlY3RfdXJsICYmIG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkICYmIG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCkge1xuICAgICAgY29uZmlybVJlc3VsdCA9IGF3YWl0IGhhbmRsZTNEUyhuZXh0QWN0aW9uTWV0YWRhdGEsIGNvbnRleHQpO1xuICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIH1cbiAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRrLCBlcnJfXzogZXJyX18kbCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0kMik7XG4gICAgaWYgKCFhcHBsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRrKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpO1xuICAgIGF3YWl0IGxvYWRBcHBsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKSB7XG4gICAgICBsb2dfXyRrKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kayhcIkFwcGxlIFBheSBMb2FkZWRcIik7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnRzID0gYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpO1xuICAgIGlmICghY2FuTWFrZVBheW1lbnRzKSB7XG4gICAgICBsb2dfXyRrKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gYXBwbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25BcHBsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IE9qc0Zsb3dzLmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGwoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uQXBwbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQWlyd2FsbGV4QXBwbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgZm9ybUNhbGxiYWNrc1xuICB9KSA9PiB7XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0kMik7XG4gICAgY29uc3QgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGN1c3RvbVBhcmFtcy5pbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4ucHJlZmlsbFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBhcHBsZVBheUNwbS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kayhcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gaGFuZGxlQ2FuY2VsO1xuICAgICAgc2Vzc2lvbi5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDEoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBjcmVhdGVBcHBsZVBheVRvdGFsKHtcbiAgICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICAgICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgICAgIHByZWZpbGxcbiAgICAgICAgICB9KS50b3RhbFxuICAgICAgICB9O1xuICAgICAgICBzZXNzaW9uLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih1cGRhdGUpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMShldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kbChcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGosIGVycl9fOiBlcnJfXyRrIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1nb29nbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMik7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaihcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJGsoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRqKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRrKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRHb29nbGVQYXlFbnZpcm9ubWVudChjb250ZXh0LmJhc2VVcmwpO1xuICAgIGlmIChlbnZpcm9ubWVudCA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIXByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCkge1xuICAgICAgZXJyX18kayhcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGooXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgICBwcmVmaWxsLFxuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBjb25zdCB7IHJlc3VsdDogaXNSZWFkeVRvUGF5IH0gPSBhd2FpdCBjbGllbnQuaXNSZWFkeVRvUGF5KHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBpZiAoIWlzUmVhZHlUb1BheSkge1xuICAgICAgICBsb2dfXyRqKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIik7XG4gICAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGsoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBlcnIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kayhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uR29vZ2xlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyRqKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMik7XG4gICAgY29uc3QgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgcHJlZmlsbCxcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICB0cmFjayhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBnb29nbGVQYXlDcG0ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGEgPSBhd2FpdCBjbGllbnQubG9hZFBheW1lbnREYXRhKHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBsb2dfXyRqKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkobm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgICBtZXJnZWRJbnB1dHMsXG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKTtcbiAgICAgIGxvZ19fJGooXCJfX19cIiwgbm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJGooXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBzdGFydEZsb3dOZXh0QWN0aW9ucyk7XG4gICAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogZW5jcnlwdGVkUGF5bWVudFRva2VuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGooXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGxvZ19fJGooXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJGooYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgIW91clBtSWQpIHtcbiAgICAgICAgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRqKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kayhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kaSwgZXJyX186IGVycl9fJGogfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwia2xhcm5hXCIpO1xuY29uc3QgQWlyd2FsbGV4S2xhcm5hQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwia2xhcm5hXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe30pLm51bGxpc2goKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFpcndhbGxleFwiKVxufSk7XG5jb25zdCBpbml0QWlyd2FsbGV4S2xhcm5hRmxvdyA9IGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICBjb25zdCBrbGFybmFDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQWlyd2FsbGV4S2xhcm5hQ3BtKTtcbiAgaWYgKCFrbGFybmFDcG0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJLbGFybmEgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICB9XG4gIGNvbnN0IHN0YXJ0RmxvdyA9IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICByZXR1cm4gT2pzRmxvd3MuYWlyd2FsbGV4S2xhcm5hLnJ1bih7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBrbGFybmFDcG0sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICBjdXN0b21QYXJhbXM6IGN1c3RvbVBhcmFtcyA/PyB7fVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgc3RhcnRGbG93XG4gIH07XG59O1xuY29uc3QgcnVuQWlyd2FsbGV4S2xhcm5hRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBsb2dfXyRpKGBSdW5uaW5nIEtsYXJuYSBmbG93Li4uYCwgY3VzdG9tUGFyYW1zKTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICAgIGNvbnN0IGlzQW5vbnltb3VzID0gZmFsc2U7XG4gICAgICBsb2dfXyRpKGBWZXJpZnlpbmcgQ1BNLi4uYCk7XG4gICAgICBjb25zdCBjcG0gPSBBaXJ3YWxsZXhLbGFybmFDcG0ucGFyc2UoY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICAgIGxvZ19fJGkoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5pc0Fub255bW91cyA/IGdlbmVyYXRlQW5vbnltb3VzVmFsdWVzKCkgOiB2b2lkIDAsXG4gICAgICAgIC4uLnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbmV3Q3VzdG9tZXJGaWVsZHMgPSBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgICAgbG9nX18kaShcIk5ldyBjdXN0b21lciBmaWVsZHNcIiwgbmV3Q3VzdG9tZXJGaWVsZHMpO1xuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgICAgfSk7XG4gICAgICBjb25zb2xlLmxvZyhcInN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwia2xhcm5hXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY3BtLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZHM6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kaihcIktsYXJuYSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwia2xhcm5hXCIsIGVycm9yOiBlcnIgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IEFwcGxlUGF5Q3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IEdvb2dsZVBheUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50KGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGV2ZW50LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogY29udGV4dC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50U2Vzc2lvblJlc3BvbnNlID0gbmV4dEFjdGlvbk1ldGFkYXRhPy5bXCJhcHBsZV9wYXlfc2Vzc2lvblwiXTtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHBheW1lbnRTZXNzaW9uUmVzcG9uc2UpO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ucGF5bWVudFNlc3Npb25SZXNwb25zZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBheW1lbnRBdXRob3JpemVkKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bWVudERhdGEgPSBldmVudC5wYXltZW50O1xuICAgIGNvbnN0IGZvcm1JbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5KGNvbnRleHQubm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhmb3JtSW5wdXRzLCBjb250ZXh0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBjb250ZXh0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCBtb2JpbGVXYWxsZXRQYXltZW50RGF0YSA9IHtcbiAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5BUFBMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKEpTT04uc3RyaW5naWZ5KHBheW1lbnREYXRhLnRva2VuLnBheW1lbnREYXRhKSlcbiAgICB9O1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IG1vYmlsZVdhbGxldFBheW1lbnREYXRhXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRoLCBlcnJfXzogZXJyX18kaSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhdXRobmV0LWFwcGxlcGF5XCIpO1xuY29uc3QgaW5pdEF1dGhuZXRBcHBsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSk7XG4gICAgaWYgKCFhcHBsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRoKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpO1xuICAgIGF3YWl0IGxvYWRBcHBsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKSB7XG4gICAgICBsb2dfXyRoKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnRzID0gYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpO1xuICAgIGlmICghY2FuTWFrZVBheW1lbnRzKSB7XG4gICAgICBsb2dfXyRoKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gYXBwbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25BcHBsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGkoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgIH0pO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkFwcGxlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkF1dGhuZXRBcHBsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBmb3JtQ2FsbGJhY2tzXG4gIH0pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0pO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBwYXltZW50UmVxdWVzdCA9IGdldEFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgcHJlZmlsbCxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrc1xuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJGgoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50KGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFByZXZpZXcyID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IGNyZWF0ZUFwcGxlUGF5VG90YWwoe1xuICAgICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY3VzdG9tUGFyYW1zLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogaW5pdGlhbFByZXZpZXcyLFxuICAgICAgICAgICAgZGVmYXVsdExhYmVsOiBhcHBsZVBheUNwbT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgICAgICBwcmVmaWxsXG4gICAgICAgICAgfSkudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odXBkYXRlKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVBheW1lbnRBdXRob3JpemVkKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBlcnJfXyRpKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZywgZXJyX186IGVycl9fJGggfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXV0aG5ldC1nb29nbGVwYXlcIik7XG5jb25zdCBpbml0QXV0aG5ldEdvb2dsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyRnKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSk7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZyhcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJGgoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRnKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRoKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZyhcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgIHByZWZpbGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiBpc1JlYWR5VG9QYXkgfSA9IGF3YWl0IGNsaWVudC5pc1JlYWR5VG9QYXkocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGlmICghaXNSZWFkeVRvUGF5KSB7XG4gICAgICAgIGxvZ19fJGcoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKTtcbiAgICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kaChcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IG9uR29vZ2xlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2pzRmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRoKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgIH0pO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BdXRobmV0R29vZ2xlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJGcoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgICAgfSk7XG4gICAgICBsb2dfXyRnKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShlbmNyeXB0ZWRQYXltZW50VG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGgoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGYsIGVycl9fOiBlcnJfXyRnIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImN5YnMtZnJhbWVcIik7XG5jb25zdCBhdHRhY2hEZXZpY2VEYXRhQ29sbGVjdG9yID0gKHBvc3RVcmwsIGFjY2Vzc1Rva2VuKSA9PiB7XG4gIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gIGlmcmFtZS5uYW1lID0gXCJjYXJkaW5hbF9jb2xsZWN0aW9uX2lmcmFtZVwiO1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICBpZnJhbWUuc3R5bGUud2lkdGggPSBcIjEwcHhcIjtcbiAgaWZyYW1lLnN0eWxlLmhlaWdodCA9IFwiMTBweFwiO1xuICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZvcm1cIik7XG4gIGZvcm0uYWN0aW9uID0gcG9zdFVybDtcbiAgZm9ybS5tZXRob2QgPSBcIlBPU1RcIjtcbiAgZm9ybS50YXJnZXQgPSBpZnJhbWUubmFtZTtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIGlucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICBpbnB1dC5uYW1lID0gXCJKV1RcIjtcbiAgaW5wdXQudmFsdWUgPSBhY2Nlc3NUb2tlbjtcbiAgZm9ybS5hcHBlbmRDaGlsZChpbnB1dCk7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTtcbiAgY29uc3QgZGV0YWNoID0gKCkgPT4ge1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGZvcm0pO1xuICB9O1xuICByZXR1cm4geyBmb3JtLCBkZXRhY2ggfTtcbn07XG5jb25zdCBydW5EZXZpY2VEYXRhQ29sbGVjdGlvbiA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB7IHBvc3RVcmwsIGFjY2Vzc1Rva2VuIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZXhwZWN0ZWRPcmlnaW4gPSBuZXcgVVJMKHBvc3RVcmwpLm9yaWdpbjtcbiAgICBjb25zdCB7IGZvcm0sIGRldGFjaCB9ID0gYXR0YWNoRGV2aWNlRGF0YUNvbGxlY3Rvcihwb3N0VXJsLCBhY2Nlc3NUb2tlbik7XG4gICAgbG9nX18kZihcIkF0dGFjaGVkIGRldmljZSBkYXRhIGNvbGxlY3RvclwiKTtcbiAgICBjb25zdCBoYW5kbGVDb2xsZWN0aW9uRXZlbnQgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IGV4cGVjdGVkT3JpZ2luKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xuICAgICAgbG9nX18kZihcIlJlY2VpdmVkIGV2ZW50IGZyb20gZGV2aWNlIGRhdGEgY29sbGVjdG9yOlwiLCBkYXRhKTtcbiAgICAgIGlmIChkYXRhW1wiTWVzc2FnZVR5cGVcIl0gPT09IFwicHJvZmlsZS5jb21wbGV0ZWRcIikge1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBkZXRhY2goKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVDb2xsZWN0aW9uRXZlbnQpO1xuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVDb2xsZWN0aW9uRXZlbnQpO1xuICAgICAgbG9nX18kZihcIkF0dGFjaGVkIGxpc3RlbmVyIHRvIHdpbmRvd1wiKTtcbiAgICAgIGZvcm0uc3VibWl0KCk7XG4gICAgICBsb2dfXyRmKFwiU3VibWl0dGVkIGZvcm1cIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycl9fJGcoXCJFcnJvciBzdWJtaXR0aW5nIGZvcm06XCIsIGVycm9yKTtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBydW5QYXllckF1dGggPSAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgc3RlcFVwVXJsLCBhY2Nlc3NUb2tlbiwgbWVyY2hhbnREYXRhLCBpZnJhbWUsIGhvc3QgfSA9IHBhcmFtcztcbiAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmb3JtXCIpO1xuICBmb3JtLmFjdGlvbiA9IHN0ZXBVcFVybDtcbiAgZm9ybS5tZXRob2QgPSBcIlBPU1RcIjtcbiAgZm9ybS50YXJnZXQgPSBpZnJhbWUubmFtZTtcbiAgY29uc3QgdG9rZW5JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgdG9rZW5JbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgdG9rZW5JbnB1dC5uYW1lID0gXCJKV1RcIjtcbiAgdG9rZW5JbnB1dC52YWx1ZSA9IGFjY2Vzc1Rva2VuO1xuICBjb25zdCBtZElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICBtZElucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICBtZElucHV0Lm5hbWUgPSBcIk1EXCI7XG4gIG1kSW5wdXQudmFsdWUgPSBtZXJjaGFudERhdGE7XG4gIGZvcm0uYXBwZW5kQ2hpbGQodG9rZW5JbnB1dCk7XG4gIGZvcm0uYXBwZW5kQ2hpbGQobWRJbnB1dCk7XG4gIGhvc3QuYXBwZW5kQ2hpbGQoZm9ybSk7XG4gIHJldHVybiBmb3JtO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZSwgZXJyX186IGVycl9fJGYgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY3lic1wiKTtcbmNvbnN0IEN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgc3RlcF91cF91cmw6IHouc3RyaW5nKCksXG4gIGFjY2Vzc190b2tlbjogei5zdHJpbmcoKSxcbiAgZGRfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGRkX3Rva2VuOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1lcmNoYW50X2RhdGE6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRlJJRU5ETFlfRVJSID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMkMSA9ICh1c2VyQWN0aW9uKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQ3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkLnNhZmVQYXJzZSh1c2VyQWN0aW9uKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kZihgQ3liZXJzb3VyY2UgM0RTIGlzIHJlcXVpcmVkIGJ1dCB1c2VyIGFjdGlvbiBpcyBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh1c2VyQWN0aW9uKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRlJJRU5ETFlfRVJSKTtcbiAgfVxuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNDeWJlcnNvdXJjZTNkcyA9ICh1c2VyQWN0aW9uKSA9PiB7XG4gIHJldHVybiB1c2VyQWN0aW9uW1widHlwZVwiXSA9PT0gXCJjeWJlcnNvdXJjZV9wYXllcl9hdXRoXCI7XG59O1xuY29uc3QgaGFuZGxlQ3liZXJzb3VyY2UzZHMgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgc3RlcFVwVXJsLCBhY2Nlc3NUb2tlbiwgbWVyY2hhbnREYXRhLCBpZnJhbWUsIGhvc3QsIGNhbmNlbEJ1dHRvbiB9ID0gcGFyYW1zO1xuICBjb25zdCBleHBlY3RlZE9yaWdpbiA9IG5ldyBVUkwoc3RlcFVwVXJsKS5vcmlnaW47XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBsb2dfXyRlKFwiQ2xlYW5pbmcgdXAgQ3liZXJzb3VyY2UgM0RTIGZsb3dcIik7XG4gICAgICBjYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICAgIGhvc3QucmVtb3ZlKCk7XG4gICAgfTtcbiAgICBjb25zdCBvbkNhbmNlbCA9ICgpID0+IHtcbiAgICAgIGxvZ19fJGUoXCJDeWJlcnNvdXJjZSAzRFMgY2FuY2VsbGVkXCIpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoc3RhdHVzKSA9PiB7XG4gICAgICBsb2dfXyRlKFwiQ3liZXJzb3VyY2UgM0RTIGNvbXBsZXRlZCB3aXRoIHN0YXR1czpcIiwgc3RhdHVzKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IHN0YXR1cy5zdGF0dXMsIGNsZWFudXAgfSk7XG4gICAgICBjbGVhbnVwUG9sbGluZygpO1xuICAgIH07XG4gICAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBleHBlY3RlZE9yaWdpbiwgXCJwaW5nLTNkcy1zdGF0dXNcIiwgUGluZzNEU1N0YXR1c1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjbGVhbnVwUG9sbGluZyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50czogeyBob3N0LCBjYW5jZWxCdXR0b24gfSxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmU6IChzdGF0dXMpID0+IHtcbiAgICAgICAgcmVzb2x2ZSh7IHN0YXR1czogc3RhdHVzLnN0YXR1cywgY2xlYW51cCB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICBjb25zdCBmb3JtID0gcnVuUGF5ZXJBdXRoKHtcbiAgICAgIHN0ZXBVcFVybCxcbiAgICAgIGFjY2Vzc1Rva2VuLFxuICAgICAgbWVyY2hhbnREYXRhLFxuICAgICAgaWZyYW1lLFxuICAgICAgaG9zdFxuICAgIH0pO1xuICAgIGZvcm0uc3VibWl0KCk7XG4gIH0pO1xufTtcbmNvbnN0IHJ1bkN5YmVyc291cmNlM2RzRmxvdyA9IGFzeW5jICh1c2VyQWN0aW9uKSA9PiB7XG4gIGNvbnN0IHBheWxvYWQgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyQxKHVzZXJBY3Rpb24pO1xuICBjb25zdCB7IHN0ZXBfdXBfdXJsLCBhY2Nlc3NfdG9rZW4sIGRkX3VybCwgZGRfdG9rZW4sIG1lcmNoYW50X2RhdGEgfSA9IHBheWxvYWQ7XG4gIGlmIChkZF91cmwgJiYgZGRfdG9rZW4pIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uUmVzdWx0ID0gYXdhaXQgcnVuRGV2aWNlRGF0YUNvbGxlY3Rpb24oe1xuICAgICAgcG9zdFVybDogZGRfdXJsLFxuICAgICAgYWNjZXNzVG9rZW46IGRkX3Rva2VuXG4gICAgfSk7XG4gICAgbG9nX18kZShcIkRldmljZSBkYXRhIGNvbGxlY3Rpb24gY29tcGxldGVkIHdpdGggc3RhdHVzOlwiLCBjb2xsZWN0aW9uUmVzdWx0LlN0YXR1cyk7XG4gIH0gZWxzZSB7XG4gICAgZXJyX18kZihcIk5vIGRldmljZSBkYXRhIGNvbGxlY3Rpb24gVVJMIG9yIHRva2VuIHByb3ZpZGVkXCIpO1xuICB9XG4gIGNvbnN0IHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfSA9IGNyZWF0ZUFuZE9wZW5GcmFtZShcIlwiLCB7IG5hbWU6IFwiY2FyZGluYWxfYXV0aF9pZnJhbWVcIiB9KTtcbiAgbG9nX18kZShcIlJ1bm5pbmcgQ3liZXJzb3VyY2UgM0RTIGZsb3dcIik7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZUN5YmVyc291cmNlM2RzKHtcbiAgICBzdGVwVXBVcmw6IHN0ZXBfdXBfdXJsLFxuICAgIGFjY2Vzc1Rva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgbWVyY2hhbnREYXRhOiBtZXJjaGFudF9kYXRhLFxuICAgIGlmcmFtZSxcbiAgICBob3N0LFxuICAgIGNhbmNlbEJ1dHRvblxuICB9KTtcbiAgcmVzdWx0LmNsZWFudXAoKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5TVUNDRVNTKSB7XG4gICAgbG9nX18kZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnROZXZlcihyZXN1bHQuc3RhdHVzKTtcbiAgfVxufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZCwgZXJyX186IGVycl9fJGUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9ja3l0LWNjXCIpO1xuY29uc3QgUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gO1xuICAgIGVycl9fJGUoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmID0gKGhyZWYpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YXVsdElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghdmF1bHRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgfVxuICAgIGxvZ19fJGQoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3ZhdWx0SWR9XWApO1xuICAgIHJldHVybiB2YXVsdElkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyck1zZyA9IGBFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyRlKGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgcGFyc2VBcmdGcm9tSHJlZiA9IChocmVmLCBhcmdOYW1lKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaHJlZik7XG4gIHJldHVybiB1cmwuc2VhcmNoUGFyYW1zLmdldChhcmdOYW1lKTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgcmV0dXJuIGVycm9yUmVzcG9uc2VIZWFkZXJzPy5bXCJvcC1wb2NreXQtM2RzLXVybFwiXSAhPT0gdm9pZCAwO1xufTtcbmNvbnN0IHJ1blBvY2t5dDNkc0Zsb3cgPSBhc3luYyAoYmFzZVVybCwgZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QoeyB1cmw6IGhlYWRlcnNbXCJvcC1wb2NreXQtM2RzLXVybFwiXSwgYmFzZVVybCB9KTtcbiAgY29uc3QgdmF1bHRJZCA9IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiB2YXVsdElkLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGhlYWRlcnNbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBoZWFkZXJzW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5cbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbmNvbnN0IFN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3Qgc3RyaXBlQ0MzRFNGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICB0cmFjayhcIjNkc19zdHJpcGVfcmVkaXJlY3RcIiwge1xuICAgIC4uLm5leHRBY3Rpb25NZXRhZGF0YVxuICB9KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICB0cmFjayhcIjNkc19zdHJpcGVfY29tcGxldGVcIik7XG4gIHN0cmlwZUxvZ19fKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufTtcbmNvbnN0IHBhcnNlVXNlckZFUGF5bG9hZCA9IChwYXlsb2FkKSA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IFN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZC5zYWZlUGFyc2UocGF5bG9hZCk7XG4gIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSAzRFMgbWV0YWRhdGEgaGFzIHVuZXhwZWN0ZWQgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHBhcnNlZC5lcnJvci5lcnJvcnMpfWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RyaXBlX3BrOiBwYXJzZWQuZGF0YS5zdHJpcGVfcGssXG4gICAgY2xpZW50X3NlY3JldDogcGFyc2VkLmRhdGEuY2xpZW50X3NlY3JldCxcbiAgICBzdHJpcGVfcG1faWQ6IHBhcnNlZC5kYXRhLnN0cmlwZV9wbV9pZFxuICB9O1xufTtcblxuY29uc3QgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TID0gNDtcbmNvbnN0IHsgbG9nX186IGxvZ19fJGMsIGVycl9fOiBlcnJfXyRkIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInVuaWZpZWQtY2NcIik7XG5jb25zdCB1bnNhZmVseVJ1blVuaWZpZWRDY0Zsb3cgPSBhc3luYyAoe1xuICBjb250ZXh0LFxuICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gIG5vbkNkZUZvcm1JbnB1dHMsXG4gIGZvcm1DYWxsYmFja3MsXG4gIGN1c3RvbVBhcmFtc1xufSkgPT4ge1xuICBsb2dfXyRjKGDilJwgUnVubmluZyB1bmlmaWVkIENDIGZsb3cuLi5gLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZCB9KTtcbiAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gIGxvZ19fJGMoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgaW4gdGhlIGNoZWNrb3V0IGF0dGVtcHQgbG9nc1xuICAgICAgZGV2aWNlVG9rZW46IGdldERldmljZVRva2VuKClcbiAgICB9LFxuICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IHRydWUsXG4gICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB7XG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9LFxuICAgIHBheW1lbnRfcm91dGVfaWQ6IGN1c3RvbVBhcmFtcy5wYXltZW50Um91dGVJZFxuICB9O1xuICBlcnJfXyRkKGN1c3RvbVBhcmFtcywgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICBsb2dfXyRjKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gUGFydGlhbCBQTXMgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkXG4gIH0pO1xuICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBzdGFydFBmUmVzdWx0ID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvckNDKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgbG9nX18kYyhg4pScIHN0YXJ0UGYgcmVzdWx0YCwgc3RhcnRQZlJlc3VsdCk7XG4gIGlmIChzdGFydFBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHN0YXJ0UGZSZXN1bHQpO1xuICB9XG4gIGlmICghc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgYXR0ZW1wdCBJRCBmcm9tIFBGIHJlc3VsdFwiKTtcbiAgfVxuICByZXR1cm4gcnVuQ29uZmlybUxvb3Aoe1xuICAgIGNvbnRleHQsXG4gICAgcHJlZmlsbCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgc3RhcnRQZlJlc3VsdCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufTtcbmNvbnN0IHJ1bkNvbmZpcm1Mb29wID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dCxcbiAgICBwcmVmaWxsLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICBzdGFydFBmUmVzdWx0LFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkXG4gIH0gPSBwYXJhbXM7XG4gIGxldCBwZlJlc3VsdCA9IHN0YXJ0UGZSZXN1bHQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TOyBpKyspIHtcbiAgICBsb2dfXyRjKGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7aX1gKTtcbiAgICB0cmFjayhcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogaSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb24gfSA9IHZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uKHBmUmVzdWx0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlckFjdGlvblJlc3VsdCA9IGF3YWl0IHJ1blJlcXVpcmVkVXNlckFjdGlvbihjb250ZXh0LmJhc2VVcmwsIHVzZXJBY3Rpb24sIHByZWZpbGwsIG5vbkNkZUZvcm1JbnB1dHMpO1xuICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhLFxuICAgICAgICAuLi51c2VyQWN0aW9uUmVzdWx0Lm1ldGFkYXRhRm9yQ29uZmlybVN0ZXBcbiAgICAgIH07XG4gICAgICBsb2dfXyRjKGDilJwgTmV3IGV4dHJhIG1ldGFkYXRhYCwgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgZXJyX18kZChg4pScIEVycm9yIGluIHJ1bm5pbmcgdXNlciBhY3Rpb24gaW4gaXRlcmF0aW9uICR7aX0uIENvbnRpbnVpbmcgdG8gY29uZmlybSBzdGVwLi4uYCwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwidW5pZmllZF9jY191c2VyX2FjdGlvbl9lcnJvclwiLCB7IGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSwgaXRlcmF0aW9uOiBpIH0pO1xuICAgIH1cbiAgICBwZlJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjaGVja291dEF0dGVtcHRJZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFcbiAgICB9KTtcbiAgICBsb2dfXyRjKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7aX0pYCwgcGZSZXN1bHQpO1xuICAgIGlmIChwZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHBmUmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgdHJhY2soXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogcGZSZXN1bHQuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICBjb25maXJtUEZSZXN1bHQ6IHBmUmVzdWx0XG4gIH0pO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBlcnJvciwgcGxlYXNlIHRyeSBhbm90aGVyIHBheW1lbnQgbWV0aG9kXCIpO1xufTtcbmNvbnN0IHJ1blJlcXVpcmVkVXNlckFjdGlvbiA9IGFzeW5jIChiYXNlVXJsLCB1c2VyQWN0aW9uLCBwcmVmaWxsLCBub25DZGVGb3JtSW5wdXRzKSA9PiB7XG4gIGlmICh1c2VyQWN0aW9uLl91bmlmaWVkX2NjX2FjdGlvbl9uYW1lID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgaWYgKHVzZXJBY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpIHtcbiAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhwYXJzZVVzZXJGRVBheWxvYWQodXNlckFjdGlvbikpO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB9IGVsc2UgaWYgKGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFpcndhbGxleDNkc0Zsb3coYmFzZVVybCwgdXNlckFjdGlvbik7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCB9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmUmVxdWlyZXNBZHllbjNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWR5ZW4zZHNGbG93KFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgdXNlckFjdGlvbixcbiAgICAgICAgcHJlZmlsbC5sb2NhbGVcbiAgICAgICk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFkeWVuOiBhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQgfSB9O1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJZlJlcXVpcmVzQ3liZXJzb3VyY2UzZHModXNlckFjdGlvbikpIHtcbiAgICAgIGF3YWl0IHJ1bkN5YmVyc291cmNlM2RzRmxvdyh1c2VyQWN0aW9uKTtcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHt9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmTGVnYWN5M0RTUGF0aCh1c2VyQWN0aW9uKSkge1xuICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHsgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBbdXNlckFjdGlvbl0gfSwgYmFzZVVybCk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCAzRFMgdXNlciBhY3Rpb246ICR7SlNPTi5zdHJpbmdpZnkodXNlckFjdGlvbil9YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICB9XG59O1xuY29uc3QgY2hlY2tJZkxlZ2FjeTNEU1BhdGggPSAodXNlckFjdGlvbikgPT4ge1xuICB0cnkge1xuICAgIHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhKFt1c2VyQWN0aW9uXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuY29uc3QgdmFsaWRhdGVQZlJlc3VsdFVzZXJBY3Rpb24gPSAocGZSZXN1bHQpID0+IHtcbiAgaWYgKCFwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSBpZiAocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIHJlcXVpcmVkIHVzZXIgYWN0aW9uc1wiKTtcbiAgfSBlbHNlIGlmIChwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG11bHRpcGxlIHJlcXVpcmVkIHVzZXIgYWN0aW9uc1wiKTtcbiAgfVxuICBjb25zdCB1c2VyQWN0aW9uID0gVXNlckFjdGlvbkZFUGF5bG9hZC5zYWZlUGFyc2UocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgaWYgKCF1c2VyQWN0aW9uLnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRkKFwiVXNlciBhY3Rpb24gcmF3IHBheWxvYWRcIiwgcGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgICBlcnJfXyRkKFwiUGFyc2luZyBlcnJvclwiLCB1c2VyQWN0aW9uLmVycm9yKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB1c2VyQWN0aW9uOiB1c2VyQWN0aW9uLmRhdGFcbiAgfTtcbn07XG5jb25zdCByZXR1cm5TdWNjZXNzUmVzdWx0ID0gKHByZWZpbGxNb2RlLCBwZlJlc3VsdCkgPT4ge1xuICBpZiAocHJlZmlsbE1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIGNvbnN0IHBheW1lbnRNZXRob2RJZCA9IHBmUmVzdWx0LmNjX3BtX2lkID8/IHBmUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdLmlkO1xuICAgIGlmICghcGF5bWVudE1ldGhvZElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBwYXltZW50TWV0aG9kSWRcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghcGZSZXN1bHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IHBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRiLCBlcnJfXzogZXJyX18kYyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IHJ1bkNvbW1vbkNjRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJGIoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cmFjayhcImNvbW1vbl9jY19mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgLi4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJlZmlsbFxuICAgIH0pO1xuICAgIGNvbnN0IHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyA9IHByZWZpbGwuZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzPy5bXCJ1bmlmaWVkX2NjXCJdID8/IDA7XG4gICAgbG9nX18kYihg4pScIFVuaWZpZWQgQ0Mgcm9sbG91dDogJHtNYXRoLnJvdW5kKHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyAqIDEwMCl9JWApO1xuICAgIGNvbnN0IHJvbGwgPSBNYXRoLnJhbmRvbSgpO1xuICAgIGNvbnN0IHVzZVVuaWZpZWRDQ0Zsb3cgPSByb2xsIDwgdW5pZmllZENDUm9sbG91dFJhdGlvO1xuICAgIGNvbnN0IHVjY1JvbGxUcmFja2luZ01ldGFkYXRhID0ge1xuICAgICAgcm9sbCxcbiAgICAgIHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyxcbiAgICAgIHVzZVVuaWZpZWRDQ0Zsb3dcbiAgICB9O1xuICAgIGlmICh1c2VVbmlmaWVkQ0NGbG93KSB7XG4gICAgICBsb2dfXyRiKGDilJwgUGlja2VkIHVuaWZpZWQgQ0MgZmxvdyAoJHtyb2xsfSB2cyAke3VuaWZpZWRDQ1JvbGxvdXRSYXRpb30pYCk7XG4gICAgICB0cmFjayhcInVuaWZpZWRfY2NfZmxvd19waWNrZWRcIiwgdWNjUm9sbFRyYWNraW5nTWV0YWRhdGEpO1xuICAgICAgcmV0dXJuIHVuc2FmZWx5UnVuVW5pZmllZENjRmxvdyh7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zLFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyRiKGDilJwgUGlja2VkIGxlZ2FjeSBDQyBmbG93ICgke3JvbGx9IHZzICR7dW5pZmllZENDUm9sbG91dFJhdGlvfSlgKTtcbiAgICAgIHRyYWNrKFwibGVnYWN5X2NjX2Zsb3dfcGlja2VkXCIsIHVjY1JvbGxUcmFja2luZ01ldGFkYXRhKTtcbiAgICB9XG4gICAgbG9nX18kYihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBjb25zdCBjb21tb25DaGVja291dFBhcmFtcyA9IHtcbiAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfSxcbiAgICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IGZhbHNlLFxuICAgICAgcGF5bWVudF9yb3V0ZV9pZDogY3VzdG9tUGFyYW1zLnBheW1lbnRSb3V0ZUlkLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKCksXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgbG9nX18kYihg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJGIoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNldHVwQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyRiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7cmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJGIoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJGIoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDZGVFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgICBsb2dfXyRiKGDilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93YCk7XG4gICAgICAgICAgbG9nX18kYihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICB0cmFjayhcIjNkc19yZXF1aXJlZFwiLCB7XG4gICAgICAgICAgICAuLi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgICAgICAuLi5lcnJvci5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgZXJySGVhZGVycyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnMgPz8ge307XG4gICAgICAgICAgaWYgKFwib3AtZXhpc3RpbmctY2MtcG0taWRcIiBpbiBlcnJIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZCA9IGVyckhlYWRlcnNbXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiXTtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNQb2NreXQzZHMgPSBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzUG9ja3l0M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyRiKGDilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5Qb2NreXQzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcInBvY2t5dFwiXSA9IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQWlyd2FsbGV4M2RzID0gY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzKGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGlmIChyZXF1aXJlc0FpcndhbGxleDNkcykge1xuICAgICAgICAgICAgbG9nX18kYihg4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuYCk7XG4gICAgICAgICAgICBjb25zdCBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWlyd2FsbGV4M2RzRmxvdyhjb250ZXh0LmJhc2VVcmwsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhaXJ3YWxsZXhcIl0gPSBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXF1aXJlc0FkeWVuM2RzID0gY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWR5ZW4zZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFkeWVuM2RzRmxvdyhcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICAgIHByZWZpbGwubG9jYWxlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhZHllblwiXSA9IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kYihg4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6YCwgc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgY29uc3QgY3liZXJzb3VyY2VBY3Rpb24gPSBzdGFydFBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiY3liZXJzb3VyY2VfcGF5ZXJfYXV0aFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY3liZXJzb3VyY2VBY3Rpb24pIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBDeWJlcnNvdXJjZSAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBDeWJlcnNvdXJjZSAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCA9IEN5YmVyc291cmNlQWN0aW9uUGF5bG9hZC5wYXJzZShjeWJlcnNvdXJjZUFjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5DeWJlcnNvdXJjZTNkc0Zsb3coe1xuICAgICAgICAgICAgICAuLi5jeWJlcnNvdXJjZUFjdGlvblBheWxvYWQsXG4gICAgICAgICAgICAgIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgICBfdW5pZmllZF9jY19wY2NzX2lkOiBcIlwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wiY3liZXJzb3VyY2VcIl0gPSBjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVN0cmlwZUZsb3cgPSBlcnJvci5yZXNwb25zZS5oZWFkZXJzPy5bXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdICE9PSBcInRydWVcIjtcbiAgICAgICAgICBpZiAoIXJlcXVpcmVzUG9ja3l0M2RzICYmICFjeWJlcnNvdXJjZUFjdGlvbikge1xuICAgICAgICAgICAgaWYgKHNob3VsZFVzZVN0cmlwZUZsb3cpIHtcbiAgICAgICAgICAgICAgbG9nX18kYihg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBzdHJpcGVDQzNEU0Zsb3cocGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nX18kYihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBjb21tb25DQzNEU0Zsb3coc3RhcnRQZlJlc3VsdCwgY29udGV4dC5iYXNlVXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nX18kYihg4pScIFByZS1zdGFydCAzRFMgaXMgc3VjY2Vzc2Z1bCwgb3RoZXIgM0RTIGZsb3dzIHdpbGwgYmUgc2tpcHBlZC5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY2NQbUlkID0gc3RhcnRQZlJlc3VsdC5jY19wbV9pZDtcbiAgICAgICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7Y2NQbUlkfV1gKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBjY1BtSWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kYihg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBsb2dfXyRiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7IXNob3VsZFVzZVN0cmlwZUZsb3cgPyBcIm5ld1wiIDogXCJsZWdhY3lcIn1dYCk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogY2NQbUlkLFxuICAgICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiBzaG91bGRVc2VTdHJpcGVGbG93XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycl9fJGMoYOKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERWApO1xuICAgICAgZXJyX18kYyhlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBzdHJpcGVBY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIXN0cmlwZUFjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICB9XG4gIHJldHVybiBTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2Uoc3RyaXBlQWN0aW9uKTtcbn07XG5jb25zdCBjb21tb24zRFNBY3Rpb25UeXBlcyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXTtcbmNvbnN0IHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBjb21tb24zRFNBY3Rpb25UeXBlcy5pbmNsdWRlcyhhY3Rpb24udHlwZSkpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICB9XG4gIHJldHVybiBDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBjb21tb25DQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCwgYmFzZVVybCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgbG9nX18kYihg4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlgKTtcbiAgICB0cmFjayhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nX18kYihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke25leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmx9XWApO1xuICB0cmFjayhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4ubmV4dEFjdGlvbk1ldGFkYXRhXG4gIH0pO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJGIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdHJhY2soXCIzZHNfY2FuY2VsbGVkXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRyYWNrKFwiM2RzX2ZhaWx1cmVcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbiAgdHJhY2soXCJjb21tb25fM2RzX2NvbXBsZXRlZFwiKTtcbn07XG5cbmNvbnN0IExvb3BDcnlwdG9DcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6LnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogei5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHouc3RyaW5nKCksXG4gICAgc3VwcG9ydGVkX2N1cnJlbmNpZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRhLCBlcnJfXzogZXJyX18kYiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJsb29wLWNyeXB0b1wiKTtcbmNvbnN0IGluaXRMb29wRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQgfSkgPT4ge1xuICAgIGxvZ19fJGEoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgTG9vcCBDcnlwdG8uLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTG9vcENyeXB0b0NwbSk7XG4gICAgbG9nX18kYShgY2hlY2tvdXRQYXltZW50TWV0aG9kOiAke0pTT04uc3RyaW5naWZ5KGNoZWNrb3V0UGF5bWVudE1ldGhvZCl9YCk7XG4gICAgbG9nX18kYShgU3RhcnRpbmcgTG9vcCBDcnlwdG8gZmxvdy4uLmApO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KFxuICAgICAgY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgcHJlZmlsbC50b2tlbixcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgdm9pZCAwXG4gICAgKTtcbiAgICBpZiAoIWlzU2V0dXBNb2RlICYmICFjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXMuaW5jbHVkZXMocHJlZmlsbC5jdXJyZW5jeSkpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtwcmVmaWxsLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEgfHwgIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEubmV4dF9hY3Rpb25fbWV0YWRhdGEpIHtcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50U2V0dXBJbmZvID0gcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IHBheW1lbnRTZXR1cEluZm9bXCJhdXRob3JpemF0aW9uX2Ftb3VudFwiXTtcbiAgICBsZXQgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IHBheW1lbnRTZXR1cEluZm9bXCJtaW5fYXV0aG9yaXphdGlvbl9hbW91bnRcIl07XG4gICAgY29uc3QgYWxsb3dDdXN0b21lclRvQ2hvb3NlQXV0aCA9IHBheW1lbnRTZXR1cEluZm9bXCJhbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aFwiXTtcbiAgICBsZXQgY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIGNoYXJnZUFtb3VudFVzZEF0b20gPSAwO1xuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFyZ2VBbW91bnRVc2RBdG9tID0gKGluaXRpYWxQcmV2aWV3ID8gaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSA6IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20pICogcGF5bWVudFNldHVwSW5mb1tcInRva2VuX3ByaWNlXCJdO1xuICAgICAgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQsIGNoYXJnZUFtb3VudFVzZEF0b20pO1xuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50VXNkQW1vdW50ID0gY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBjb25zdCBjdXN0b21lclJlZklkID0gdjQoKTtcbiAgICBjb25zdCB3aWRnZXRQcm9wcyA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50LFxuICAgICAgY3VzdG9tZXJSZWZJZCxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoXG4gICAgfTtcbiAgICBjb25zdCBpbml0TG9vcENvbm5lY3RQcm9wcyA9IHtcbiAgICAgIGFwaVRva2VuOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuYXBpX3Rva2VuLFxuICAgICAgZW50aXR5SWQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5lbnRpdHlfaWQsXG4gICAgICBtZXJjaGFudElkOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmVudmlyb25tZW50XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICB3aWRnZXRQcm9wcyxcbiAgICAgIGluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkxvb3BGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kYShgUnVubmluZyBMb29wIGZsb3cuLi5gKTtcbiAgICBsb2dfXyRhKFwiY29udGV4dFwiLCBjb250ZXh0KTtcbiAgICBsb2dfXyRhKFwiY2hlY2tvdXRQYXltZW50TWV0aG9kXCIsIGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgbG9nX18kYShcIm5vbkNkZUZvcm1JbnB1dHNcIiwgbm9uQ2RlRm9ybUlucHV0cyk7XG4gICAgbG9nX18kYShcImZsb3dDYWxsYmFja3NcIiwgZm9ybUNhbGxiYWNrcyk7XG4gICAgbG9nX18kYShcImN1c3RvbVBhcmFtc1wiLCBjdXN0b21QYXJhbXMpO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kYShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgaXNDaGVja291dE1vZGUgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBjdXN0b21lckZpZWxkcyA9IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgaWYgKCFjdXN0b21QYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIH1cbiAgICBpZiAoIWN1c3RvbVBhcmFtcy5zdWNjZXNzKSB7XG4gICAgICB0cmFjayhcImxvb3BfcGF5X2Zsb3dfZmFpbHVyZVwiLCBjdXN0b21QYXJhbXMpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBTdWNjZXNzIGlzIG5vdCB0cnVlLlwiKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAuLi5jdXN0b21lckZpZWxkcyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNDaGVja291dE1vZGUsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzQ2hlY2tvdXRNb2RlID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogY3VzdG9tUGFyYW1zLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkLFxuICAgICAgLy8gTk9URTogd2UgZG8gaGF2ZSB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBpZCBoZXJlIGV2ZW4gaWYgaXRzIGEgc2V0dXAsIGJ1dCBmb3Igbm93IHdlIGRvbid0IGluY2x1ZGUgaXRcbiAgICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBjaGVja291dCBhdHRlbXB0IHN1cHBvcnQgZm9yIHNldHVwIGludGVudHMuXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBpc0NoZWNrb3V0TW9kZSA/IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IGN1c3RvbVBhcmFtcy5jdXN0b21lcixcbiAgICAgICAgbG9vcF9wYXltZW50X21ldGhvZDogY3VzdG9tUGFyYW1zLnBheW1lbnRNZXRob2QsXG4gICAgICAgIGxvb3Bfc3VjY2VzczogY3VzdG9tUGFyYW1zLnN1Y2Nlc3MsXG4gICAgICAgIGxvb3BfcGF5aW5faWQ6IGN1c3RvbVBhcmFtcy5wYXlpbklkXG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kYShgQ29uZmlybSByZXN1bHQ6ICR7Y29uZmlybVJlc3VsdH1gKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJGEoYERvaW5nIHBheW1lbnQgc2V0dXAuLi5gKTtcbiAgICAgIGxvZ19fJGEoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgbG9nX18kYShg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2NyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyRhKGBEb2luZyBjaGVja291dC4uLmApO1xuICAgICAgaWYgKCFjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJGIoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDksIGVycl9fOiBlcnJfXyRhIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBheXBhbFwiKTtcbmNvbnN0IFBheXBhbENwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHsgY2xpZW50X2lkOiB6LnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbmNvbnN0IGluaXRQYXlwYWxGbG93ID0gYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gIGNvbnN0IHBheXBhbENwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQYXlwYWxDcG0pO1xuICBpZiAoIXBheXBhbENwbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlBheVBhbCBDUE0gbm90IGZvdW5kIGluIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHNcIik7XG4gIH1cbiAgY29uc3Qgc3RhcnRGbG93ID0gKCkgPT4ge1xuICAgIHJldHVybiBPanNGbG93cy5wYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHBheXBhbENwbSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgc3RhcnRGbG93XG4gIH07XG59O1xuY29uc3QgcnVuUGF5cGFsRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBsb2dfXyQ5KGBSdW5uaW5nIFBheVBhbCBmbG93Li4uYCk7XG4gICAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBjb25zdCB7IGlzQW5vbnltb3VzLCB1c2VSZWRpcmVjdEZsb3cgfSA9IGN1c3RvbVBhcmFtcy5zZXR0aW5ncyA/PyB7fTtcbiAgICAgIGxvZ19fJDkoYFZlcmlmeWluZyBDUE0uLi5gKTtcbiAgICAgIGNvbnN0IGNwbSA9IFBheXBhbENwbS5wYXJzZShjaGVja291dFBheW1lbnRNZXRob2QpO1xuICAgICAgbG9nX18kOShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc2ApO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLCB7XG4gICAgICAgIC4uLmlzQW5vbnltb3VzID8gZ2VuZXJhdGVBbm9ueW1vdXNWYWx1ZXMoKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXdDdXN0b21lckZpZWxkcyA9IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgICBsb2dfXyQ5KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtwcmVmaWxsLm1vZGV9YCk7XG4gICAgICBjb25zdCBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93ID0gdjQoKTtcbiAgICAgIGNvbnN0IGlzUGF5Rmlyc3RGbG93ID0gZmFsc2U7XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVxdWVzdCA9IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY3BtLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY3BtLFxuICAgICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGlzUGF5Rmlyc3RGbG93LFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzUGF5Rmlyc3RGbG93ID8ge1xuICAgICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgICAgfSA6IHZvaWQgMCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiB1c2VSZWRpcmVjdEZsb3csXG4gICAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3dcbiAgICAgICAgfSxcbiAgICAgICAgLi4ubmV3Q3VzdG9tZXJGaWVsZHNcbiAgICAgIH07XG4gICAgICBjb25zdCBwcmVBY3Rpb25VcmwgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBlbmNvZGVkUmVxdWVzdCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoc3RhcnRQYXltZW50Rmxvd1JlcXVlc3QpKTtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBzdDogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcjogZW5jb2RlZFJlcXVlc3RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSBgJHtwcmVBY3Rpb25Vcmx9PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICAgIGlmICh1c2VSZWRpcmVjdEZsb3cpIHtcbiAgICAgICAgbG9nX18kOShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFVybDtcbiAgICAgICAgYXdhaXQgc2xlZXAoMjAgKiAxZTMpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSBhd2FpdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0KFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93LFxuICAgICAgICByZWRpcmVjdFVybFxuICAgICAgKTtcbiAgICAgIGxvZ19fJDkoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgcGF5cGFsRmxvd1Jlc3VsdCk7XG4gICAgICBjb25zdCBjaGVja291dEF0dGVtcHRJZCA9IHBhcnNlQXJnRnJvbUhyZWYocGF5cGFsRmxvd1Jlc3VsdC5ocmVmLCBcImNhdHRcIik7XG4gICAgICBjb25zdCBhcHByb3ZhbFNlc3Npb25JZCA9IHBhcnNlQXJnRnJvbUhyZWYocGF5cGFsRmxvd1Jlc3VsdC5ocmVmLCBcImFwcHJvdmFsX3Nlc3Npb25faWRcIik7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBpc1BheUZpcnN0RmxvdyA/IGNoZWNrb3V0QXR0ZW1wdElkIDogdm9pZCAwLFxuICAgICAgICB0aGVpcl9wbV9pZDogaXNQYXlGaXJzdEZsb3cgPyBhcHByb3ZhbFNlc3Npb25JZCA6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICBsb2dfXyQ5KFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwicGF5cGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY3BtLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogaXNQYXlGaXJzdEZsb3dcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kYShcIlBheVBhbCBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwicGF5cGFsXCIsIGVycm9yOiBlcnIgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDgsIGVycl9fOiBlcnJfXyQ5IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBvY2t5dC1wYXlwYWxcIik7XG5jb25zdCBQb2NreXRQYXlwYWxDcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6LnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0UG9ja3l0UGF5cGFsRmxvdyA9IGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICBjb25zdCBwb2NreXRQYXlwYWxDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgUG9ja3l0UGF5cGFsQ3BtKTtcbiAgaWYgKCFwb2NreXRQYXlwYWxDcG0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2NreXQgUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgfVxuICBjb25zdCBzdGFydEZsb3cgPSAoKSA9PiB7XG4gICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgY29udGV4dCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcG9ja3l0UGF5cGFsQ3BtLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBzdGFydEZsb3dcbiAgfTtcbn07XG5jb25zdCBydW5Qb2NreXRQYXlwYWxGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kOChgUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDgoYFZlcmlmeWluZyBDUE0uLi5gKTtcbiAgICBjb25zdCBjcG0gPSBQb2NreXRQYXlwYWxDcG0ucGFyc2UoY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICBsb2dfXyQ4KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzYCk7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBjdXN0b21QYXJhbXM/LnNldHRpbmdzO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHNldHRpbmdzPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICBsb2dfXyQ4KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtwcmVmaWxsLm1vZGV9YCk7XG4gICAgY29uc3QgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyA9IHY0KCk7XG4gICAgY29uc3QgaXNQYXlGaXJzdEZsb3cgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVxdWVzdCA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNwbS5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjcG0sXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGlzUGF5Rmlyc3RGbG93LFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBpc1BheUZpcnN0RmxvdyA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhIWN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0RmxvdyxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3dcbiAgICAgIH0sXG4gICAgICAuLi5uZXdDdXN0b21lckZpZWxkc1xuICAgIH07XG4gICAgY29uc3QgcHJlQWN0aW9uVXJsID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGVuY29kZWRSZXF1ZXN0ID0gYnRvYShKU09OLnN0cmluZ2lmeShzdGFydFBheW1lbnRGbG93UmVxdWVzdCkpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHByZWZpbGwudG9rZW4sXG4gICAgICByOiBlbmNvZGVkUmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gYCR7cHJlQWN0aW9uVXJsfT8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWA7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0Rmxvdykge1xuICAgICAgbG9nX18kOChcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RVcmw7XG4gICAgICBhd2FpdCBzbGVlcCgyMCAqIDFlMyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICB9XG4gICAgbG9nX18kOChcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICBsb2dfXyQ4KGBPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5gKTtcbiAgICBjb25zdCBwYXlwYWxGbG93UmVzdWx0ID0gYXdhaXQgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdChcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyxcbiAgICAgIHJlZGlyZWN0VXJsXG4gICAgKTtcbiAgICBsb2dfXyQ4KFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHBheXBhbEZsb3dSZXN1bHQpO1xuICAgIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgIGNvbnN0IGNoZWNrb3V0QXR0ZW1wdElkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIWNoZWNrb3V0QXR0ZW1wdElkKSB7XG4gICAgICBlcnJfXyQ5KFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCBwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIH1cbiAgICBsb2dfXyQ4KGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke3ZhdWx0SWR9YCk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogdmF1bHRJZCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzUGF5Rmlyc3RGbG93ID8gY2hlY2tvdXRBdHRlbXB0SWQgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBsb2dfXyQ4KFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJDkoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDcsIGVycl9fOiBlcnJfXyQ4IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1hZmZpcm1cIik7XG5jb25zdCBTdHJpcGVBZmZpcm1DcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhZmZpcm1cIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUFmZmlybVJlcXVpcmVkVXNlckFjdGlvbnMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpLm51bGxpc2goKSxcbiAgICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRTdHJpcGVBZmZpcm1GbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kNyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgQWZmaXJtLi4uYCk7XG4gICAgY29uc3Qgc3RyaXBlQWZmaXJtQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUFmZmlybUNwbSk7XG4gICAgaWYgKCFzdHJpcGVBZmZpcm1DcG0pIHtcbiAgICAgIGxvZ19fJDcoYE5vIFN0cmlwZSBBZmZpcm0gQ1BNIGZvdW5kYCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIH1cbiAgICBsb2dfXyQ3KGBTdGFydGluZyBzdHJpcGUgYWZmaXJtIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgICBsb2dfXyQ3KGBTZXR1cCBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFN0cmlwZSBBZmZpcm0gZmxvd2ApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZUFmZmlybS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVBZmZpcm1DcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IGN1c3RvbVBhcmFtcyA/PyB7fSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyQ4KGBFcnJvciBzdGFydGluZyBBZmZpcm0gZmxvdzpgLCBlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgc3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZUFmZmlybUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHsgY29udGV4dCwgY2hlY2tvdXRQYXltZW50TWV0aG9kLCBub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ3KGBSdW5uaW5nIFN0cmlwZSBBZmZpcm0gcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDcoYFZhbGlkYXRpbmcgZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBsb2dfXyQ3KGBDcmVhdGluZyBjYXJ0IGluZm8gZm9yIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgY29uc3QgY2FydEluZm8gPSB7XG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBwcmljZV9pZDogaXRlbS5wcmljZV9pZCxcbiAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHlcbiAgICAgIH0pKSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0gfHwgdm9pZCAwLFxuICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfTtcbiAgICBsb2dfXyQ3KGBTdGFydGluZyBwYXktZmlyc3QgcGF5bWVudCBmbG93IGZvciBBZmZpcm0uLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHRydWUsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGNhcnRJbmZvLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgbG9nX18kNyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IFN0cmlwZUFmZmlybVJlcXVpcmVkVXNlckFjdGlvbnMucGFyc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gICAgY29uc3QgeyBjbGllbnRfc2VjcmV0IH0gPSBuZXh0QWN0aW9uTWV0YWRhdGFbMF07XG4gICAgbG9nX18kNyhcIkNsaWVudCBzZWNyZXQgZm9yIHBheW1lbnQgaW50ZW50XCIsIGNsaWVudF9zZWNyZXQpO1xuICAgIGNvbnN0IHN0cmlwZUFmZmlybUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVBZmZpcm1DcG0pO1xuICAgIGlmICghc3RyaXBlQWZmaXJtQ3BtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpcGUgQWZmaXJtIENQTSBub3QgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHsgc3RyaXBlIH0gPSBhd2FpdCBjcmVhdGVTdHJpcGVFbGVtZW50cyhzdHJpcGVBZmZpcm1DcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInBheW1lbnRcIixcbiAgICAgIC8vIFVzZSBwYXltZW50IG1vZGUgZm9yIHBheS1maXJzdCBmbG93XG4gICAgICBjdXJyZW5jeTogcHJlZmlsbC5jdXJyZW5jeSA/PyBcInVzZFwiLFxuICAgICAgYW1vdW50OiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfSk7XG4gICAgbG9nX18kNyhcIlN0cmlwZSBpbnN0YW5jZSBjcmVhdGVkXCIsIHN0cmlwZSk7XG4gICAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBjdXN0b21lck5hbWUgPSBgJHtub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXX0gJHtub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdfWA7XG4gICAgY29uc3QgYWZmaXJtUGF5bWVudERhdGEgPSB7XG4gICAgICByZXR1cm5fdXJsOiBuZXcgVVJMKFwiL2FwcC8zZHMvc3VjY2Vzcy9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpLFxuICAgICAgcGF5bWVudF9tZXRob2Q6IHtcbiAgICAgICAgYmlsbGluZ19kZXRhaWxzOiB7XG4gICAgICAgICAgZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgICBuYW1lOiBjdXN0b21lck5hbWUsXG4gICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgbGluZTE6IGJpbGxpbmdBZGRyZXNzLmxpbmUxLFxuICAgICAgICAgICAgbGluZTI6IGJpbGxpbmdBZGRyZXNzLmxpbmUyIHx8IHZvaWQgMCxcbiAgICAgICAgICAgIGNpdHk6IGJpbGxpbmdBZGRyZXNzLmNpdHksXG4gICAgICAgICAgICBzdGF0ZTogYmlsbGluZ0FkZHJlc3Muc3RhdGUsXG4gICAgICAgICAgICBjb3VudHJ5OiBiaWxsaW5nQWRkcmVzcy5jb3VudHJ5LFxuICAgICAgICAgICAgcG9zdGFsX2NvZGU6IGJpbGxpbmdBZGRyZXNzLnppcF9jb2RlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhZmZpcm1PcHRpb25zID0ge1xuICAgICAgaGFuZGxlQWN0aW9uczogZmFsc2VcbiAgICB9O1xuICAgIGxvZ19fJDcoYENvbmZpcm1pbmcgQWZmaXJtIHBheW1lbnQgd2l0aCBjbGllbnQgc2VjcmV0OiAke2NsaWVudF9zZWNyZXR9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZXJyb3IsIHBheW1lbnRJbnRlbnQgfSA9IGF3YWl0IHN0cmlwZS5jb25maXJtQWZmaXJtUGF5bWVudChcbiAgICAgICAgY2xpZW50X3NlY3JldCxcbiAgICAgICAgYWZmaXJtUGF5bWVudERhdGEsXG4gICAgICAgIGFmZmlybU9wdGlvbnNcbiAgICAgICk7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18kOChcIkFmZmlybSBwYXltZW50IGNvbmZpcm1hdGlvbiBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFmZmlybSBwYXltZW50IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgbG9nX18kNyhcIkFmZmlybSBwYXltZW50IGNvbmZpcm1lZCBzdWNjZXNzZnVsbHlcIiwgcGF5bWVudEludGVudCk7XG4gICAgICBjb25zdCByZWRpcmVjdFVybCA9IHBheW1lbnRJbnRlbnQ/Lm5leHRfYWN0aW9uPy5yZWRpcmVjdF90b191cmw/LnVybDtcbiAgICAgIGlmICghcmVkaXJlY3RVcmwpIHtcbiAgICAgICAgZXJyX18kOChcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBLbGFybmEgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihcIktsYXJuYSBwYXltZW50IGZhaWxlZFwiKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgICAgcmVzdWx0OiB7IGludm9pY2VfdXJsczogW10sIHN1YnNjcmlwdGlvbl9pZHM6IFtdLCBjdXN0b21lcl9pZDogXCJcIiwgcGF5bWVudF9tZXRob2RfaWQ6IFwiXCIgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgbG9nX18kNyhcIlBheW1lbnQgcmVxdWlyZXMgYWRkaXRpb25hbCBhY3Rpb24sIHN0YXJ0aW5nIDNEUyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJBZmZpcm0gdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgICAgbG9nX18kNyhcIjNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgIGNvbnN0IHRoZWlyUGF5bWVudE1ldGhvZCA9IHBheW1lbnRJbnRlbnQ/LnBheW1lbnRfbWV0aG9kPy50b1N0cmluZygpID8/IHZvaWQgMDtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgICAgICB0aGVpcl9wbV9pZDogdGhlaXJQYXltZW50TWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDcoXCJQYXltZW50IGZsb3cgY29uZmlybWVkXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwic3RyaXBlLWFmZmlybVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyX18kOChcIkVycm9yIGluIEFmZmlybSBwYXltZW50IGZsb3c6XCIsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNiwgZXJyX186IGVycl9fJDcgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWFmdGVycGF5XCIpO1xuY29uc3QgU3RyaXBlQWZ0ZXJwYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhZnRlcnBheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgU3RyaXBlQWZ0ZXJwYXlSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5udWxsaXNoKCksXG4gICAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlQWZ0ZXJwYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kNihgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgQWZ0ZXJwYXkuLi5gKTtcbiAgICBjb25zdCBzdHJpcGVBZnRlcnBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVBZnRlcnBheUNwbSk7XG4gICAgaWYgKCFzdHJpcGVBZnRlcnBheUNwbSkge1xuICAgICAgbG9nX18kNihgTm8gU3RyaXBlIEFmdGVycGF5IENQTSBmb3VuZGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB9XG4gICAgbG9nX18kNihgU3RhcnRpbmcgc3RyaXBlIGFmdGVycGF5IGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgICBsb2dfXyQ2KGBTZXR1cCBtb2RlIG5vdCBzdXBwb3J0ZWQgZm9yIFN0cmlwZSBBZnRlcnBheSBmbG93YCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIH1cbiAgICBjb25zdCBzdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlQWZ0ZXJwYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogc3RyaXBlQWZ0ZXJwYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IGN1c3RvbVBhcmFtcyA/PyB7fSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyQ3KGBFcnJvciBzdGFydGluZyBBZnRlcnBheSBmbG93OmAsIGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBzdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlQWZ0ZXJwYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7IGNvbnRleHQsIGNoZWNrb3V0UGF5bWVudE1ldGhvZCwgbm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kNihgUnVubmluZyBTdHJpcGUgQWZ0ZXJwYXkgcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDYoYFZhbGlkYXRpbmcgZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBsb2dfXyQ2KGBDcmVhdGluZyBjYXJ0IGluZm8gZm9yIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgY29uc3QgY2FydEluZm8gPSB7XG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBwcmljZV9pZDogaXRlbS5wcmljZV9pZCxcbiAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHlcbiAgICAgIH0pKSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0gfHwgdm9pZCAwLFxuICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfTtcbiAgICBsb2dfXyQ2KGBTdGFydGluZyBwYXktZmlyc3QgcGF5bWVudCBmbG93IGZvciBBZnRlcnBheS4uLmApO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogdHJ1ZSxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogY2FydEluZm8sXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBsb2dfXyQ2KFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlQWZ0ZXJwYXlSZXF1aXJlZFVzZXJBY3Rpb25zLnBhcnNlKFxuICAgICAgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1xuICAgICk7XG4gICAgY29uc3QgeyBjbGllbnRfc2VjcmV0IH0gPSBuZXh0QWN0aW9uTWV0YWRhdGFbMF07XG4gICAgbG9nX18kNihcIkNsaWVudCBzZWNyZXQgZm9yIHBheW1lbnQgaW50ZW50XCIsIGNsaWVudF9zZWNyZXQpO1xuICAgIGNvbnN0IHN0cmlwZUFmdGVycGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUFmdGVycGF5Q3BtKTtcbiAgICBpZiAoIXN0cmlwZUFmdGVycGF5Q3BtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpcGUgQWZ0ZXJwYXkgQ1BNIG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUFmdGVycGF5Q3BtLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJwYXltZW50XCIsXG4gICAgICAvLyBVc2UgcGF5bWVudCBtb2RlIGZvciBwYXktZmlyc3QgZmxvd1xuICAgICAgY3VycmVuY3k6IHByZWZpbGwuY3VycmVuY3kgPz8gXCJ1c2RcIixcbiAgICAgIGFtb3VudDogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgIH0pO1xuICAgIGxvZ19fJDYoXCJTdHJpcGUgaW5zdGFuY2UgY3JlYXRlZFwiLCBzdHJpcGUpO1xuICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgY29uc3QgY3VzdG9tZXJOYW1lID0gYCR7bm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV19ICR7bm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXX1gO1xuICAgIGNvbnN0IGFmdGVycGF5UGF5bWVudERhdGEgPSB7XG4gICAgICByZXR1cm5fdXJsOiBuZXcgVVJMKFwiL2FwcC8zZHMvc3VjY2Vzcy9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpLFxuICAgICAgcGF5bWVudF9tZXRob2Q6IHtcbiAgICAgICAgYmlsbGluZ19kZXRhaWxzOiB7XG4gICAgICAgICAgZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgICBuYW1lOiBjdXN0b21lck5hbWUsXG4gICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgbGluZTE6IGJpbGxpbmdBZGRyZXNzLmxpbmUxLFxuICAgICAgICAgICAgbGluZTI6IGJpbGxpbmdBZGRyZXNzLmxpbmUyIHx8IHZvaWQgMCxcbiAgICAgICAgICAgIGNpdHk6IGJpbGxpbmdBZGRyZXNzLmNpdHksXG4gICAgICAgICAgICBzdGF0ZTogYmlsbGluZ0FkZHJlc3Muc3RhdGUsXG4gICAgICAgICAgICBjb3VudHJ5OiBiaWxsaW5nQWRkcmVzcy5jb3VudHJ5LFxuICAgICAgICAgICAgcG9zdGFsX2NvZGU6IGJpbGxpbmdBZGRyZXNzLnppcF9jb2RlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhZnRlcnBheU9wdGlvbnMgPSB7XG4gICAgICBoYW5kbGVBY3Rpb25zOiBmYWxzZVxuICAgIH07XG4gICAgbG9nX18kNihgQ29uZmlybWluZyBBZnRlcnBheSBwYXltZW50IHdpdGggY2xpZW50IHNlY3JldDogJHtjbGllbnRfc2VjcmV0fWApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maXJtYXRpb25SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUFmdGVycGF5Q2xlYXJwYXlQYXltZW50KFxuICAgICAgICBjbGllbnRfc2VjcmV0LFxuICAgICAgICBhZnRlcnBheVBheW1lbnREYXRhLFxuICAgICAgICBhZnRlcnBheU9wdGlvbnNcbiAgICAgICk7XG4gICAgICBsb2dfXyQ2KGBBZnRlcnBheSBwYXltZW50IGNvbmZpcm1hdGlvbiByZXN1bHQ6YCwgY29uZmlybWF0aW9uUmVzdWx0KTtcbiAgICAgIGlmIChjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudD8ubmV4dF9hY3Rpb24/LnR5cGUgPT09IFwicmVkaXJlY3RfdG9fdXJsXCIpIHtcbiAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudD8ubmV4dF9hY3Rpb24/LnJlZGlyZWN0X3RvX3VybD8udXJsO1xuICAgICAgICBpZiAoIXJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgZXJyX18kNyhcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBBZnRlcnBheSBwYXltZW50IGNvbmZpcm1hdGlvblwiKTtcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoXCJBZnRlcnBheSBwYXltZW50IGZhaWxlZFwiKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICAgICAgcmVzdWx0OiB7IGludm9pY2VfdXJsczogW10sIHN1YnNjcmlwdGlvbl9pZHM6IFtdLCBjdXN0b21lcl9pZDogXCJcIiwgcGF5bWVudF9tZXRob2RfaWQ6IFwiXCIgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbG9nX18kNihcIkFmdGVycGF5IHZlcmlmaWNhdGlvbiBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICAgIGZyYW1lVGl0bGU6IFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJDYoYOKVsCBBZnRlcnBheSB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZnRlcnBheSB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFmdGVycGF5IHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgbG9nX18kNihcIkFmdGVycGF5IHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQsIGNvbmZpcm1pbmcgd2l0aCBiYWNrZW5kLi4uXCIpO1xuICAgICAgICBjb25zdCB0aGVpclBheW1lbnRNZXRob2QgPSBjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudD8ucGF5bWVudF9tZXRob2Q/LnRvU3RyaW5nKCkgPz8gdm9pZCAwO1xuICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQsXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IHRoZWlyUGF5bWVudE1ldGhvZFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICAgIGxvZ1ByZWZpeDogXCJzdHJpcGUtYWZ0ZXJwYXlcIixcbiAgICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQ2KFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEFmdGVycGF5IHBheW1lbnQgY29uZmlybWF0aW9uXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gQWZ0ZXJwYXkgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycl9fJDcoXCJFcnJvciBpbiBBZnRlcnBheSBjaGVja291dCBmbG93OlwiLCBlcnJvcik7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiQWZ0ZXJwYXkgcGF5bWVudCBmYWlsZWRcIjtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNSwgZXJyX186IGVycl9fJDYgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWtsYXJuYVwiKTtcbmNvbnN0IFN0cmlwZUtsYXJuYUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImtsYXJuYVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgU3RyaXBlS2xhcm5hUmVxdWlyZWRVc2VyQWN0aW9ucyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpLFxuICAgIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgaW5pdFN0cmlwZUtsYXJuYUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ1KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBLbGFybmEuLi5gKTtcbiAgICBjb25zdCBzdHJpcGVLbGFybmFDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlS2xhcm5hQ3BtKTtcbiAgICBpZiAoIXN0cmlwZUtsYXJuYUNwbSkge1xuICAgICAgbG9nX18kNShgTm8gU3RyaXBlIEtsYXJuYSBDUE0gZm91bmRgKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgfVxuICAgIGxvZ19fJDUoYFN0YXJ0aW5nIHN0cmlwZSBrbGFybmEgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIGxvZ19fJDUoYFNldHVwIG1vZGUgaXMgbm90IHN1cHBvcnRlZCBmb3IgU3RyaXBlIEtsYXJuYSBmbG93YCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIH1cbiAgICBjb25zdCBzdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlS2xhcm5hLnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHN0cmlwZUtsYXJuYUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogY3VzdG9tUGFyYW1zID8/IHt9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fJDYoYEVycm9yIHN0YXJ0aW5nIEtsYXJuYSBmbG93OmAsIGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBzdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlS2xhcm5hRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoeyBjb250ZXh0LCBjaGVja291dFBheW1lbnRNZXRob2QsIG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDUoYFJ1bm5pbmcgU3RyaXBlIEtsYXJuYSBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kNShgVmFsaWRhdGluZyBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDUoYENyZWF0aW5nIGNhcnQgaW5mbyBmb3IgcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICBjb25zdCBjYXJ0SW5mbyA9IHtcbiAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIHByaWNlX2lkOiBpdGVtLnByaWNlX2lkLFxuICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eVxuICAgICAgfSkpLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSB8fCB2b2lkIDAsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9O1xuICAgIGxvZ19fJDUoYFN0YXJ0aW5nIHBheS1maXJzdCBwYXltZW50IGZsb3cgZm9yIEtsYXJuYS4uLmApO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogdHJ1ZSxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogY2FydEluZm8sXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBsb2dfXyQ1KFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlS2xhcm5hUmVxdWlyZWRVc2VyQWN0aW9ucy5wYXJzZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgICBjb25zdCB7IGNsaWVudF9zZWNyZXQgfSA9IG5leHRBY3Rpb25NZXRhZGF0YVswXTtcbiAgICBsb2dfXyQ1KFwiQ2xpZW50IHNlY3JldCBmb3IgcGF5bWVudCBpbnRlbnRcIiwgY2xpZW50X3NlY3JldCk7XG4gICAgY29uc3Qgc3RyaXBlS2xhcm5hQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUtsYXJuYUNwbSk7XG4gICAgaWYgKCFzdHJpcGVLbGFybmFDcG0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmlwZSBLbGFybmEgQ1BNIG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUtsYXJuYUNwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwicGF5bWVudFwiLFxuICAgICAgLy8gVXNlIHBheW1lbnQgbW9kZSBmb3IgcGF5LWZpcnN0IGZsb3dcbiAgICAgIGN1cnJlbmN5OiBwcmVmaWxsLmN1cnJlbmN5ID8/IFwidXNkXCIsXG4gICAgICBhbW91bnQ6IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9KTtcbiAgICBsb2dfXyQ1KFwiU3RyaXBlIGluc3RhbmNlIGNyZWF0ZWRcIiwgc3RyaXBlKTtcbiAgICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpO1xuICAgIGNvbnN0IGN1c3RvbWVyTmFtZSA9IGAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdfSAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV19YDtcbiAgICBjb25zdCBrbGFybmFQYXltZW50RGF0YSA9IHtcbiAgICAgIHJldHVybl91cmw6IG5ldyBVUkwoXCIvYXBwLzNkcy9zdWNjZXNzL1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCksXG4gICAgICBwYXltZW50X21ldGhvZDoge1xuICAgICAgICBiaWxsaW5nX2RldGFpbHM6IHtcbiAgICAgICAgICBlbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgIG5hbWU6IGN1c3RvbWVyTmFtZSxcbiAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICBsaW5lMTogYmlsbGluZ0FkZHJlc3MubGluZTEsXG4gICAgICAgICAgICBsaW5lMjogYmlsbGluZ0FkZHJlc3MubGluZTIgfHwgdm9pZCAwLFxuICAgICAgICAgICAgY2l0eTogYmlsbGluZ0FkZHJlc3MuY2l0eSxcbiAgICAgICAgICAgIHN0YXRlOiBiaWxsaW5nQWRkcmVzcy5zdGF0ZSxcbiAgICAgICAgICAgIGNvdW50cnk6IGJpbGxpbmdBZGRyZXNzLmNvdW50cnksXG4gICAgICAgICAgICBwb3N0YWxfY29kZTogYmlsbGluZ0FkZHJlc3MuemlwX2NvZGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGtsYXJuYU9wdGlvbnMgPSB7XG4gICAgICBoYW5kbGVBY3Rpb25zOiBmYWxzZVxuICAgIH07XG4gICAgbG9nX18kNShgQ29uZmlybWluZyBLbGFybmEgcGF5bWVudCB3aXRoIGNsaWVudCBzZWNyZXQ6ICR7Y2xpZW50X3NlY3JldH1gKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlybWF0aW9uUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1LbGFybmFQYXltZW50KGNsaWVudF9zZWNyZXQsIGtsYXJuYVBheW1lbnREYXRhLCBrbGFybmFPcHRpb25zKTtcbiAgICAgIGxvZ19fJDUoYEtsYXJuYSBwYXltZW50IGNvbmZpcm1hdGlvbiByZXN1bHQ6YCwgY29uZmlybWF0aW9uUmVzdWx0KTtcbiAgICAgIGlmIChjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudD8ubmV4dF9hY3Rpb24/LnR5cGUgPT09IFwicmVkaXJlY3RfdG9fdXJsXCIpIHtcbiAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudD8ubmV4dF9hY3Rpb24/LnJlZGlyZWN0X3RvX3VybD8udXJsO1xuICAgICAgICBpZiAoIXJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgZXJyX18kNihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBLbGFybmEgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKFwiS2xhcm5hIHBheW1lbnQgZmFpbGVkXCIpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgICAgICByZXN1bHQ6IHsgaW52b2ljZV91cmxzOiBbXSwgc3Vic2NyaXB0aW9uX2lkczogW10sIGN1c3RvbWVyX2lkOiBcIlwiLCBwYXltZW50X21ldGhvZF9pZDogXCJcIiB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsb2dfXyQ1KFwiS2xhcm5hIHZlcmlmaWNhdGlvbiBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICAgIGZyYW1lVGl0bGU6IFwiS2xhcm5hIHZlcmlmaWNhdGlvblwiXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyQ1KGDilbAgS2xhcm5hIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIktsYXJuYSB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIktsYXJuYSB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGxvZ19fJDUoXCJLbGFybmEgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCwgY29uZmlybWluZyB3aXRoIGJhY2tlbmQuLi5cIik7XG4gICAgICAgIGNvbnN0IHRoZWlyUGF5bWVudE1ldGhvZCA9IGNvbmZpcm1hdGlvblJlc3VsdC5wYXltZW50SW50ZW50Py5wYXltZW50X21ldGhvZD8udG9TdHJpbmcoKSA/PyB2b2lkIDA7XG4gICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICAgICAgICB0aGVpcl9wbV9pZDogdGhlaXJQYXltZW50TWV0aG9kXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgICAgbG9nUHJlZml4OiBcInN0cmlwZS1rbGFybmFcIixcbiAgICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQ1KFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEtsYXJuYSBwYXltZW50IGNvbmZpcm1hdGlvblwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEtsYXJuYSBwYXltZW50IGNvbmZpcm1hdGlvblwiKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyX18kNihcIkVycm9yIGluIEtsYXJuYSBjaGVja291dCBmbG93OlwiLCBlcnJvcik7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiS2xhcm5hIHBheW1lbnQgZmFpbGVkXCI7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IE9KU19TVFJJUEVfTElOS19CVE5fSUQgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIjtcbmNvbnN0IHsgbG9nX186IGxvZ19fJDQsIGVycl9fOiBlcnJfXyQ1IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1saW5rXCIpO1xuY29uc3QgU3RyaXBlTGlua0NwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgaW5pdFN0cmlwZUxpbmtGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgaW5pdFBhcmFtcyA9IGNvbnRleHQuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rO1xuICAgIGxvZ19fJDQoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5gKTtcbiAgICBjb25zdCBzdHJpcGVMaW5rQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUxpbmtDcG0pO1xuICAgIGxvZ19fJDQoYFN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgbG9nX18kNChgQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uYCk7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3QgeyBlbGVtZW50cywgc3RyaXBlIH0gPSBhd2FpdCBjcmVhdGVTdHJpcGVFbGVtZW50cyhzdHJpcGVMaW5rQ3BtLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgc2V0dXBfZnV0dXJlX3VzYWdlOiBcIm9mZl9zZXNzaW9uXCIsXG4gICAgICBwYXltZW50TWV0aG9kQ3JlYXRpb246IFwibWFudWFsXCJcbiAgICB9KTtcbiAgICBjb25zdCBsaW5rQXV0aGVudGljYXRpb25FbGVtZW50ID0gZWxlbWVudHMuY3JlYXRlKFwibGlua0F1dGhlbnRpY2F0aW9uXCIpO1xuICAgIGxvZ19fJDQoYENyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5gKTtcbiAgICBjb25zdCBleHByZXNzQ2hlY2tvdXRFbGVtZW50ID0gZWxlbWVudHMuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogaW5pdFBhcmFtcz8uYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlckxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQgPSAoc2VsZWN0b3IsIHNpbGVudCkgPT4ge1xuICAgICAgbGV0IHBhcmVudENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgaWYgKCFwYXJlbnRDb250YWluZXIpIHtcbiAgICAgICAgZXJyX18kNShgUmVjb21tYW5kZWQgdG8gcmVuZGVyIGEgY29udGFpbmVyIHdpdGggJHtzZWxlY3Rvcn0gdG8gYXZvaWQgcmVuZGVyaW5nIGluIHRoZSBib2R5YCk7XG4gICAgICAgIHBhcmVudENvbnRhaW5lciA9IGRvY3VtZW50LmJvZHk7XG4gICAgICB9XG4gICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgcGFyZW50Q29udGFpbmVyPy5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgbGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudC5tb3VudChjb250YWluZXIpO1xuICAgICAgbGV0IGlzQXV0aGVudGljYXRlZCA9IGZhbHNlO1xuICAgICAgbGV0IGlzTGlua0F1dGhSZWFkeSA9IGZhbHNlO1xuICAgICAgbGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudC5vbmNlKFwicmVhZHlcIiwgKCkgPT4ge1xuICAgICAgICBpc0xpbmtBdXRoUmVhZHkgPSB0cnVlO1xuICAgICAgICBpbml0UGFyYW1zPy5vbkF1dGhlbnRpY2F0aW9uRWxlbWVudFJlYWR5Py4oKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICBjb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9IFwiLTEwMDBweFwiO1xuICAgICAgICBjb250YWluZXIuc3R5bGUubGVmdCA9IFwiLTEwMDBweFwiO1xuICAgICAgICBjb250YWluZXIuc3R5bGUuekluZGV4ID0gXCItMVwiO1xuICAgICAgICBsaW5rQXV0aGVudGljYXRpb25FbGVtZW50Lm9uKFwiY2hhbmdlXCIsIChlKSA9PiB7XG4gICAgICAgICAgaXNBdXRoZW50aWNhdGVkID0gZS5jb21wbGV0ZSB8fCAhIWUudmFsdWUuZW1haWw7XG4gICAgICAgICAgaWYgKGlzTGlua0F1dGhSZWFkeSkge1xuICAgICAgICAgICAgaW5pdFBhcmFtcz8ub25BdXRoZW50aWNhdGlvblN0YXR1c0NoYW5nZT8uKGlzQXV0aGVudGljYXRlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaWZyYW1lID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCJpZnJhbWVcIik7XG4gICAgICAgIGlmIChpZnJhbWUpIHtcbiAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGlmcmFtZS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBpc1Bvc3NpYmxlQXV0aGVudGljYXRlZCA9IGhlaWdodCA+IDE2MDtcbiAgICAgICAgICAgIGlmIChpc0xpbmtBdXRoUmVhZHkpIHtcbiAgICAgICAgICAgICAgaW5pdFBhcmFtcz8ub25BdXRoZW50aWNhdGlvblN0YXR1c0NoYW5nZT8uKGlzQXV0aGVudGljYXRlZCB8fCBpc1Bvc3NpYmxlQXV0aGVudGljYXRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShpZnJhbWUsIHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbXCJzdHlsZVwiXSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQ7XG4gICAgfTtcbiAgICBjb25zdCBtb3VudEJ1dHRvbiA9IChzZWxlY3RvcikgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5tb3VudChzZWxlY3RvciA/IHNlbGVjdG9yIDogYCMke09KU19TVFJJUEVfTElOS19CVE5fSUR9YCk7XG4gICAgfTtcbiAgICBjb25zdCBkaXNtb3VudEJ1dHRvbiA9ICgpID0+IHtcbiAgICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQudW5tb3VudCgpO1xuICAgIH07XG4gICAgaWYgKGluaXRQYXJhbXM/LmRvTm90TW91bnRPbkluaXQpIHtcbiAgICAgIGxvZ19fJDQoYE5PVCBtb3VudGluZyBzdHJpcGUgbGluayBidXR0b24gKGRvTm90TW91bnRPbkluaXQgaXMgdHJ1ZSlgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNChgTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uYCk7XG4gICAgICBtb3VudEJ1dHRvbigpO1xuICAgIH1cbiAgICBpZiAoaW5pdFBhcmFtcz8uc2lsZW50bHlDaGVja0F1dGhlbnRpY2F0aW9uKSB7XG4gICAgICBsb2dfXyQ0KGBTaWxlbnRseSBtb3VudGluZyBsaW5rIGF1dGhlbnRpY2F0aW9uIGVsZW1lbnQgYXQgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH0uLi5gKTtcbiAgICAgIHJlbmRlckxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQoYCMke09KU19TVFJJUEVfTElOS19CVE5fSUR9YCwgdHJ1ZSk7XG4gICAgfVxuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjbGlja1wiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGxvZ19fJDQoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKTtcbiAgICAgIGlmIChpbml0UGFyYW1zPy5vdmVycmlkZUxpbmtTdWJtaXQpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU3VibWl0ID0gYXdhaXQgaW5pdFBhcmFtcy5vdmVycmlkZUxpbmtTdWJtaXQoKTtcbiAgICAgICAgaWYgKCFzaG91bGRTdWJtaXQpIHtcbiAgICAgICAgICBsb2dfXyQ0KFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjb25maXJtXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kNChcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZXZlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBldmVudC5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgZXJyX18kNShcImVycm9yXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihyZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQ0KFwicGF5bWVudE1ldGhvZFwiLCByZXN1bHQucGF5bWVudE1ldGhvZCk7XG4gICAgICAgIE9qc0Zsb3dzLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogc3RyaXBlTGlua0NwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogcmVzdWx0LnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbixcbiAgICAgICAgZGlzbW91bnRCdXR0b24sXG4gICAgICAgIG1vdW50TGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudDogKHNlbGVjdG9yKSA9PiByZW5kZXJMaW5rQXV0aGVudGljYXRpb25FbGVtZW50KHNlbGVjdG9yLCBmYWxzZSksXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBnZXRFbGVtZW50QnlJZEFzeW5jKE9KU19TVFJJUEVfTElOS19CVE5fSUQpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZUxpbmtGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kNChgUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBsb2dfXyQ0KGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTShub25DZGVGb3JtSW5wdXRzLCBjdXN0b21QYXJhbXMuc3RyaXBlUE0pO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgbG9nX18kNChgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uYCk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGN1c3RvbVBhcmFtcy5zdHJpcGVQTS5pZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGxvZ19fJDQoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucy5wYXJzZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgICBjb25zdCBvdXJFeGlzdGluZ1BtSWQgPSBuZXh0QWN0aW9uTWV0YWRhdGFbMF0ub3VyX2V4aXN0aW5nX3BtX2lkO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kNChgRG9pbmcgcGF5bWVudCBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IG91ckV4aXN0aW5nUG1JZFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNChgRG9pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG0pID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5uYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHN0cmlwZVBtW1wibGlua1wiXT8uZW1haWwgfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIlwiO1xuICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBsYXN0TmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IFwiXCI7XG4gIH1cbiAgbG9nX18kNChgRmluYWwgZm9ybSBpbnB1dHM6YCwgaW5wdXRzKTtcbiAgcmV0dXJuIGlucHV0cztcbn07XG5jb25zdCBnZXRFbGVtZW50QnlJZEFzeW5jID0gKGlkKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICBjb25zdCBnZXRFbGVtZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJlc29sdmUoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShnZXRFbGVtZW50KTtcbiAgICB9XG4gIH07XG4gIGdldEVsZW1lbnQoKTtcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQzLCBlcnJfXzogZXJyX18kNCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtcHJcIik7XG5jb25zdCBTdHJpcGVQckNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoudW5pb24oW3oubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBpbml0U3RyaXBlUHJGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kMyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlUHJDcG0pO1xuICAgIGxvZ19fJDMoYEluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQzKGBHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRgKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwciA9IGF3YWl0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0KFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIGlzU2V0dXBNb2RlXG4gICAgKTtcbiAgICBsb2dfXyQzKGBDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50YCk7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCBwci5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyX18kNChgY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgfVxuICAgIGxvZ19fJDMoYFN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudGAsIGNhbk1ha2VQYXltZW50KTtcbiAgICBjb25zdCBydW5TdHJpcGVQckZsb3cyID0gKHByb3ZpZGVyLCBwYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXIsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7XG4gICAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICAgIHByLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczogeyBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5IH0sXG4gICAgICAgICAgc3RhcnRGbG93OiBydW5TdHJpcGVQckZsb3cyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgcHIsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGNhbk1ha2VQYXltZW50LmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGNhbk1ha2VQYXltZW50Lmdvb2dsZVBheVxuICAgICAgfSxcbiAgICAgIHN0YXJ0RmxvdzogcnVuU3RyaXBlUHJGbG93MlxuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVQckZsb3ckMSA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgaW5pdFJlc3VsdFxuICB9KSA9PiB7XG4gICAgbG9nX18kMyhgUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGlmIChjdXN0b21QYXJhbXMucHJvdmlkZXIgIT09IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtjdXN0b21QYXJhbXMucHJvdmlkZXJ9LCBnb3QgJHtjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJ9YCk7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHIgPSBpbml0UmVzdWx0LnByO1xuICAgIGlmIChjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gY3VzdG9tUGFyYW1zLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBsb2dfXyQzKGBPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoYCwgb3ZlcnJpZGUpO1xuICAgICAgY29uc3QgYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9IHR5cGVvZiBvdmVycmlkZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCIgPyBvdmVycmlkZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHt9KSA6IG92ZXJyaWRlLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Q7XG4gICAgICB1cGRhdGVQcldpdGhBbW91bnQocHIsIG92ZXJyaWRlLmFtb3VudCwgb3ZlcnJpZGUucGVuZGluZywgYXBwbGVQYXlQYXltZW50UmVxdWVzdCwgb3ZlcnJpZGUubGFiZWwpO1xuICAgIH1cbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBpZiAoIWN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgICAgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApLnRoZW4oKGluaXRpYWxQcmV2aWV3KSA9PiB7XG4gICAgICAgIGlmICghcHIuaXNTaG93aW5nKCkpIHtcbiAgICAgICAgICB1cGRhdGVQcldpdGhBbW91bnQocHIsIGluaXRpYWxQcmV2aWV3LCBmYWxzZSwgdm9pZCAwLCBcIlRvdGFsXCIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgbG9nX18kMyhgU2hvd2luZyBQUiBkaWFsb2cuLi5gKTtcbiAgICBwci5zaG93KCk7XG4gICAgY29uc3Qgc3RyaXBlUG1BZGRlZEV2ZW50ID0gYXdhaXQgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QocHIpO1xuICAgIGxvZ19fJDMoYFN0cmlwZSBQTSBhZGRlZCBldmVudDpgLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGxvZ19fJDMoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtKG5vbkNkZUZvcm1JbnB1dHMsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBsb2dfXyQzKGBQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHAgYXltZW50IGZsb3cuLi5gLCBub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yUFIoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGxvZ19fJDMoYENvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5gKTtcbiAgICBhd2FpdCBjb25maXJtU3RyaXBlUHJQTShuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQzKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDMoYFBlcmZvcm1pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG1FdnQpID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtRXZ0LnBheWVyTmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICBjb25zdCBwYXllckxhc3ROYW1lID0gcGF5ZXJMYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBzdHJpcGVQbUV2dC5wYXltZW50TWV0aG9kPy5iaWxsaW5nX2RldGFpbHM/LmFkZHJlc3M7XG4gIGNvbnN0IHNoaXBwaW5nQWRkcmVzcyA9IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcztcbiAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBzdHJpcGVQbUV2dC5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBiaWxsaW5nQWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgc2hpcHBpbmdBZGRyZXNzPy5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0FkZHJlc3M/LmNvdW50cnkgfHwgc2hpcHBpbmdBZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gIGlmIChmaXJzdE5hbWUgfHwgbGFzdE5hbWUpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICB9IGVsc2Uge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgfVxuICBsb2dfXyQzKGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IHVwZGF0ZVByV2l0aEFtb3VudCA9IChwciwgYW1vdW50LCBpc1BlbmRpbmcsIHN0cmlwZUFwcGxlUGF5LCBsYWJlbCkgPT4ge1xuICBwci51cGRhdGUoe1xuICAgIHRvdGFsOiBhbW91bnQgPyB7XG4gICAgICBhbW91bnQ6IGFtb3VudC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IGxhYmVsID8/IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGlzUGVuZGluZ1xuICAgIH0gOiB2b2lkIDAsXG4gICAgY3VycmVuY3k6IGFtb3VudD8uY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogc3RyaXBlQXBwbGVQYXlcbiAgfSk7XG59O1xuY29uc3QgcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgfVxuICByZXR1cm4gUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn07XG5cbmNvbnN0IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QgPSAoY3Btcywgd2l0aFByb3ZpZGVyLCB3aXRoUHJvY2Vzc29yKSA9PiB7XG4gIGNvbnN0IG1hdGNoZXMgPSBjcG1zLmZpbHRlcigoY3BtKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlc1Byb2Nlc3NvciA9IHdpdGhQcm9jZXNzb3IgPT09IHZvaWQgMCA/IHRydWUgOiBjcG0ucHJvY2Vzc29yX25hbWUgPT09IHdpdGhQcm9jZXNzb3I7XG4gICAgY29uc3QgbWF0Y2hlc1Byb3ZpZGVyID0gY3BtLnByb3ZpZGVyID09PSB3aXRoUHJvdmlkZXI7XG4gICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICB9KTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgaWYgKG1hdGNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIGNvbnNvbGUud2FybihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICAgIHRyYWNrKFwibW9yZV90aGFuX29uZV9jcG1fZm91bmRcIiwge1xuICAgICAgcHJvdmlkZXI6IHdpdGhQcm92aWRlcixcbiAgICAgIHByb2Nlc3Nvcjogd2l0aFByb2Nlc3NvcixcbiAgICAgIGNwbXNcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlc1swXTtcbn07XG5jb25zdCBPanNGbG93cyA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5Db21tb25DY0Zsb3dcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZVByRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZVByRmxvdyQxXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlTGlua0Zsb3csXG4gICAgcnVuOiBydW5TdHJpcGVMaW5rRmxvd1xuICB9LFxuICBzdHJpcGVLbGFybmE6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlS2xhcm5hRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUtsYXJuYUZsb3dcbiAgfSxcbiAgc3RyaXBlQWZmaXJtOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZUFmZmlybUZsb3csXG4gICAgcnVuOiBydW5TdHJpcGVBZmZpcm1GbG93XG4gIH0sXG4gIHN0cmlwZUFmdGVycGF5OiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZUFmdGVycGF5RmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUFmdGVycGF5Rmxvd1xuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgaW5pdDogaW5pdFBvY2t5dFBheXBhbEZsb3csXG4gICAgcnVuOiBydW5Qb2NreXRQYXlwYWxGbG93XG4gIH0sXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IHtcbiAgICBpbml0OiBpbml0UGF5cGFsRmxvdyxcbiAgICBydW46IHJ1blBheXBhbEZsb3dcbiAgfSxcbiAgLy8gS2xhcm5hXG4gIGFpcndhbGxleEtsYXJuYToge1xuICAgIGluaXQ6IGluaXRBaXJ3YWxsZXhLbGFybmFGbG93LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4S2xhcm5hRmxvd1xuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3csXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93XG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFpcndhbGxleEFwcGxlUGF5Rmxvd1xuICB9LFxuICBhaXJ3YWxsZXhBQ0g6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleEFDSEZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4RUZUOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhFRlRGbG93XG4gIH0sXG4gIGFpcndhbGxleEJBQ1M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleEJBQ1NGbG93XG4gIH0sXG4gIGFpcndhbGxleFNFUEE6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleFNFUEFGbG93XG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IGluaXRMb29wRmxvdyxcbiAgICBydW46IHJ1bkxvb3BGbG93XG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEF1dGhuZXRBcHBsZVBheUZsb3csXG4gICAgcnVuOiBydW5BdXRobmV0QXBwbGVQYXlGbG93XG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IGluaXRBdXRobmV0R29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkF1dGhuZXRHb29nbGVQYXlGbG93XG4gIH0sXG4gIGFkeWVuR29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFkeWVuR29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFkeWVuR29vZ2xlUGF5Rmxvd1xuICB9LFxuICBhZHllbkFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFkeWVuQXBwbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWR5ZW5BcHBsZVBheUZsb3dcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZmxvd3NcIik7XG5jb25zdCBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlciA9IChmbG93TmFtZSwgaW5pdEZsb3cpID0+IHtcbiAgY29uc3QgcHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXIsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKGluaXRQYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwdWJsaXNoZXIuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSBhd2FpdCBpbml0Rmxvdyhpbml0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kMihg4pyUICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgaW5pdFJlc3VsdCk7XG4gICAgICAgIHB1Ymxpc2hlci5zZXQoaW5pdFJlc3VsdCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyQzKGDwnZmtICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpLCBcIkRldGFpbHM6XCIsIGVycm9yKTtcbiAgICAgICAgcHVibGlzaGVyLnRocm93KGVycm9yLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBbGxJbml0Rmxvd3MgPSBhc3luYyAoZmxvd3MsIGNvbnRleHQsIGZvcm1DYWxsYmFja3MpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhmbG93cykubWFwKChmbG93KSA9PiBmbG93LmluaXRpYWxpemUoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pKSk7XG59O1xuY29uc3QgY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycyA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gICAgLy8gU3RyaXBlIFBSXG4gICAgc3RyaXBlUFI6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIFBSXCIsIE9qc0Zsb3dzLnN0cmlwZVBSLmluaXQpLFxuICAgIC8vIFN0cmlwZSBMaW5rXG4gICAgc3RyaXBlTGluazogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgTGlua1wiLCBPanNGbG93cy5zdHJpcGVMaW5rLmluaXQpLFxuICAgIC8vIFN0cmlwZSBLbGFybmFcbiAgICBzdHJpcGVLbGFybmE6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIEtsYXJuYVwiLCBPanNGbG93cy5zdHJpcGVLbGFybmEuaW5pdCksXG4gICAgLy8gU3RyaXBlIEFmZmlybVxuICAgIHN0cmlwZUFmZmlybTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgQWZmaXJtXCIsIE9qc0Zsb3dzLnN0cmlwZUFmZmlybS5pbml0KSxcbiAgICAvLyBTdHJpcGUgQWZ0ZXJwYXlcbiAgICBzdHJpcGVBZnRlcnBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgQWZ0ZXJwYXlcIiwgT2pzRmxvd3Muc3RyaXBlQWZ0ZXJwYXkuaW5pdCksXG4gICAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICAgIGFpcndhbGxleEdvb2dsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBaXJ3YWxsZXggR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgICBhaXJ3YWxsZXhBcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkuaW5pdCksXG4gICAgLy8gTG9vcFxuICAgIGxvb3A6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiTG9vcFwiLCBPanNGbG93cy5sb29wQ3J5cHRvLmluaXQpLFxuICAgIC8vIFBheVBhbFxuICAgIHBheXBhbDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJQYXlQYWxcIiwgT2pzRmxvd3MucGF5cGFsLmluaXQpLFxuICAgIC8vIEtsYXJuYVxuICAgIGFpcndhbGxleEtsYXJuYTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJLbGFybmFcIiwgT2pzRmxvd3MuYWlyd2FsbGV4S2xhcm5hLmluaXQpLFxuICAgIC8vIFBvY2t5dCBQYXlQYWxcbiAgICBwb2NreXRQYXlwYWw6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiUG9ja3l0IFBheVBhbFwiLCBPanNGbG93cy5wb2NreXRQYXlwYWwuaW5pdCksXG4gICAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgICBhdXRob3JpemVOZXRHb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQXV0aG5ldCBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEF1dGhuZXQgQXBwbGVQYXlcbiAgICBhdXRob3JpemVOZXRBcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBdXRobmV0IEFwcGxlUGF5XCIsIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LmluaXQpLFxuICAgIC8vIEFkeWVuIEdvb2dsZVBheVxuICAgIGFkeWVuR29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFkeWVuIEdvb2dsZVBheVwiLCBPanNGbG93cy5hZHllbkdvb2dsZVBheS5pbml0KSxcbiAgICAvLyBBZHllbiBBcHBsZVBheVxuICAgIGFkeWVuQXBwbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWR5ZW4gQXBwbGVQYXlcIiwgT2pzRmxvd3MuYWR5ZW5BcHBsZVBheS5pbml0KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIH07XG59O1xuXG5jb25zdCB7IGVycl9fOiBlcnJfXyQyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHouZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHoub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18kMik7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0ZWN0RnJhbWV3b3JrKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICBjb25zdCBuZXh0V2luZG93ID0gd2luZG93O1xuICAgIGlmIChuZXh0V2luZG93Py5uZXh0IHx8IG5leHRXaW5kb3c/Ll9fTkVYVF9EQVRBX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX25leHRcIikpIHtcbiAgICAgIHJldHVybiBcIm5leHRqc1wiIC8qIE5leHRKUyAqLztcbiAgICB9XG4gICAgY29uc3QgbnV4dFdpbmRvdyA9IHdpbmRvdztcbiAgICBpZiAobnV4dFdpbmRvdz8uX19OVVhUX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX251eHRcIikpIHtcbiAgICAgIHJldHVybiBcIm51eHRcIiAvKiBOdXh0ICovO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMoZG9jdW1lbnQpLmZpbmQoKGtleSkgPT4ga2V5LmluY2x1ZGVzKFwicmVhY3RcIikpIHx8ICEhQXJyYXkuZnJvbShkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoXCJib2R5ID4gKlwiKSkuZmluZChcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBfcmVhY3RSb290Q29udGFpbmVyIGRvZXNuJ3QgZXhpc3RcbiAgICAgIChub2RlKSA9PiBub2RlLl9yZWFjdFJvb3RDb250YWluZXJcbiAgICApKSB7XG4gICAgICByZXR1cm4gXCJyZWFjdFwiIC8qIFJlYWN0ICovO1xuICAgIH1cbiAgICBjb25zdCB2dWVXaW5kb3cgPSB3aW5kb3c7XG4gICAgaWYgKHZ1ZVdpbmRvdz8uVnVlIHx8IHZ1ZVdpbmRvdz8uX19WVUVfXykge1xuICAgICAgcmV0dXJuIFwidnVlXCIgLyogVnVlICovO1xuICAgIH1cbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKSkge1xuICAgICAgcmV0dXJuIFwiYW5ndWxhclwiIC8qIEFuZ3VsYXIgKi87XG4gICAgfVxuICAgIHJldHVybiBcInZhbmlsbGFcIiAvKiBWYW5pbGxhICovO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBcInVua25vd25cIiAvKiBVbmtub3duICovO1xuICB9XG59XG5mdW5jdGlvbiBnZXRGcmFtZXdvcmtWZXJzaW9uKGZyYW1ld29yaykge1xuICB0cnkge1xuICAgIHN3aXRjaCAoZnJhbWV3b3JrKSB7XG4gICAgICBjYXNlIFwicmVhY3RcIiAvKiBSZWFjdCAqLzoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJuZXh0anNcIiAvKiBOZXh0SlMgKi86IHtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgICAgICBjb25zdCBuZXh0V2luZG93ID0gd2luZG93O1xuICAgICAgICByZXR1cm4gbmV4dFdpbmRvdz8ubmV4dD8udmVyc2lvbiB8fCBuZXh0V2luZG93Py5fX05FWFRfREFUQV9fPy5idWlsZElkIHx8IG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwibnV4dFwiIC8qIE51eHQgKi86IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwidnVlXCIgLyogVnVlICovOiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcImFuZ3VsYXJcIiAvKiBBbmd1bGFyICovOiB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50MiA9IGdldFdpbmRvd1NhZmUoKT8uZG9jdW1lbnQ7XG4gICAgICAgIGNvbnN0IG5nVmVyc2lvbkVsID0gZG9jdW1lbnQyPy5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpO1xuICAgICAgICByZXR1cm4gbmdWZXJzaW9uRWwgPyBuZ1ZlcnNpb25FbC5nZXRBdHRyaWJ1dGUoXCJuZy12ZXJzaW9uXCIpIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RnJhbWV3b3JrSW5mbygpIHtcbiAgY29uc3QgZnJhbWV3b3JrID0gZGV0ZWN0RnJhbWV3b3JrKCk7XG4gIGNvbnN0IHZlcnNpb24gPSBnZXRGcmFtZXdvcmtWZXJzaW9uKGZyYW1ld29yayk7XG4gIHJldHVybiB7IGZyYW1ld29yaywgdmVyc2lvbiB9O1xufVxuXG5jb25zdCBnZXRGcmF1ZE1ldGFkYXRhID0gKCkgPT4ge1xuICBjb25zdCBzY3JlZW5faGVpZ2h0ID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmhlaWdodCA6IG51bGw7XG4gIGNvbnN0IHNjcmVlbl93aWR0aCA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi53aWR0aCA6IG51bGw7XG4gIGNvbnN0IGNvbG9yX2RlcHRoID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmNvbG9yRGVwdGggOiBudWxsO1xuICBjb25zdCBqYXZhX2VuYWJsZWQgPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IuamF2YUVuYWJsZWQoKSA6IGZhbHNlO1xuICBjb25zdCB1c2VyX2FnZW50ID0gd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCA6IG51bGw7XG4gIGNvbnN0IGFjY2VwdF9oZWFkZXIgPSBcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjhcIjtcbiAgbGV0IGxhbmd1YWdlID0gbnVsbDtcbiAgaWYgKHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yKSB7XG4gICAgbGFuZ3VhZ2UgPSB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlID8gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA6IHdpbmRvdy5uYXZpZ2F0b3IuYnJvd3Nlckxhbmd1YWdlO1xuICB9XG4gIGNvbnN0IHRpbWVfem9uZV9vZmZzZXQgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiB7XG4gICAgY29sb3JfZGVwdGgsXG4gICAgamF2YV9lbmFibGVkLFxuICAgIGphdmFzY3JpcHRfZW5hYmxlZDogdHJ1ZSxcbiAgICBsYW5ndWFnZSxcbiAgICBzY3JlZW5faGVpZ2h0LFxuICAgIHNjcmVlbl93aWR0aCxcbiAgICB0aW1lX3pvbmVfb2Zmc2V0LFxuICAgIHVzZXJfYWdlbnQsXG4gICAgYWNjZXB0X2hlYWRlclxuICB9O1xufTtcblxudmFyIFN1Ym1pdE1ldGhvZHMgPSAvKiBAX19QVVJFX18gKi8gKChTdWJtaXRNZXRob2RzMikgPT4ge1xuICBTdWJtaXRNZXRob2RzMltcImNhcmRcIl0gPSBcImNhcmRcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhcHBsZVBheVwiXSA9IFwiYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiZ29vZ2xlUGF5XCJdID0gXCJnb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wibG9vcENyeXB0b1wiXSA9IFwibG9vcC1jcnlwdG9cIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwYXlwYWxcIl0gPSBcInBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImtsYXJuYVwiXSA9IFwia2xhcm5hXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWZmaXJtXCJdID0gXCJhZmZpcm1cIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZnRlcnBheVwiXSA9IFwiYWZ0ZXJwYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJzdHJpcGVMaW5rXCJdID0gXCJzdHJpcGUtbGlua1wiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEdvb2dsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBcHBsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEdvb2dsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRBcHBsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFkeWVuR29vZ2xlUGF5XCJdID0gXCJhZHllbi1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5BcHBsZVBheVwiXSA9IFwiYWR5ZW4tYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QUNIXCJdID0gXCJhaXJ3YWxsZXgtYWNoXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4RUZUXCJdID0gXCJhaXJ3YWxsZXgtZWZ0XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QkFDU1wiXSA9IFwiYWlyd2FsbGV4LWJhY3NcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhTRVBBXCJdID0gXCJhaXJ3YWxsZXgtc2VwYVwiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbnoubmF0aXZlRW51bShTdWJtaXRNZXRob2RzKTtcbnZhciBQYXltZW50UHJvdmlkZXJUeXBlID0gLyogQF9fUFVSRV9fICovICgoUGF5bWVudFByb3ZpZGVyVHlwZTIpID0+IHtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJBQ0hcIl0gPSBcImFjaFwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkVGVFwiXSA9IFwiZWZ0XCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQkFDU1wiXSA9IFwiYmFjc1wiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIlNFUEFcIl0gPSBcInNlcGFcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJBUFBMRV9QQVlcIl0gPSBcImFwcGxlX3BheVwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkNSRURJVF9DQVJEXCJdID0gXCJjcmVkaXRfY2FyZFwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkdPT0dMRV9QQVlcIl0gPSBcImdvb2dsZV9wYXlcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJTVFJJUEVfTElOS1wiXSA9IFwic3RyaXBlX2xpbmtcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJDUllQVE9cIl0gPSBcImNyeXB0b1wiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIlBBWVBBTFwiXSA9IFwicGF5cGFsXCI7XG4gIHJldHVybiBQYXltZW50UHJvdmlkZXJUeXBlMjtcbn0pKFBheW1lbnRQcm92aWRlclR5cGUgfHwge30pO1xuXG5jb25zdCBnZXRBcHBsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGFwcGxlUGF5SW5pdEZsb3dzID0gW2luaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LCBpbml0Rmxvd3MuYWR5ZW5BcHBsZVBheV07XG4gIGNvbnN0IGFwcGxlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgYXBwbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goZmxvd1ZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdHJpcGVQUkZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlUFJGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGNvbnN0IGlzQXBwbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgIGlmIChpc0FwcGxlUGF5QXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJhcHBsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYXBwbGVQYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGFwcGxlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0QXBwbGVQYXlGbG93KGFwcGxlUGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGdldEdvb2dsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGdvb2dsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LCBpbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LCBpbml0Rmxvd3MuYWR5ZW5Hb29nbGVQYXldO1xuICBjb25zdCBnb29nbGVQYXlJbml0UmVzdWx0cyA9IFtdO1xuICBnb29nbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBnb29nbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0dvb2dsZVBheUF2YWlsYWJsZSA9IHN0cmlwZVBSRmxvd1Jlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgIGlmIChpc0dvb2dsZVBheUF2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlUFJGbG93UmVzdWx0LnN0YXJ0RmxvdyhcImdvb2dsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBnb29nbGVQYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRHb29nbGVQYXlGbG93KGdvb2dsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFwcGxlUGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFwcGxlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQXBwbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBzdGFydEdvb2dsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBHb29nbGUgUGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBHb29nbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBnZXRLbGFybmFQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBrbGFybmFJbml0UmVzdWx0cyA9IFtdO1xuICBjb25zdCBhaXJ3YWxsZXhLbGFybmFGbG93UmVzdWx0ID0gaW5pdEZsb3dzLmFpcndhbGxleEtsYXJuYS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChhaXJ3YWxsZXhLbGFybmFGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGtsYXJuYUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBhaXJ3YWxsZXhLbGFybmFGbG93UmVzdWx0LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpXG4gICAgfSk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlS2xhcm5hRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVLbGFybmEucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlS2xhcm5hRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBrbGFybmFJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlS2xhcm5hRmxvd1Jlc3VsdC5zdGFydEZsb3coY3VzdG9tUGFyYW1zKVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczoga2xhcm5hSW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBrbGFybmFJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRLbGFybmFGbG93KGtsYXJuYUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEtsYXJuYUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBLbGFybmEgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEtsYXJuYSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3QgZ2V0QWZmaXJtUHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3QgYWZmaXJtSW5pdFJlc3VsdHMgPSBbXTtcbiAgY29uc3Qgc3RyaXBlQWZmaXJtRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVBZmZpcm0ucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlQWZmaXJtRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBhZmZpcm1Jbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlQWZmaXJtRmxvd1Jlc3VsdC5zdGFydEZsb3coY3VzdG9tUGFyYW1zKVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYWZmaXJtSW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhZmZpcm1Jbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRBZmZpcm1GbG93KGFmZmlybUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFmZmlybUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBZmZpcm0gcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFmZmlybSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3QgZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhZnRlcnBheUluaXRSZXN1bHRzID0gW107XG4gIGNvbnN0IHN0cmlwZUFmdGVycGF5Rmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVBZnRlcnBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVBZnRlcnBheUZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgYWZ0ZXJwYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlQWZ0ZXJwYXlGbG93UmVzdWx0LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBhZnRlcnBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogYWZ0ZXJwYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRBZnRlcnBheUZsb3coYWZ0ZXJwYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBZnRlcnBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBZnRlcnBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQWZ0ZXJwYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDEsIGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInRyYWNlclwiKTtcbmNvbnN0IGluaXRUcmFjZXJTYWZlID0gKHZlcnNpb24sIGJhc2VVcmwpID0+IHtcbiAgdHJ5IHtcbiAgICBpbml0VHJhY2VyVW5zYWZlKHZlcnNpb24sIGJhc2VVcmwpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGVycl9fJDEoYEVycm9yIGluaXRpYWxpemluZyB0cmFjZXI6ICR7ZXJyb3J9YCk7XG4gIH1cbn07XG5sZXQgZ2xvYmFsVHJhY2VyO1xuY29uc3QgaW5pdFRyYWNlclVuc2FmZSA9IGFzeW5jICh2ZXJzaW9uLCBiYXNlVXJsKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICBjb25zdCBzZGtUcmFjZVdlYiA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGJ9fi5qcycpO1xuICBjb25zdCB7IENvbnNvbGVTcGFuRXhwb3J0ZXIsIFNpbXBsZVNwYW5Qcm9jZXNzb3IsIFdlYlRyYWNlclByb3ZpZGVyIH0gPSBzZGtUcmFjZVdlYjtcbiAgY29uc3QgaW5zdHJ1bWVudGF0aW9uRmV0Y2ggPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBqfX4uanMnKTtcbiAgY29uc3QgeyBGZXRjaEluc3RydW1lbnRhdGlvbiB9ID0gaW5zdHJ1bWVudGF0aW9uRmV0Y2g7XG4gIGNvbnN0IGNvbnRleHRab25lID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwa31+LmpzJyk7XG4gIGNvbnN0IHsgWm9uZUNvbnRleHRNYW5hZ2VyIH0gPSBjb250ZXh0Wm9uZTtcbiAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwZX1+LmpzJyk7XG4gIGNvbnN0IHsgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zIH0gPSBpbnN0cnVtZW50YXRpb247XG4gIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMDF9fi5qcycpO1xuICBjb25zdCB7IFJlc291cmNlIH0gPSByZXNvdXJjZXM7XG4gIGNvbnN0IGRldGVjdFJlc291cmNlcyA9IGF3YWl0IGltcG9ydCgnLi9kZXRlY3QtcmVzb3VyY2VzLSF+ezAwbn1+LmpzJykudGhlbihuID0+IG4uZCk7XG4gIGNvbnN0IHsgZGV0ZWN0UmVzb3VyY2VzU3luYyB9ID0gZGV0ZWN0UmVzb3VyY2VzO1xuICBjb25zdCBleHBvcnRlclRyYWNlT3RscCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMG99fi5qcycpO1xuICBjb25zdCB7IE9UTFBUcmFjZUV4cG9ydGVyIH0gPSBleHBvcnRlclRyYWNlT3RscDtcbiAgY29uc3QgcHJvcGFnYXRvckIzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwbH1+LmpzJyk7XG4gIGNvbnN0IHsgQjNQcm9wYWdhdG9yLCBCM0luamVjdEVuY29kaW5nIH0gPSBwcm9wYWdhdG9yQjM7XG4gIGNvbnN0IHNka1RyYWNlQmFzZSA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMDN9fi5qcycpO1xuICBjb25zdCB7IEJhdGNoU3BhblByb2Nlc3NvciB9ID0gc2RrVHJhY2VCYXNlO1xuICBsb2dfXyQxKGBJbml0aWFsaXppbmcgdHJhY2VyIHdpdGggdmVyc2lvbiAke3ZlcnNpb259IGFuZCBiYXNlVXJsICR7YmFzZVVybH1gKTtcbiAgY29uc3QgY29sbGVjdG9yVXJsID0gZ2V0Q29sbGVjdG9yVXJsKGJhc2VVcmwpO1xuICBsb2dfXyQxKGBVc2luZyBjb2xsZWN0b3IgVVJMICR7Y29sbGVjdG9yVXJsfWApO1xuICBjb25zdCBleHBvcnRlciA9IG5ldyBPVExQVHJhY2VFeHBvcnRlcih7IHVybDogY29sbGVjdG9yVXJsIH0pO1xuICBjb25zdCBiYXNlQXR0cnMgPSB7XG4gICAgXCJzZXJ2aWNlLnZlcnNpb25cIjogdmVyc2lvbixcbiAgICBcInNlcnZpY2UubmFtZVwiOiBcIm9qc1wiXG4gIH07XG4gIGNvbnN0IHByb3ZpZGVyID0gbmV3IFdlYlRyYWNlclByb3ZpZGVyKHtcbiAgICByZXNvdXJjZTogbmV3IFJlc291cmNlKGJhc2VBdHRycykubWVyZ2UoZGV0ZWN0UmVzb3VyY2VzU3luYygpKSxcbiAgICBzcGFuUHJvY2Vzc29yczogW1xuICAgICAgbmV3IFNpbXBsZVNwYW5Qcm9jZXNzb3IobmV3IENvbnNvbGVTcGFuRXhwb3J0ZXIoKSksXG4gICAgICBuZXcgQmF0Y2hTcGFuUHJvY2Vzc29yKGV4cG9ydGVyLCB7XG4gICAgICAgIHNjaGVkdWxlZERlbGF5TWlsbGlzOiA1MDBcbiAgICAgIH0pXG4gICAgXVxuICB9KTtcbiAgcHJvdmlkZXIucmVnaXN0ZXIoe1xuICAgIGNvbnRleHRNYW5hZ2VyOiBuZXcgWm9uZUNvbnRleHRNYW5hZ2VyKCksXG4gICAgcHJvcGFnYXRvcjogbmV3IEIzUHJvcGFnYXRvcih7IGluamVjdEVuY29kaW5nOiBCM0luamVjdEVuY29kaW5nLk1VTFRJX0hFQURFUiB9KVxuICB9KTtcbiAgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zKHtcbiAgICBpbnN0cnVtZW50YXRpb25zOiBbXG4gICAgICBuZXcgRmV0Y2hJbnN0cnVtZW50YXRpb24oe1xuICAgICAgICBwcm9wYWdhdGVUcmFjZUhlYWRlckNvcnNVcmxzOiBbLy4qL10sXG4gICAgICAgIC8vIFByb3BhZ2F0ZSB0byBhbGwgVVJMc1xuICAgICAgICAvLyBFeGNsdWRlIEFkeWVuIFVSTHMgLSB0aGV5IGRvIG5vdCBhbGxvdyBPUFRJT05TIHJlcXVlc3RzXG4gICAgICAgIC8vIEFsc28gZXhjbHVkZSBsb29wY3J5cHRvLnh5elxuICAgICAgICBpZ25vcmVVcmxzOiBbL15odHRwczpcXC9cXC8oLipcXC4pP2FkeWVuXFwuY29tLywgL15odHRwczpcXC9cXC8oLipcXC4pP2xvb3BjcnlwdG9cXC54eXovXVxuICAgICAgfSlcbiAgICBdXG4gIH0pO1xuICBnbG9iYWxUcmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICBsb2dfXyQxKGBUcmFjZXIgaW5pdGlhbGl6ZWRgKTtcbiAgcmV0dXJuIGdsb2JhbFRyYWNlcjtcbn07XG5jb25zdCBnZXRDb2xsZWN0b3JVcmwgPSAoZnJvbUJhc2VVcmwpID0+IHtcbiAgY29uc3QgYmFzZUhvc3RuYW1lID0gbmV3IFVSTChmcm9tQmFzZVVybCkuaG9zdG5hbWU7XG4gIGlmIChiYXNlSG9zdG5hbWUgPT09IFwiY2RlLm9wZW5wYXlzdGFnaW5nLmNvbVwiKSB7XG4gICAgcmV0dXJuIFwiaHR0cHM6Ly9vdGVsLm9wZW5wYXlzYW5kYm94LmNvbS92MS90cmFjZXNcIjtcbiAgfSBlbHNlIGlmIChiYXNlSG9zdG5hbWUgPT09IFwiY2RlLmdldG9wZW5wYXkuY29tXCIpIHtcbiAgICByZXR1cm4gXCJodHRwczovL290ZWwuZ2V0b3BlbnBheS5jb20vdjEvdHJhY2VzXCI7XG4gIH1cbiAgcmV0dXJuIFwiaHR0cDovL2xvY2FsaG9zdDo0MzE5L3YxL3RyYWNlc1wiO1xufTtcblxuY2xhc3MgT3BlblBheUZvcm1FdmVudEhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihmb3JtSWQsIGJhc2VVcmwsIGZvcm1DYWxsYmFja3MsIGludGVybmFsQ2FsbGJhY2tzKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChnZXRDbGVhbk9yaWdpbihldmVudC5vcmlnaW4pICE9PSBnZXRDbGVhbk9yaWdpbih0aGlzLmJhc2VVcmwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wicGVucGFsXCJdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wic291cmNlXCJdICYmIGV2ZW50LmRhdGFbXCJzb3VyY2VcIl0gPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGV2ZW50RGF0YSA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBldmVudERhdGEgPSBwYXJzZUV2ZW50UGF5bG9hZChKU09OLnBhcnNlKGV2ZW50LmRhdGEpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGVFdmVudChldmVudERhdGEpO1xuICAgICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZCwgcGF5bG9hZCB9ID0gZXZlbnREYXRhO1xuICAgICAgY29uc3QgZXZlbnRUeXBlID0gcGF5bG9hZC50eXBlO1xuICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodChwYXlsb2FkLmhlaWdodCA/IGAke3BheWxvYWQuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCB7XG4gICAgICAgICAgICBvYmZ1c2NhdGVkVmFsdWU6IHBheWxvYWQub2JmdXNjYXRlZFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbZWxlbWVudElkXSA9IGV2ZW50LnNvdXJjZTtcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IocGF5bG9hZC5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzLCBlbGVtZW50SWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZXZlbnRUeXBlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMudmFsaWRhdGVFdmVudCA9IChldmVudERhdGEpID0+IHtcbiAgICAgIGlmIChldmVudERhdGEuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhZXZlbnREYXRhLmVsZW1lbnRJZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgZXZlbnREYXRhLmZvcm1JZCk7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ub25jZXMuaGFzKGV2ZW50RGF0YS5ub25jZSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5ub25jZXMuYWRkKGV2ZW50RGF0YS5ub25jZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIHRoaXMuZXZlbnRUYXJnZXRzID0ge307XG4gICAgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIHRoaXMuZm9ybUlkID0gZm9ybUlkO1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmw7XG4gICAgdGhpcy5mb3JtQ2FsbGJhY2tzID0gZm9ybUNhbGxiYWNrcztcbiAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gaW50ZXJuYWxDYWxsYmFja3M7XG4gIH1cbn1cbmNvbnN0IGdldENsZWFuT3JpZ2luID0gKHVybCkgPT4ge1xuICByZXR1cm4gbmV3IFVSTCh1cmwpLm9yaWdpbjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb24oaWZyYW1lLCBjaGlsZE9yaWdpbikge1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IGlzVmFsaWRPYmplY3QgPSBhd2FpdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0KGNvbm5lY3Rpb25PYmopO1xuICBpZiAoIWlzUmVzdWx0VmFsaWQoY29ubmVjdGlvbk9iaiwgaXNWYWxpZE9iamVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdGApO1xuICB9XG4gIHJldHVybiBjb25uZWN0aW9uT2JqO1xufVxuY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKGlkLCBjb25uZWN0aW9uKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoaWQsIGNvbm5lY3Rpb24pO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgfVxuICAgIHJldHVybiBjb25uZWN0aW9uO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5cbmNvbnN0IHNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyA9IChpbml0UHJGbG93cywgY29udGV4dCwgY2FsbGJhY2tzKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFIgfSA9IGluaXRQckZsb3dzO1xuICBzdHJpcGVQUi5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICBpZiAocmVzdWx0LmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IHJlc3VsdC5sb2FkZWRWYWx1ZTtcbiAgICAgIGNvbnN0IGNhbkFwcGxlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICAgIGNvbnN0IGNhbkdvb2dsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgICAgY29uc3QgZmluYWxTdGF0dXMgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkFwcGxlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5BcHBsZVBheSkge1xuICAgICAgICAgICAgICBydW5TdHJpcGVQckZsb3coXCJhcHBsZV9wYXlcIiwgaW5pdFJlc3VsdCwgY29udGV4dCwgY2FsbGJhY2tzLCB1c2VyUGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5Hb29nbGVQYXksXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbkdvb2dsZVBheSkge1xuICAgICAgICAgICAgICBydW5TdHJpcGVQckZsb3coXCJnb29nbGVfcGF5XCIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGNhbGxiYWNrcywgdXNlclBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2FsbGJhY2tzLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChmaW5hbFN0YXR1cyk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBydW5TdHJpcGVQckZsb3cgPSAocHJvdmlkZXIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGZvcm1DYWxsYmFja3MsIHBhcmFtcykgPT4ge1xuICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlUFIucnVuKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgaW5pdFJlc3VsdFxuICB9KTtcbn07XG5cbmNvbnN0IEdFTkVSSUNfQ09OTl9FUlIgPSBgVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuYDtcbmNvbnN0IHsgbG9nX18sIGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLWZvcm1cIik7XG5jbGFzcyBPcGVuUGF5Rm9ybSB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5hbnlDZGVDb25uID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuaW5pdEZsb3dzID0gY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycygpO1xuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgICAgIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFwiZm9ybS5pbml0aWFsaXplXCIsIHtcbiAgICAgICAga2luZDogU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvbnRleHQud2l0aCh0cmFjZS5zZXRTcGFuKGNvbnRleHQuYWN0aXZlKCksIHNwYW4pLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY2RlQnJpZGdlSWZyYW1lID0gdGhpcy5jcmVhdGVFbGVtZW50KEVsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFKTtcbiAgICAgICAgICBjZGVCcmlkZ2VJZnJhbWUubm9kZS5pZCA9IFwiX19vcF9pbnRlcm5hbF9jZGVfYnJpZGdlXCI7XG4gICAgICAgICAgY2RlQnJpZGdlSWZyYW1lLm5vZGUuYXJpYUhpZGRlbiA9IFwidHJ1ZVwiO1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oY2RlQnJpZGdlSWZyYW1lLm5vZGUuc3R5bGUsIHtcbiAgICAgICAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICAgICAgICBtYXJnaW46IFwiMHB4XCIsXG4gICAgICAgICAgICBwYWRkaW5nOiBcIjBweFwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogXCJub25lXCIsXG4gICAgICAgICAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNkZUJyaWRnZUlmcmFtZS5tb3VudChcImJvZHlcIik7XG4gICAgICAgICAgbG9nX18oXCJDREUgYnJpZGdlIGVsZW1lbnQgbW91bnRlZFwiKTtcbiAgICAgICAgICBsb2dfXyhcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICAgIGNvbnN0IGNkZUxvYWRlZCA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKTtcbiAgICAgICAgICBzcGFuPy5hZGRFdmVudChcIndhaXRpbmdfZm9yX2NkZV9jb25uZWN0aW9uXCIpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IGNkZUNvbm5TcGFuID0gdHJhY2VyPy5zdGFydFNwYW4oXCJjZGUuY29ubmVjdFwiLCB2b2lkIDAsIGNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgIGNvbnN0IGFueUNkZUNvbm4gPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogR0VORVJJQ19DT05OX0VSUlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNkZUNvbm5TcGFuPy5lbmQoKTtcbiAgICAgICAgICBzcGFuPy5hZGRFdmVudChcImNkZV9jb25uZWN0ZWRcIik7XG4gICAgICAgICAgbG9nX18oXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIik7XG4gICAgICAgICAgYXdhaXQgc2V0VXNlckRldmljZVRva2VuKGFueUNkZUNvbm4sIHRoaXMuZGV2aWNlVG9rZW4pO1xuICAgICAgICAgIGxvZ19fKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IG9qc0NvbnRleHQgPSBPcGVuUGF5Rm9ybS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgICBjZGVMb2FkZWQsXG4gICAgICAgICAgICBhbnlDZGVDb25uLFxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zZXQob2pzQ29udGV4dCk7XG4gICAgICAgICAgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIFN0YXJ0aW5nIE9KUyBpbml0IGZsb3dzLi4uXCIpO1xuICAgICAgICAgIGF3YWl0IHN0YXJ0QWxsSW5pdEZsb3dzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGNkZUxvYWRlZC50b3RhbEFtb3VudEF0b21zLCBjZGVMb2FkZWQuY3VycmVuY3kpO1xuICAgICAgICAgIGxvZ19fKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIik7XG4gICAgICAgICAgc3Bhbj8uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgICAgdHJhY2soXCJmb3JtX2xvYWRlZFwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycik7XG4gICAgICAgICAgc3Bhbj8uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZXJyX18oXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgdHJhY2soXCJmb3JtX2luaXRfZXJyb3JcIiwge1xuICAgICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzcGFuPy5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLnNldEZvcm1IZWlnaHQgPSAoaGVpZ2h0KSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGlmICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykge1xuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0UpIHJldHVybjtcbiAgICAgICAgICBlbGVtZW50Lm5vZGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkZWQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICB0aGlzLmNkZUxvYWRFdmVudC5zZXQocGF5bG9hZCk7XG4gICAgICAgIHRyYWNrKFwiY2RlX2xvYWRlZFwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZXJyTXNnKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihlcnJNc2cpLCBlcnJNc2cpO1xuICAgICAgICB0cmFjayhcImNkZV9sb2FkX2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyTXNnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGVsZW1lbnRUeXBlLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImNyZWF0ZUVsZW1lbnRcIik7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgdHlwZSA9IF9FbGVtZW50VHlwZUVudW1ab2QucGFyc2UoZWxlbWVudFR5cGUpO1xuICAgICAgY29uc3QgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcob3B0aW9ucyk7XG4gICAgICBmcmFtZS5uYW1lID0gYCR7dHlwZX0tZWxlbWVudGA7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAvYXBwL3YxLyR7ZnJhbWUubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmcudG9TdHJpbmcoKTtcbiAgICAgIGZyYW1lLnNyYyA9IHVybC5ocmVmO1xuICAgICAgZnJhbWUuc3R5bGUuYm9yZGVyID0gXCJub25lXCI7XG4gICAgICBmcmFtZS5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgICAgY29uc3QgcmVnaXN0ZXJlZEVsZW1lbnQgPSB0aGlzLnJlZ2lzdGVySWZyYW1lKHR5cGUsIGZyYW1lKTtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkRWxlbWVudDtcbiAgICB9O1xuICAgIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAodHlwZSwgZnJhbWUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIG5vZGU6IGZyYW1lLFxuICAgICAgICBtb3VudDogKHNlbGVjdG9yKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik/LmFwcGVuZENoaWxkKGZyYW1lKTtcbiAgICAgICAgICB0cmFjayhcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IHR5cGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGVsZW1lbnQudHlwZSwgbm9kZTogZWxlbWVudC5ub2RlIH0pO1xuICAgICAgaWYgKCF0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkNdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFXTogdm9pZCAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1t0eXBlXSA9IGVsZW1lbnQ7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9O1xuICAgIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlcik7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpO1xuICAgICAgaWYgKG9wdGlvbnMuc3R5bGVzKSB7XG4gICAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInN0eWxlc1wiLCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhvcHRpb25zLnN0eWxlcykpO1xuICAgICAgfVxuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgfTtcbiAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAge1xuICAgICAgICAgIHNwYW5OYW1lOiBcImNvbm5lY3RfdG9fZWxlbWVudFwiLFxuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBjb25uID0gYXdhaXQgY3JlYXRlQ29ubmVjdGlvbihlbGVtZW50Lm5vZGUpO1xuICAgICAgICAgIGNvbm4udHJhY2luZ0NvbnRleHQgPSB7XG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGVsZW1lbnQudHlwZSwgY29ubik7XG4gICAgICAgICAgaWYgKCF0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgJiYgZWxlbWVudC50eXBlID09PSBFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRSkge1xuICAgICAgICAgICAgdGhpcy5hbnlDZGVDb25uLnNldChjb25uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICkuY2F0Y2goKGVycikgPT4gZXJyX18oXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGVycikpO1xuICAgIH07XG4gICAgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5O1xuICAgIH07XG4gICAgdGhpcy5zdWJtaXRDYXJkID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIGVycl9fKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVUcmFja2luZ1NwYW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Bhbk5hbWU6IFwic3VibWl0X2NhcmRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IHBhcmFtcz8ucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyYWNrKFwic3VibWl0X2NhcmRcIiwgeyAuLi5wYXJhbXMgfSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJzdWJtaXRDYXJkXCIpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dDIgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWNvbnRleHQyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBPanNGbG93cy5jb21tb25DQy5ydW4oe1xuICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKSxcbiAgICAgICAgICAgICAgICBwYXltZW50Um91dGVJZDogcGFyYW1zPy5wYXltZW50Um91dGVJZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAge1xuICAgICAgICAgIHNwYW5OYW1lOiBcImdldF9hdmFpbGFibGVfcGF5bWVudF9tZXRob2RzXCIsXG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzXCIpO1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghY29udGV4dDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBhcHBsZVBheVByb2Nlc3NvcnMsIGlzQXZhaWxhYmxlOiBpc0FwcGxlUGF5QXZhaWxhYmxlIH0gPSBnZXRBcHBsZVBheVByb2Nlc3NvcnMoXG4gICAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBnb29nbGVQYXlQcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNHb29nbGVQYXlBdmFpbGFibGUgfSA9IGdldEdvb2dsZVBheVByb2Nlc3NvcnMoXG4gICAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgcGF5cGFsRmxvd1Jlc3VsdCA9IHRoaXMuaW5pdEZsb3dzLnBheXBhbC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgY29uc3QgcGF5cGFsQXZhaWxhYmxlID0gcGF5cGFsRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2U7XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBrbGFybmFQcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNLbGFybmFBdmFpbGFibGUgfSA9IGdldEtsYXJuYVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogYWZmaXJtUHJvY2Vzc29ycywgaXNBdmFpbGFibGU6IGlzQWZmaXJtQXZhaWxhYmxlIH0gPSBnZXRBZmZpcm1Qcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IGFmdGVycGF5UHJvY2Vzc29ycywgaXNBdmFpbGFibGU6IGlzQWZ0ZXJwYXlBdmFpbGFibGUgfSA9IGdldEFmdGVycGF5UHJvY2Vzc29ycyhcbiAgICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBwb2NreXRQYXlwYWxBdmFpbGFibGUgPSBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLnNvbWUoXG4gICAgICAgICAgICAobWV0aG9kKSA9PiBtZXRob2QucHJvY2Vzc29yX25hbWUgPT09IFwicG9ja3l0XCIgJiYgbWV0aG9kLnByb3ZpZGVyID09PSBcInBheXBhbFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBsb29wRmxvd1Jlc3VsdCA9IHRoaXMuaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGNvbnN0IGxvb3BDcnlwdG9BdmFpbGFibGUgPSBsb29wRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2U7XG4gICAgICAgICAgY29uc3Qgc3RyaXBlTGlua0Zsb3dSZXN1bHQgPSB0aGlzLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBjb25zdCBzdHJpcGVMaW5rQXZhaWxhYmxlID0gc3RyaXBlTGlua0Zsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlID8/IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IG1ldGhvZHMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuY2FyZCxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmFwcGxlUGF5LFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBhcHBsZVBheVByb2Nlc3NvcnMsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBpc0FwcGxlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmdvb2dsZVBheSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5UHJvY2Vzc29ycyxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGlzR29vZ2xlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLnBheXBhbCxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogcGF5cGFsQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5wYXlwYWxdIDogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBwYXlwYWxBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMua2xhcm5hLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBrbGFybmFQcm9jZXNzb3JzLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogaXNLbGFybmFBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuYWZmaXJtLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBhZmZpcm1Qcm9jZXNzb3JzLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogaXNBZmZpcm1BdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuYWZ0ZXJwYXksXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGFmdGVycGF5UHJvY2Vzc29ycyxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGlzQWZ0ZXJwYXlBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMucG9ja3l0UGF5cGFsLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBwb2NreXRQYXlwYWxBdmFpbGFibGUgPyBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLnBvY2t5dF0gOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHBvY2t5dFBheXBhbEF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5sb29wQ3J5cHRvLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBsb29wQ3J5cHRvQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5sb29wXSA6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogbG9vcENyeXB0b0F2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5zdHJpcGVMaW5rLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZV0sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBzdHJpcGVMaW5rQXZhaWxhYmxlLFxuICAgICAgICAgICAgICBjb250cm9sbGVyOiBzdHJpcGVMaW5rRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPyBzdHJpcGVMaW5rRmxvd1Jlc3VsdC5jb250cm9sbGVyIDogdm9pZCAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICBjb25zdCBpbml0Rmxvd05hbWVNYXAgPSB7XG4gICAgICAgICAgICBwYXlwYWw6IFN1Ym1pdE1ldGhvZHMucGF5cGFsLFxuICAgICAgICAgICAgYWlyd2FsbGV4R29vZ2xlUGF5OiBTdWJtaXRNZXRob2RzLmFpcndhbGxleEdvb2dsZVBheSxcbiAgICAgICAgICAgIGFpcndhbGxleEFwcGxlUGF5OiBTdWJtaXRNZXRob2RzLmFpcndhbGxleEFwcGxlUGF5LFxuICAgICAgICAgICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEdvb2dsZVBheSxcbiAgICAgICAgICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEFwcGxlUGF5LFxuICAgICAgICAgICAgYWR5ZW5Hb29nbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWR5ZW5Hb29nbGVQYXksXG4gICAgICAgICAgICBhZHllbkFwcGxlUGF5OiBTdWJtaXRNZXRob2RzLmFkeWVuQXBwbGVQYXlcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IG1ldGhvZHNfb2xkID0gT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW2tleSwgZmxvd10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZsb3dSZXN1bHQgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBpbml0Rmxvd05hbWVNYXBba2V5XSA/PyBrZXk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBuYW1lOiBtZXRob2ROYW1lLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlID8/IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBbLi4ubWV0aG9kc19vbGQsIC4uLm1ldGhvZHNdO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH07XG4gICAgdGhpcy5nZW5lcmFsU3VibWl0ID0gYXN5bmMgKG1ldGhvZCwgc2V0dGluZ3MpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBlcnJfXyhcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlVHJhY2tpbmdTcGFuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcImdlbmVyYWxfZm9ybV9zdWJtaXRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cmFjayhcImdlbmVyYWxfZm9ybV9zdWJtaXRcIiwgeyBtZXRob2QsIHNldHRpbmdzIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2VuZXJhbFN1Ym1pdFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgaWYgKCFjb250ZXh0Mikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmNhcmQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0Q2FyZChzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICBcInBvY2t5dFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzIH0sXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLnBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MucGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5QQVlQQUwsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3MgfSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMua2xhcm5hOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3cgfSA9IGdldEtsYXJuYVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hZmZpcm06IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdyB9ID0gZ2V0QWZmaXJtUHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFmdGVycGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3cgfSA9IGdldEFmdGVycGF5UHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmxvb3BDcnlwdG86IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MubG9vcENyeXB0by5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwiY3J5cHRvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibG9vcFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93IH0gPSBnZXRBcHBsZVBheVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5nb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdyB9ID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gS2VlcGluZyBleGlzdGluZyBjb21tZW50ZWQgY29kZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBpbiB0aGUgZnV0dXJlIHZlcnNpb25cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleEdvb2dsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhaXJ3YWxsZXhHb29nbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFpcndhbGxleEdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleEFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYWlyd2FsbGV4QXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWlyd2FsbGV4QXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yaXplTmV0R29vZ2xlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGhvcml6ZU5ldEdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml6ZU5ldEdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhvcml6ZU5ldEFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYXV0aG9yaXplTmV0QXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYXV0aG9yaXplLW5ldC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml6ZU5ldEFwcGxlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFkeWVuR29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWR5ZW5Hb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hZHllbkdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhZHllbkdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhZHllbi1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhZHllbkdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hZHllbkFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWR5ZW5BcHBsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYWR5ZW5BcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhZHllbi1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkeWVuQXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4QUNIOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhBQ0gucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkFDSCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEVGVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MuYWlyd2FsbGV4RUZULnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5FRlQsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhCQUNTOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhCQUNTLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5CQUNTLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4U0VQQTpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MuYWlyd2FsbGV4U0VQQS5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuU0VQQSxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLnN0cmlwZUxpbms6IHtcbiAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgIFwiU3RyaXBlTGluayBjYW5ub3QgYmUgc3VibWl0dGVkIG1hbnVhbGx5LiBQbGVhc2UgbW91bnQgdGhlIGJ1dHRvbiBwcm9wZXJseSBhbmQgaWYgdXNlciBjb21wbGV0ZWQgdGhlIHBheW1lbnQgZmxvdyB2aWEgU3RyaXBlTGluayBidXR0b24sIHRoZSBwYXltZW50IHdpbGwgYmUgc3VibWl0dGVkIGF1dG9tYXRpY2FsbHkuXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGFzc2VydE5ldmVyKG1ldGhvZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3VibWl0V2l0aCA9IHRoaXMuZ2VuZXJhbFN1Ym1pdDtcbiAgICB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZDtcbiAgICB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBsb2dfXyhcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpO1xuICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZGVzdHJveVwiKTtcbiAgICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPz8ge30pKSB7XG4gICAgICAgIGlmICghZWxlbWVudCkgY29udGludWU7XG4gICAgICAgIGVsZW1lbnQubm9kZS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgICBkZXRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycygpO1xuICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgICAgZGVsZXRlIHdpbmRvd1tcIm9qc1wiXTtcbiAgICAgIHRyYWNrKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrcyA9IChuZXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5zZXRDYWxsYmFja3MobmV3Q2FsbGJhY2tzKTtcbiAgICB9O1xuICAgIE9wZW5QYXlGb3JtLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpO1xuICAgIHRoaXMub2pzVmVyc2lvbiA9IFwiMC41LjI0XCI7XG4gICAgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwiMC41LjI0XCI7XG4gICAgdGhpcy5iYXNlVXJsID0gY29uZmlnLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9O1xuICAgIHRoaXMuZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdChjb25maWcpO1xuICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbDtcbiAgICB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt2NCgpfWA7XG4gICAgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgdGhpcy5mb3JtVGFyZ2V0ID0gY29uZmlnLmZvcm1UYXJnZXQgPz8gXCJib2R5XCI7XG4gICAgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH07XG4gICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBDb25uZWN0aW9uTWFuYWdlcigpO1xuICAgIHRoaXMuZGV2aWNlVG9rZW4gPSBnZXREZXZpY2VUb2tlbigpO1xuICAgIGF0dGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcmssIHZlcnNpb24gfSA9IGdldEZyYW1ld29ya0luZm8oKTtcbiAgICBnZXRDdXJyZW50RW52KHRoaXMuYmFzZVVybCkudGhlbigoZW52aXJvbm1lbnQpID0+IHtcbiAgICAgIGlmICghbWV0cmljc1B1Ymxpc2hlci5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29udGV4dCA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICAgIGZyYW1ld29yayxcbiAgICAgICAgICBmcmFtZXdvcmtWZXJzaW9uOiB2ZXJzaW9uLFxuICAgICAgICAgIG9qc1ZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBvanNSZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmxcbiAgICAgICAgfTtcbiAgICAgICAgbWV0cmljc1B1Ymxpc2hlci5zZXQobWV0cmljc0NvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRyYWNrKFwiZm9ybV9pbml0XCIpO1xuICAgIGNvbnNvbGUubG9nKFwiT0pTIFZFUlNJT05cIiwgdGhpcy5vanNWZXJzaW9uKTtcbiAgICBpZiAoY29uZmlnLmFsbG93VHJhY2luZyA9PT0gdHJ1ZSkge1xuICAgICAgaW5pdFRyYWNlclNhZmUodGhpcy5vanNWZXJzaW9uLCB0aGlzLmJhc2VVcmwpO1xuICAgIH1cbiAgICB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlcih0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5vanNGbG93cyA9IE9qc0Zsb3dzO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5hc3NpZ25Bc1NpbmdsZXRvbiA9IChmb3JtKSA9PiB7XG4gICAgICBpZiAoT3BlblBheUZvcm0uZ2V0SW5zdGFuY2UoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgICAgIH1cbiAgICAgIHdpbmRvd1tcIm9qc1wiXSA9IGZvcm07XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZ2V0SW5zdGFuY2UgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gd2luZG93W1wib2pzXCJdID8/IG51bGw7XG4gICAgfTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuYnVpbGRPanNGbG93Q29udGV4dCA9IChjb25maWcsIGNkZUxvYWRlZFBheWxvYWQsIGFueUNkZUNvbm5lY3Rpb24sIGZvcm1EaXYpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IGNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBiYXNlVXJsOiBuZXcgVVJMKGNvbmZpZy5iYXNlVXJsID8/IEZSQU1FX0JBU0VfVVJMKS5vcmlnaW4sXG4gICAgICAgIGZvcm1EaXYsXG4gICAgICAgIGVsZW1lbnRzU2Vzc2lvbklkOiBjZGVMb2FkZWRQYXlsb2FkLnNlc3Npb25JZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogY2RlTG9hZGVkUGF5bG9hZC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjdXN0b21Jbml0UGFyYW1zOiBjb25maWcuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fSxcbiAgICAgICAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiBjb25maWcucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uXG4gICAgICB9O1xuICAgIH07XG4gIH1cbiAgY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShjYWxsZXIgPSBcInVua25vd25cIikge1xuICAgIGNvbnN0IGN1cnJlbnRJbnN0YW5jZSA9IE9wZW5QYXlGb3JtLmdldEluc3RhbmNlKCk7XG4gICAgY29uc3QgZGVidWdJbmZvID0ge1xuICAgICAgdGhpc0Zvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICBjdXJyZW50Rm9ybUlkOiBjdXJyZW50SW5zdGFuY2U/LmZvcm1JZCB8fCBcIm5vLWN1cnJlbnQtaW5zdGFuY2VcIixcbiAgICAgIGlzRGVzdHJveWVkOiB0aGlzLmlzRGVzdHJveWVkLFxuICAgICAgY2hlY2tvdXRUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbi5zdWJzdHJpbmcoMCwgMTApICsgXCIuLi5cIlxuICAgIH07XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFxuICAgICAgW1dhcm5pbmddIEludmFsaWQgZm9ybSBpbnN0YW5jZSBkZXRlY3RlZC5cbiAgICAgIEl0IGxvb2tzIGxpa2UgeW91IGFyZSBzdGlsbCB1c2luZyBhbiBvbGQgaW5zdGFuY2UgdGhhdCBoYXMgYmVlbiBkZXN0cm95ZWQuXG4gICAgICBQbGVhc2UgbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZm9ybSBhbmQgY2xlYW51cCBldmVudCBsaXN0ZW5lcnMuXG4gICAgICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIERlYnVnIEluZm86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIC0gY2FsbGVyOiAke2NhbGxlcn1cbiAgICAgIC0gY2FsbGVyX2Zvcm1faWQ6ICR7ZGVidWdJbmZvLnRoaXNGb3JtSWR9XG4gICAgICAtIGN1cnJlbnRfYWN0aXZlX2Zvcm1faWQ6ICR7ZGVidWdJbmZvLmN1cnJlbnRGb3JtSWR9XG4gICAgICAtIGlzX2Rlc3Ryb3llZDogJHtkZWJ1Z0luZm8uaXNEZXN0cm95ZWR9XG4gICAgICAtIGNoZWNrb3V0X3Rva2VuOiAke2RlYnVnSW5mby5jaGVja291dFRva2VufVxuICAgIGA7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgIGVycl9fKGVycm9yTWVzc2FnZSk7XG4gICAgICB0cmFjayhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWN1cnJlbnRJbnN0YW5jZSB8fCBjdXJyZW50SW5zdGFuY2UuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCkge1xuICAgICAgZXJyX18oZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCB7IENvbnRleHRBUEkgYXMgQywgRGlhZ0FQSSBhcyBELCBFbGVtZW50VHlwZUVudW0gYXMgRSwgRmllbGROYW1lIGFzIEYsIElOVkFMSURfU1BBTl9DT05URVhUIGFzIEksIE9wZW5QYXlGb3JtIGFzIE8sIFByb3h5VHJhY2VyIGFzIFAsIFJPT1RfQ09OVEVYVCBhcyBSLCBTcGFuS2luZCBhcyBTLCBUcmFjZUZsYWdzIGFzIFQsIGNvbnRleHQgYXMgYSwgaXNWYWxpZFRyYWNlSWQgYXMgYiwgY3JlYXRlQ29udGV4dEtleSBhcyBjLCBpc1ZhbGlkU3BhbklkIGFzIGQsIFNwYW5TdGF0dXNDb2RlIGFzIGUsIERpYWdMb2dMZXZlbCBhcyBmLCBnZXRHbG9iYWwgYXMgZywgSU5WQUxJRF9TUEFOSUQgYXMgaCwgaXNTcGFuQ29udGV4dFZhbGlkIGFzIGksIElOVkFMSURfVFJBQ0VJRCBhcyBqLCBQcm94eVRyYWNlclByb3ZpZGVyIGFzIGssIFN1Ym1pdE1ldGhvZHMgYXMgbCwgcmVnaXN0ZXJHbG9iYWwgYXMgciwgdHJhY2UgYXMgdCwgdW5yZWdpc3Rlckdsb2JhbCBhcyB1IH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxrQkFBQUEsVUFBc0I7QUFDL0IsU0FBUyxLQUFBQyxTQUFTO0FBQ2xCLE9BQU9DLFFBQVc7QUFDbEIsU0FBUyxNQUFBQyxVQUFVO0FBRW5CLFNBQVNDLEdBQVNDLEdBQVFDLEdBQVc7QUFDbkMsTUFBSUMsSUFBaUIsT0FBTztBQUM1QixFQUFBQSxJQUFpQkEsRUFBZUYsR0FBUUMsQ0FBUyxJQUFJRCxFQUFPLFlBQVlDO0FBQzFFO0FBQ0EsU0FBU0UsR0FBU0gsR0FBUUksR0FBSTtBQUM1QixFQUFJQSxNQUFPLFdBQ1RBLElBQUtKLEVBQU87QUFHZCxNQUFJSyxJQUFvQixNQUFNO0FBQzlCLEVBQUFBLEtBQXFCQSxFQUFrQkwsR0FBUUksQ0FBRTtBQUNuRDtBQUVBLElBQUlFLEtBQWMsNEJBQVk7QUFDNUIsTUFBSUMsSUFBaUIsU0FBdUJDLEdBQUdDLEdBQUc7QUFDaEQsV0FBQUYsSUFBaUIsT0FBTyxrQkFBa0I7QUFBQSxNQUN4QyxXQUFXLENBQUM7QUFBQSxJQUNkLGFBQWEsU0FBUyxTQUFVQyxHQUFHQyxHQUFHO0FBQ3BDLE1BQUFELEVBQUUsWUFBWUM7QUFBQSxJQUNoQixLQUFLLFNBQVVELEdBQUdDLEdBQUc7QUFDbkIsZUFBU0MsS0FBS0Q7QUFDWixRQUFJ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QUNBLG1CQUFtQjBwQixFQUFpQjtBQUFBLEVBQ3BDLHdCQUF3QkEsRUFBaUI7QUFBQSxFQUN6QyxrQkFBQXJnQjtBQUFBLEVBQ0Esa0JBQWtCem5CLEVBQU8sb0JBQW9CLENBQUM7QUFBQSxFQUM5QyxtQ0FBbUNBLEVBQU87QUFDNUM7QUEzcEJOLElBQU0rbkMsS0FBTjdDOyIsCiAgIm5hbWVzIjogWyJjb25uZWN0VG9DaGlsZCIsICJ6IiwgImNoYWxrIiwgInY0IiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiZm4iLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJiIiwgInAiLCAiX18iLCAiQ3VzdG9tRXJyb3IiLCAiX3N1cGVyIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJfRWxlbWVudFR5cGVFbnVtWm9kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkJhc2VFbGVtZW50c1N0eWxlIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiRWxlbWVudEV2ZW50IiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiVGhyZWVEU1N0YXR1cyIsICJUaHJlZURTU3RhdHVzMiIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAiQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkFXWEJhbmsiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UiLCAiQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiRUZURm9ybURhdGEiLCAiQkFDU0Zvcm1EYXRhIiwgIlNFUEFGb3JtRGF0YSIsICJBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEiLCAiU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIk1pY3JvRGVwb3NpdFN0YXR1c1Jlc3BvbnNlIiwgIm51bGxPclVuZGVmT3IiLCAiQ0RFUmVzcG9uc2VFcnJvciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiQ29tcGxldGVBZGRyZXNzIiwgIlNldHVwQ2hlY2tvdXRSZXNwb25zZSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIlN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlIiwgIkNoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlIiwgIlByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIlNldFVzZXJEZXZpY2VUb2tlblJlc3BvbnNlIiwgIlVzZXJBY3Rpb25GRVBheWxvYWQiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSIsICJab2RGaWVsZEVycm9yIiwgIlpvZEZpZWxkRXJyb3JzIiwgIk1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0UiLCAiZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UiLCAib2dFcnJvck1lc3NhZ2UiLCAia2V5IiwgImlzU3RyaW5naWZpZWRKc29uT2JqZWN0IiwgInN0ciIsICJjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgInJlc3BvbnNlIiwgImVyciIsICJjcmVhdGVNZXNzYWdlRnJvbVpvZEZpZWxkRXJyb3JzIiwgImVycm9ycyIsICJnZXRFcnJvck1lc3NhZ2UiLCAib2JqIiwgImUyIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAic3VtIiwgImFyciIsICJhIiwgImJlZm9yZVVubG9hZEhhbmRsZXIiLCAiZXZlbnQiLCAicHJldmVudE5hdmlnYXRpb24iLCAic3RvcFByZXZlbnROYXZpZ2F0aW9uIiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgInNpbXBsZU9qc0Zsb3ciLCAiaXNTdWJtaXR0aW5nIiwgInBhcmFtcyIsICJ0cmFjayIsICJmbG93UmVzdWx0IiwgImZvcmNlUHJvY2Vzc01ldHJpY3NRdWV1ZSIsICJlcnJvck1lc3NhZ2UiLCAiZXJyb3JDb2RlIiwgInNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZSIsICJhZGRFcnJvckNhdGNoZXJGb3JJbml0IiwgImluaXQiLCAiZXJyX18iLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJleHRlbmRTdGF0aWNzIiwgIl9fZXh0ZW5kcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgInZhbHVlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgImUiLCAicmVqZWN0ZWQiLCAicmVzdWx0IiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJ0IiwgImYiLCAieSIsICJnIiwgInZlcmIiLCAibiIsICJ2IiwgIm9wIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19yZWFkJDQiLCAiciIsICJhciIsICJfX3NwcmVhZEFycmF5JDQiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInEiLCAiYXdhaXRSZXR1cm4iLCAicmVzdW1lIiwgInNldHRsZSIsICJmdWxmaWxsIiwgIl9fYXN5bmNWYWx1ZXMiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJjcmVhdGVFcnJvckNsYXNzIiwgImNyZWF0ZUltcGwiLCAiX3N1cGVyIiwgImluc3RhbmNlIiwgImN0b3JGdW5jIiwgIlVuc3Vic2NyaXB0aW9uRXJyb3IiLCAiZXJyb3JzIiwgImVyciIsICJpIiwgImFyclJlbW92ZSIsICJhcnIiLCAiaXRlbSIsICJpbmRleCIsICJTdWJzY3JpcHRpb24iLCAiaW5pdGlhbFRlYXJkb3duIiwgImVfMSIsICJfYSIsICJlXzIiLCAiX2IiLCAiX3BhcmVudGFnZSIsICJfcGFyZW50YWdlXzEiLCAiX192YWx1ZXMiLCAiX3BhcmVudGFnZV8xXzEiLCAicGFyZW50XzEiLCAiZV8xXzEiLCAiaW5pdGlhbEZpbmFsaXplciIsICJlIiwgIl9maW5hbGl6ZXJzIiwgIl9maW5hbGl6ZXJzXzEiLCAiX2ZpbmFsaXplcnNfMV8xIiwgImZpbmFsaXplciIsICJleGVjRmluYWxpemVyIiwgIl9fc3ByZWFkQXJyYXkkNCIsICJfX3JlYWQkNCIsICJlXzJfMSIsICJ0ZWFyZG93biIsICJwYXJlbnQiLCAiZW1wdHkiLCAiRU1QVFlfU1VCU0NSSVBUSU9OIiwgImlzU3Vic2NyaXB0aW9uIiwgImNvbmZpZyIsICJ0aW1lb3V0UHJvdmlkZXIiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImFyZ3MiLCAiX2kiLCAiaGFuZGxlIiwgInJlcG9ydFVuaGFuZGxlZEVycm9yIiwgIm5vb3AiLCAiZXJyb3JDb250ZXh0IiwgImNiIiwgIlN1YnNjcmliZXIiLCAiX19leHRlbmRzIiwgImRlc3RpbmF0aW9uIiwgIl90aGlzIiwgIkVNUFRZX09CU0VSVkVSIiwgIm5leHQiLCAiZXJyb3IiLCAiY29tcGxldGUiLCAiU2FmZVN1YnNjcmliZXIiLCAiQ29uc3VtZXJPYnNlcnZlciIsICJwYXJ0aWFsT2JzZXJ2ZXIiLCAiaGFuZGxlVW5oYW5kbGVkRXJyb3IiLCAib2JzZXJ2ZXJPck5leHQiLCAiZGVmYXVsdEVycm9ySGFuZGxlciIsICJvYnNlcnZhYmxlIiwgImlkZW50aXR5IiwgIngiLCAicGlwZUZyb21BcnJheSIsICJmbnMiLCAiaW5wdXQiLCAicHJldiIsICJmbiIsICJPYnNlcnZhYmxlIiwgInN1YnNjcmliZSIsICJvcGVyYXRvciIsICJzdWJzY3JpYmVyIiwgImlzU3Vic2NyaWJlciIsICJzb3VyY2UiLCAic2luayIsICJwcm9taXNlQ3RvciIsICJnZXRQcm9taXNlQ3RvciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJvcGVyYXRpb25zIiwgImlzT2JzZXJ2ZXIiLCAiaGFzTGlmdCIsICJvcGVyYXRlIiwgImluaXQiLCAibGlmdGVkU291cmNlIiwgImNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciIsICJvbk5leHQiLCAib25Db21wbGV0ZSIsICJvbkVycm9yIiwgIm9uRmluYWxpemUiLCAiT3BlcmF0b3JTdWJzY3JpYmVyIiwgInNob3VsZFVuc3Vic2NyaWJlIiwgImNsb3NlZF8xIiwgIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yIiwgIlN1YmplY3QiLCAic3ViamVjdCIsICJBbm9ueW1vdXNTdWJqZWN0IiwgIl9jIiwgIm9ic2VydmVyIiwgIm9ic2VydmVycyIsICJoYXNFcnJvciIsICJpc1N0b3BwZWQiLCAidGhyb3duRXJyb3IiLCAiZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIiwgIkFjdGlvbiIsICJzY2hlZHVsZXIiLCAid29yayIsICJzdGF0ZSIsICJkZWxheSIsICJpbnRlcnZhbFByb3ZpZGVyIiwgIkFzeW5jQWN0aW9uIiwgImlkIiwgIl9pZCIsICJfc2NoZWR1bGVyIiwgIl9kZWxheSIsICJlcnJvcmVkIiwgImVycm9yVmFsdWUiLCAiYWN0aW9ucyIsICJTY2hlZHVsZXIiLCAic2NoZWR1bGVyQWN0aW9uQ3RvciIsICJub3ciLCAiQXN5bmNTY2hlZHVsZXIiLCAiU2NoZWR1bGVyQWN0aW9uIiwgImFjdGlvbiIsICJhc3luY1NjaGVkdWxlciIsICJpc0FycmF5TGlrZSIsICJpc1Byb21pc2UiLCAiaXNJbnRlcm9wT2JzZXJ2YWJsZSIsICJpc0FzeW5jSXRlcmFibGUiLCAib2JqIiwgImNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIiwgImdldFN5bWJvbEl0ZXJhdG9yIiwgIml0ZXJhdG9yIiwgImlzSXRlcmFibGUiLCAicmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciIsICJyZWFkYWJsZVN0cmVhbSIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInJlYWRlciIsICJkb25lIiwgIl9fZ2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAiaW5uZXJGcm9tIiwgImZyb21JbnRlcm9wT2JzZXJ2YWJsZSIsICJmcm9tQXJyYXlMaWtlIiwgImZyb21Qcm9taXNlIiwgImZyb21Bc3luY0l0ZXJhYmxlIiwgImZyb21JdGVyYWJsZSIsICJmcm9tUmVhZGFibGVTdHJlYW1MaWtlIiwgIm9icyIsICJhcnJheSIsICJwcm9taXNlIiwgIml0ZXJhYmxlIiwgIml0ZXJhYmxlXzEiLCAiaXRlcmFibGVfMV8xIiwgImFzeW5jSXRlcmFibGUiLCAicHJvY2VzcyIsICJhc3luY0l0ZXJhYmxlXzEiLCAiYXN5bmNJdGVyYWJsZV8xXzEiLCAiX19hd2FpdGVyIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZXhlY3V0ZVNjaGVkdWxlIiwgInBhcmVudFN1YnNjcmlwdGlvbiIsICJyZXBlYXQiLCAic2NoZWR1bGVTdWJzY3JpcHRpb24iLCAidGhyb3dFcnJvciIsICJlcnJvck9yRXJyb3JGYWN0b3J5IiwgImVycm9yRmFjdG9yeSIsICJFbXB0eUVycm9yIiwgImxhc3RWYWx1ZUZyb20iLCAiX2hhc1ZhbHVlIiwgIl92YWx1ZSIsICJpc1ZhbGlkRGF0ZSIsICJUaW1lb3V0RXJyb3IiLCAiaW5mbyIsICJzY2hlZHVsZXJBcmciLCAiZmlyc3QiLCAiZWFjaCIsICJfd2l0aCIsICJ0aW1lb3V0RXJyb3JGYWN0b3J5IiwgIl9kIiwgIm1ldGEiLCAib3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24iLCAidGltZXJTdWJzY3JpcHRpb24iLCAibGFzdFZhbHVlIiwgInNlZW4iLCAic3RhcnRUaW1lciIsICJMb2FkZWRPbmNlUHVibGlzaGVyIiwgImVyck1zZyIsICJ2YWx1ZUlmTm90TG9hZGVkIiwgInN1YnNjcmlwdGlvbiIsICJ0aW1lb3V0Q29uZmlnIiwgImFzc2VydE5ldmVyIiwgInRpbWVvdXRQYXJhbXMiLCAiT2pzRW52aXJvbm1lbnQiLCAieiIsICJjb25udG9CYXNlVXJscyIsICJnZXRDb25udG9VcmwiLCAiZW52IiwgImVudkNhY2hlIiwgImdldEN1cnJlbnRFbnYiLCAiYmFzZVVybCIsICJyZXNwb25zZSIsICJyZXMiLCAiZXhjbHVkZVByb3BzIiwgInByb3BzIiwgImtleSIsICJnZXRXaW5kb3dTYWZlIiwgIm1ldHJpY3NQdWJsaXNoZXIiLCAiTUVUUklDU19RVUVVRV9LRVkiLCAiTUFYX1JFVFJZX0FUVEVNUFRTIiwgIkJBVENIX1NJWkUiLCAiQkFUQ0hfSU5URVJWQUxfTVMiLCAibG9nX18keCIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJNZXRyaWNzUXVldWUiLCAiZXZlbnROYW1lIiwgInByb3BlcnRpZXMiLCAiY29udGV4dFByb3BlcnRpZXMiLCAiZXZlbnQiLCAidjQiLCAic3RvcmVkUXVldWUiLCAic2FmZVdpbmRvdyIsICJjb250ZXh0IiwgImJhdGNoIiwgImJhdGNoUGF5bG9hZCIsICJjb25udG9VcmwiLCAibWV0cmljc1JvdXRlciIsICJldmVudHNUb0tlZXAiLCAibWV0cmljc1F1ZXVlIiwgInRyYWNrIiwgImZvcmNlUHJvY2Vzc01ldHJpY3NRdWV1ZSIsICJvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yIiwgImVycm9yTWVzc2FnZSIsICJnZXRFcnJvck1lc3NhZ2UiLCAib25VbmNhdWdodEVycm9yIiwgInBhZ2VMaWZlY3ljbGUiLCAibG9hZFBhZ2VMaWZlY3ljbGUiLCAicGFnZUxpZmVjeWNsZVN0YXRlQ2hhbmdlSGFuZGxlciIsICJhdHRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycyIsICJsaWZlY3ljbGUiLCAiZGV0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMiLCAiU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIlBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhIiwgIm91ckN1cnJlbmN5VG9UaGVpcnMiLCAiZ2V0TG9hZGVkU3RyaXBlIiwgInB1Ymxpc2hhYmxlS2V5IiwgImlzU3RyaXBlSnNQcmVzZW50IiwgInNsZWVwIiwgImNyZWF0ZVN0cmlwZUVsZW1lbnRzIiwgInN0cmlwZVB1YktleSIsICJlbGVtZW50c09wdGlvbnMiLCAic3RyaXBlIiwgImNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0IiwgInRvdGFsQW1vdW50QXRvbSIsICJjdXJyZW5jeSIsICJpc0Ftb3VudFBlbmRpbmciLCAiaXNMaW5rT25seSIsICJzdHJpcGVDdXJyZW5jeSIsICJ0aW1lb3V0TXMiLCAid2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QiLCAicGF5bWVudFJlcXVlc3QiLCAiZXZ0IiwgImNvbmZpcm1TdHJpcGVQclBNIiwgIm5leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVQbSIsICJjb25maXJtUmVzdWx0IiwgImxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3ciLCAicmVzdWx0U3RhdHVzIiwgIl9nbG9iYWxUaGlzIiwgIlZFUlNJT04iLCAicmUiLCAiX21ha2VDb21wYXRpYmlsaXR5Q2hlY2siLCAib3duVmVyc2lvbiIsICJhY2NlcHRlZFZlcnNpb25zIiwgInJlamVjdGVkVmVyc2lvbnMiLCAibXlWZXJzaW9uTWF0Y2giLCAib3duVmVyc2lvblBhcnNlZCIsICJnbG9iYWxWZXJzaW9uIiwgIl9yZWplY3QiLCAidiIsICJfYWNjZXB0IiwgImdsb2JhbFZlcnNpb25NYXRjaCIsICJnbG9iYWxWZXJzaW9uUGFyc2VkIiwgImlzQ29tcGF0aWJsZSIsICJtYWpvciIsICJHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZIiwgIl9nbG9iYWwiLCAicmVnaXN0ZXJHbG9iYWwiLCAidHlwZSIsICJkaWFnIiwgImFsbG93T3ZlcnJpZGUiLCAiYXBpIiwgImdldEdsb2JhbCIsICJ1bnJlZ2lzdGVyR2xvYmFsIiwgIl9fcmVhZCQzIiwgIm8iLCAibiIsICJtIiwgInIiLCAiYXIiLCAiX19zcHJlYWRBcnJheSQzIiwgInRvIiwgImZyb20iLCAicGFjayIsICJsIiwgIkRpYWdDb21wb25lbnRMb2dnZXIiLCAibG9nUHJveHkiLCAiZnVuY05hbWUiLCAibmFtZXNwYWNlIiwgImxvZ2dlciIsICJEaWFnTG9nTGV2ZWwiLCAiY3JlYXRlTG9nTGV2ZWxEaWFnTG9nZ2VyIiwgIm1heExldmVsIiwgIl9maWx0ZXJGdW5jIiwgInRoZUxldmVsIiwgInRoZUZ1bmMiLCAiX19yZWFkJDIiLCAiX19zcHJlYWRBcnJheSQyIiwgIkFQSV9OQU1FJDIiLCAiRGlhZ0FQSSIsICJfbG9nUHJveHkiLCAic2VsZiIsICJzZXRMb2dnZXIiLCAib3B0aW9uc09yTG9nTGV2ZWwiLCAib2xkTG9nZ2VyIiwgIm5ld0xvZ2dlciIsICJzdGFjayIsICJvcHRpb25zIiwgImNyZWF0ZUNvbnRleHRLZXkiLCAiZGVzY3JpcHRpb24iLCAiQmFzZUNvbnRleHQiLCAicGFyZW50Q29udGV4dCIsICJST09UX0NPTlRFWFQiLCAiX19yZWFkJDEiLCAiX19zcHJlYWRBcnJheSQxIiwgIk5vb3BDb250ZXh0TWFuYWdlciIsICJfY29udGV4dCIsICJ0aGlzQXJnIiwgInRhcmdldCIsICJfX3JlYWQiLCAiX19zcHJlYWRBcnJheSIsICJBUElfTkFNRSQxIiwgIk5PT1BfQ09OVEVYVF9NQU5BR0VSIiwgIkNvbnRleHRBUEkiLCAiY29udGV4dE1hbmFnZXIiLCAiVHJhY2VGbGFncyIsICJJTlZBTElEX1NQQU5JRCIsICJJTlZBTElEX1RSQUNFSUQiLCAiSU5WQUxJRF9TUEFOX0NPTlRFWFQiLCAiTm9uUmVjb3JkaW5nU3BhbiIsICJfc3BhbkNvbnRleHQiLCAiX2tleSIsICJfYXR0cmlidXRlcyIsICJfbmFtZSIsICJfbGluayIsICJfbGlua3MiLCAiX3N0YXR1cyIsICJfZW5kVGltZSIsICJfZXhjZXB0aW9uIiwgIl90aW1lIiwgIlNQQU5fS0VZIiwgImdldFNwYW4iLCAiZ2V0QWN0aXZlU3BhbiIsICJzZXRTcGFuIiwgInNwYW4iLCAiZGVsZXRlU3BhbiIsICJzZXRTcGFuQ29udGV4dCIsICJzcGFuQ29udGV4dCIsICJnZXRTcGFuQ29udGV4dCIsICJWQUxJRF9UUkFDRUlEX1JFR0VYIiwgIlZBTElEX1NQQU5JRF9SRUdFWCIsICJpc1ZhbGlkVHJhY2VJZCIsICJ0cmFjZUlkIiwgImlzVmFsaWRTcGFuSWQiLCAic3BhbklkIiwgImlzU3BhbkNvbnRleHRWYWxpZCIsICJ3cmFwU3BhbkNvbnRleHQiLCAiY29udGV4dEFwaSIsICJOb29wVHJhY2VyIiwgIm5hbWUiLCAicm9vdCIsICJwYXJlbnRGcm9tQ29udGV4dCIsICJpc1NwYW5Db250ZXh0IiwgImFyZzIiLCAiYXJnMyIsICJhcmc0IiwgIm9wdHMiLCAiY3R4IiwgImNvbnRleHRXaXRoU3BhblNldCIsICJOT09QX1RSQUNFUiIsICJQcm94eVRyYWNlciIsICJfcHJvdmlkZXIiLCAidmVyc2lvbiIsICJfb3B0aW9ucyIsICJfZm4iLCAidHJhY2VyIiwgIk5vb3BUcmFjZXJQcm92aWRlciIsICJfdmVyc2lvbiIsICJOT09QX1RSQUNFUl9QUk9WSURFUiIsICJQcm94eVRyYWNlclByb3ZpZGVyIiwgImRlbGVnYXRlIiwgIlNwYW5LaW5kIiwgIlNwYW5TdGF0dXNDb2RlIiwgIkFQSV9OQU1FIiwgIlRyYWNlQVBJIiwgInByb3ZpZGVyIiwgInN1Y2Nlc3MiLCAidHJhY2UiLCAiY3JlYXRlQ0RFU3BhbiIsICJjZGVDb25uIiwgImRhdGEiLCAib3BlcmF0aW9uIiwgInJlc3VsdCIsICJjcmVhdGVUcmFja2luZ1NwYW4iLCAiQ2RlRXJyb3IiLCAiQ3VzdG9tRXJyb3IiLCAiZnJpZW5kbHlNZXNzYWdlIiwgInF1ZXJ5Q0RFIiwgInJlc3BvbnNlU2NoZW1hIiwgInRyYWNraW5nS2V5IiwgImlzQ0RFUmVzcG9uc2VFcnJvciIsICJjb25uZWN0aW9uIiwgImNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hIiwgInNjaGVtYSIsICJDREVSZXNwb25zZUVycm9yIiwgImdldENoZWNrb3V0UHJldmlldyIsICJyZXF1ZXN0IiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgImdldFByZWZpbGwiLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgInN0YXJ0UGF5bWVudEZsb3ciLCAicGF5bG9hZCIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAic3RhcnRQYXltZW50Rmxvd0ZvckNDIiwgIlN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JQUiIsICJjb25maXJtUGF5bWVudEZsb3ciLCAiQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgImNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkIiwgIkNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UiLCAiZ2V0Q2hlY2tvdXRWYWx1ZSIsICJzZWN1cmVUb2tlbiIsICJwcm9tb0NvZGUiLCAiY2hlY2tvdXRQcmV2aWV3IiwgImN1cnJlbmNpZXMiLCAiaW52IiwgImFtb3VudEF0b20iLCAic3VtIiwgImdldENoZWNrb3V0UHJldmlld0Ftb3VudCIsICJpc1NldHVwTW9kZSIsICJ0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zIiwgImFsbENkZUNvbm5lY3Rpb25zIiwgIlRva2VuaXplQ2FyZFJlc3BvbnNlIiwgImNoZWNrb3V0Q2FyZEVsZW1lbnRzIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgInNldHVwQ2hlY2tvdXQiLCAicGVyZm9ybUNoZWNrb3V0IiwgIkNERV9QT0xMSU5HX0lOVEVSVkFMIiwgInBpbmdDZGVGb3JTdGF0dXMiLCAiaWZyYW1lIiwgImNoaWxkT3JpZ2luIiwgInJlc3BvbnNlTW9kZWwiLCAiY29ubmVjdGlvbk9iaiIsICJjb25uZWN0VG9DaGlsZCIsICJwcmVwYXJlUGF5bWVudEZsb3ciLCAiUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UiLCAic2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlIiwgIkNoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlIiwgInNldFVzZXJEZXZpY2VUb2tlbiIsICJkZXZpY2VUb2tlbiIsICJTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgInBpbmciLCAiaXNSZXN1bHRWYWxpZCIsICJpc1ZhbGlkIiwgIkZSQU1FX0JBU0VfVVJMIiwgIkVOQ09ESU5HIiwgIkVOQ09ESU5HX0xFTiIsICJSQU5ET01fTEVOIiwgIlRJTUVfTEVOIiwgIlRJTUVfTUFYIiwgIlVMSURFcnJvckNvZGUiLCAiVUxJREVycm9yIiwgImVycm9yQ29kZSIsICJtZXNzYWdlIiwgInJhbmRvbUNoYXIiLCAicHJuZyIsICJyYW5kb21Qb3NpdGlvbiIsICJkZXRlY3RQUk5HIiwgInJvb3RMb29rdXAiLCAiZGV0ZWN0Um9vdCIsICJnbG9iYWxDcnlwdG8iLCAiYnVmZmVyIiwgImluV2ViV29ya2VyIiwgImVuY29kZVJhbmRvbSIsICJsZW4iLCAic3RyIiwgImVuY29kZVRpbWUiLCAibW9kIiwgImN1cnJlbnRMZW4iLCAidWxpZCIsICJzZWVkVGltZSIsICJjdXJyZW50UFJORyIsICJzZWVkIiwgIkNPT0tJRV9OQU1FIiwgImdldERldmljZVRva2VuIiwgImV4aXN0aW5nQ29va2llIiwgImNvb2tpZSIsICJ0b2tlbiIsICJzZXREZXZpY2VUb2tlbiIsICJvbmVZZWFyRnJvbU5vdyIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiaXNzdWVzUGVyRmllbGQiLCAiZmllbGROYW1lIiwgIkZpZWxkTmFtZUVudW0iLCAiY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtIiwgImZvcm1EaXYiLCAiaW5pdGlhbERpY3QiLCAiYWNjIiwgInBhcnNlRXZlbnRQYXlsb2FkIiwgImV2ZW50RGF0YSIsICJFbGVtZW50RXZlbnQiLCAiZ2VuZXJhdGVBbm9ueW1vdXNWYWx1ZXMiLCAiZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMiLCAiZmllbGRzIiwgIkZpZWxkTmFtZSIsICJnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMiLCAiY2hlY2tvdXRfc2V0dGluZ3MiLCAiZ2V0RnVsbE5hbWUiLCAiZmlyc3ROYW1lIiwgImxhc3ROYW1lIiwgInN0eWxlcyIsICJ3aWR0aCIsICJoZWlnaHQiLCAiYmFua1NlbGVjdG9yU3R5bGVzIiwgImNyZWF0ZUFuZE9wZW5GcmFtZSIsICJ1cmwiLCAidGl0bGUiLCAidGVtcGxhdGUiLCAiaG9zdCIsICJzaGFkb3dSb290IiwgImNhbmNlbEJ1dHRvbiIsICJjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yIiwgImJhbmtzIiwgImJhbmtMaXN0SHRtbCIsICJiYW5rIiwgImxvZ29IdG1sIiwgImJhbmtJdGVtcyIsICJjbGVhbnVwIiwgImNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtIiwgInBheW1lbnRNZXRob2RUeXBlIiwgImVsZW1lbnRzIiwgImhhbmRsZUNhbmNlbCIsICJvblN1Y2Nlc3MiLCAicG9sbGluZ0ludGVydmFsIiwgInN0YXJ0UG9sbGluZyIsICJNaWNyb0RlcG9zaXRTdGF0dXNSZXNwb25zZSIsICJjbGVhbnVwRXZlbnRMaXN0ZW5lcnMiLCAib3JpZ2luYWxIYW5kbGVDYW5jZWwiLCAid3JhcHBlZEhhbmRsZUNhbmNlbCIsICJoYW5kbGVQb2xsaW5nIiwgInN0YXR1cyIsICJoYW5kbGVFdmVudHMiLCAiVGhyZWVEU1N0YXR1cyIsICJzdGFydDNkc1ZlcmlmaWNhdGlvbiIsICJwYXJhbXMiLCAiZnJhbWVXaWR0aCIsICJmcmFtZUhlaWdodCIsICJmcmFtZVRpdGxlIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCIsICJvcGVuUG9wdXBXaW5kb3ciLCAicG9wdXBOYW1lIiwgInBvcHVwV2luZG93IiwgInN0YXJ0UG9wdXBXaW5kb3dWZXJpZmljYXRpb25TdHJpY3QiLCAiZXhwZWN0ZWRWZXJpZnlUb2tlbiIsICJlcnJfXyIsICJwb2xsaW5nIiwgInZlcmlmeVJlc3VsdCIsICJkZXRlY3RMYW5ndWFnZSIsICJsYW5ndWFnZSIsICJsb2dfXyR3IiwgImVycl9fJHciLCAiY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEiLCAicmVxdWlyZV96aXBfY29kZSIsICJyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzIiwgInJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzIiwgInBheW1lbnRfbWV0aG9kIiwgImlzQnVzaW5lc3NQdXJjaGFzZSIsICJub25DZGVGb3JtSW5wdXRzIiwgImNvbmRpdGlvbmFsRmllbGRzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMiLCAib25WYWxpZGF0aW9uRXJyb3IiLCAiZGVmYXVsdEZpZWxkVmFsdWVzIiwgImtleXMiLCAiZm9ybWF0dGVkIiwgImlzc3VlcyIsICJpc3N1ZUtleXMiLCAibG9nX18kdiIsICJlcnJfXyR2IiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDIiwgInZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHQiLCAicGFyc2VkIiwgIkFsbEZpZWxkTmFtZXMiLCAiZXJyX18kdSIsICJwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbmRDcG1NYXRjaGluZ1R5cGUiLCAiYWxsQ1BNcyIsICJ6b2RNb2RlbCIsICJjcG0iLCAiY3BtMiIsICJjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtIiwgInBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAiLCAibG9nX18yIiwgInByZWZpbGwiLCAiY3JlYXRlZFBheW1lbnRNZXRob2QiLCAiY2hlY2tvdXRSZXF1ZXN0IiwgIlBheW1lbnRQcm9jZXNzb3IiLCAibG9hZFNjcmlwdCIsICJzY3JpcHRJZCIsICJzcmMiLCAiY2hlY2tMb2FkZWRGbiIsICJldmVudExpc3RlbmVyQ29udHJvbGxlciIsICJzY3JpcHQiLCAiZXhpc3RpbmdTY3JpcHQiLCAiZ2V0UGF5bWVudERhdGFSZXF1ZXN0IiwgImdhdGV3YXkiLCAiZ2F0ZXdheU1lcmNoYW50SWQiLCAibWVyY2hhbnROYW1lIiwgIm1lcmNoYW50SWQiLCAiaW5pdGlhbFByZXZpZXciLCAib3ZlcnJpZGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbFByaWNlIiwgImN1cnJlbmN5Q29kZSIsICJiYXNlUmVxdWVzdCIsICJsb2FkR29vZ2xlUGF5U2NyaXB0IiwgInBheW1lbnRzQ2xpZW50IiwgImdldEdvb2dsZVBheUVudmlyb25tZW50IiwgImdldEdvb2dsZVBheW1lbnRzQ2xpZW50IiwgInBheW1lbnREYXRhUmVxdWVzdCIsICJlbnZpcm9ubWVudCIsICJwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJjb21tb25BY3Rpb24iLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5IiwgImZvcm1JbnB1dHMiLCAicGF5bWVudERhdGEiLCAiaW5wdXRzIiwgImJpbGxpbmdBZGRyZXNzIiwgInNoaXBwaW5nQWRkcmVzcyIsICJwYXllckZpcnN0TmFtZSIsICJsYXN0TmFtZVBhcnRzIiwgInBheWVyTGFzdE5hbWUiLCAibG9nX18kdSIsICJlcnJfXyR0IiwgInJ1bkFpcndhbGxleEJBQ1NGbG93IiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJmb3JtQ2FsbGJhY2tzIiwgImN1c3RvbVBhcmFtcyIsICJub25DZGVGb3JtRmllbGRzIiwgImFueUNkZUNvbm5lY3Rpb24iLCAidmVyaWZpY2F0aW9uTWV0aG9kIiwgIm1pY3JvRGVwb3NpdERhdGEiLCAic3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgInN0YXJ0Rmxvd05leHRBY3Rpb25zIiwgImNvbnNlbnRJZCIsICJhdmFpbGFibGVCYW5rcyIsICJzZWxlY3RlZEJhbmsiLCAiZGlyZWN0RGViaXREYXRhIiwgInJlZGlyZWN0VXJsIiwgIm5ld0NvbmZpcm1SZXN1bHQiLCAibG9nX18kdCIsICJlcnJfXyRzIiwgInJ1bkFpcndhbGxleEVGVEZsb3ciLCAibG9nX18kcyIsICJlcnJfXyRyIiwgInJ1bkFpcndhbGxleFNFUEFGbG93IiwgImxvZ19fJHIiLCAiZXJyX18kcSIsICJBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQzIiwgImVycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzdWx0IiwgImZyaWVuZGx5RXJyIiwgImRldkVyciIsICJjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMiLCAicGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmIiwgImhyZWYiLCAiaW50ZW50SWQiLCAicnVuQWlyd2FsbGV4M2RzRmxvdyIsICJoZWFkZXJzIiwgImluaXRpYWxJbnRlbnRJZCIsICJBcHBsZVBheUNwbSQyIiwgIkdvb2dsZVBheUNwbSQyIiwgImxvYWRBcHBsZVBheVNjcmlwdCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5IiwgImFwcGxlUGF5UGF5bWVudCIsICJwbUJpbGxpbmdDb250YWN0IiwgImJpbGxpbmdDb250YWN0IiwgInNoaXBwaW5nQ29udGFjdCIsICJjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCIsICJ0b3RhbCIsICJsaW5lSXRlbSIsICJhcHBsZUludGVydmFsVW5pdCIsICJhcHBsZUludGVydmFsQ291bnQiLCAiY3JlYXRlQXBwbGVQYXlUb3RhbCIsICJkZWZhdWx0TGFiZWwiLCAiYW1vdW50IiwgImdldEFwcGxlUGF5UGF5bWVudFJlcXVlc3QiLCAiQWR5ZW5FbnZpcm9ubWVudCIsICJBZHllbkxvY2FsZSIsICJsb2dfXyRxIiwgImVycl9fJHAiLCAiQWR5ZW4zZHNSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMkMiIsICJkZWNvZGVBZHllbkFjdGlvbiIsICJpc0FkeWVuQXZhaWxhYmxlIiwgImdldEFkeWVuQ2hlY2tvdXQiLCAiaGFuZGxlQWR5ZW4zZHMiLCAibG9jYWxlIiwgImNvdW50cnlDb2RlIiwgImNvbXBvbmVudCIsICJvbkNhbmNlbCIsICJvblBheW1lbnRGYWlsZWQiLCAib25BZGRpdGlvbmFsRGV0YWlscyIsICJfIiwgIl9fIiwgImFkeWVuQ2hlY2tvdXQiLCAiY2hlY2tvdXQiLCAiZGV0ZXJtaW5lTG9jYWxlIiwgInByZWZpbGxMb2NhbGUiLCAiYnJvd3NlckxvY2FsZSIsICJjaGVja0lmUmVxdWlyZXNBZHllbjNkcyIsICJydW5BZHllbjNkc0Zsb3ciLCAiQXBwbGVQYXlDcG0kMSIsICJHb29nbGVQYXlDcG0kMSIsICJsb2dfXyRwIiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMiIsICJwYXltZW50U2Vzc2lvblJlc3BvbnNlIiwgImhhbmRsZVBheW1lbnRBdXRob3JpemVkJDIiLCAiZ2V0RnJhdWRNZXRhZGF0YSIsICJsb2dfXyRvIiwgImVycl9fJG8iLCAiaW5pdEFkeWVuQXBwbGVQYXlGbG93IiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAidW5hdmFpbGFibGVSZXN1bHQiLCAiYXBwbGVQYXlDcG0iLCAib25BcHBsZVBheVN0YXJ0RmxvdyIsICJPanNGbG93cyIsICJydW5BZHllbkFwcGxlUGF5RmxvdyIsICJzZXNzaW9uIiwgInNlc3Npb25Db250ZXh0IiwgImluaXRpYWxQcmV2aWV3MiIsICJ1cGRhdGUiLCAibG9nX18kbiIsICJlcnJfXyRuIiwgImluaXRBZHllbkdvb2dsZVBheUZsb3ciLCAiZ29vZ2xlUGF5Q3BtIiwgInByb2Nlc3NvckFjY291bnQiLCAiY2xpZW50IiwgImlzUmVhZHlUb1BheSIsICJvbkdvb2dsZVBheVN0YXJ0RmxvdyIsICJydW5BZHllbkdvb2dsZVBheUZsb3ciLCAibWVyZ2VkSW5wdXRzIiwgIm91clBtSWQiLCAibG9nX18kbSIsICJlcnJfXyRtIiwgInJ1bkFpcndhbGxleEFDSEZsb3ciLCAibG9nX18kbCIsICJoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDEiLCAiaGFuZGxlM0RTIiwgImhhbmRsZVBheW1lbnRBdXRob3JpemVkJDEiLCAibG9nX18kayIsICJlcnJfXyRsIiwgImluaXRBaXJ3YWxsZXhBcHBsZVBheUZsb3ciLCAicnVuQWlyd2FsbGV4QXBwbGVQYXlGbG93IiwgImxvZ19fJGoiLCAiZXJyX18kayIsICJpbml0QWlyd2FsbGV4R29vZ2xlUGF5RmxvdyIsICJydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93IiwgImVuY3J5cHRlZFBheW1lbnRUb2tlbiIsICJsb2dfXyRpIiwgImVycl9fJGoiLCAiQWlyd2FsbGV4S2xhcm5hQ3BtIiwgImluaXRBaXJ3YWxsZXhLbGFybmFGbG93IiwgImtsYXJuYUNwbSIsICJydW5BaXJ3YWxsZXhLbGFybmFGbG93IiwgImlzQW5vbnltb3VzIiwgIm5ld0N1c3RvbWVyRmllbGRzIiwgIkFwcGxlUGF5Q3BtIiwgIkdvb2dsZVBheUNwbSIsICJoYW5kbGVWYWxpZGF0ZU1lcmNoYW50IiwgImhhbmRsZVBheW1lbnRBdXRob3JpemVkIiwgIm1vYmlsZVdhbGxldFBheW1lbnREYXRhIiwgImxvZ19fJGgiLCAiZXJyX18kaSIsICJpbml0QXV0aG5ldEFwcGxlUGF5RmxvdyIsICJydW5BdXRobmV0QXBwbGVQYXlGbG93IiwgImxvZ19fJGciLCAiZXJyX18kaCIsICJpbml0QXV0aG5ldEdvb2dsZVBheUZsb3ciLCAicnVuQXV0aG5ldEdvb2dsZVBheUZsb3ciLCAibG9nX18kZiIsICJlcnJfXyRnIiwgImF0dGFjaERldmljZURhdGFDb2xsZWN0b3IiLCAicG9zdFVybCIsICJhY2Nlc3NUb2tlbiIsICJmb3JtIiwgInJ1bkRldmljZURhdGFDb2xsZWN0aW9uIiwgImV4cGVjdGVkT3JpZ2luIiwgImRldGFjaCIsICJoYW5kbGVDb2xsZWN0aW9uRXZlbnQiLCAicnVuUGF5ZXJBdXRoIiwgInN0ZXBVcFVybCIsICJtZXJjaGFudERhdGEiLCAidG9rZW5JbnB1dCIsICJtZElucHV0IiwgImxvZ19fJGUiLCAiZXJyX18kZiIsICJDeWJlcnNvdXJjZUFjdGlvblBheWxvYWQiLCAibnVsbE9yVW5kZWZPciQxIiwgIkZSSUVORExZX0VSUiIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQxIiwgInVzZXJBY3Rpb24iLCAiY2hlY2tJZlJlcXVpcmVzQ3liZXJzb3VyY2UzZHMiLCAiaGFuZGxlQ3liZXJzb3VyY2UzZHMiLCAiY2xlYW51cFBvbGxpbmciLCAicnVuQ3liZXJzb3VyY2UzZHNGbG93IiwgInN0ZXBfdXBfdXJsIiwgImFjY2Vzc190b2tlbiIsICJkZF91cmwiLCAiZGRfdG9rZW4iLCAibWVyY2hhbnRfZGF0YSIsICJjb2xsZWN0aW9uUmVzdWx0IiwgImxvZ19fJGQiLCAiZXJyX18kZSIsICJQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZiIsICJ2YXVsdElkIiwgInBhcnNlQXJnRnJvbUhyZWYiLCAiYXJnTmFtZSIsICJjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMiLCAicnVuUG9ja3l0M2RzRmxvdyIsICJzdHJpcGVMb2dfXyIsICJTdHJpcGUzRFNNZXRhZGF0YVBheWxvYWQiLCAic3RyaXBlQ0MzRFNGbG93IiwgInBhcnNlVXNlckZFUGF5bG9hZCIsICJNQVhfQ09ORklSTV9MT09QX0lURVJBVElPTlMiLCAibG9nX18kYyIsICJlcnJfXyRkIiwgInVuc2FmZWx5UnVuVW5pZmllZENjRmxvdyIsICJjb21tb25DaGVja291dFBhcmFtcyIsICJ0b2tlbml6ZUNhcmRSZXN1bHRzIiwgInN0YXJ0UGZSZXN1bHQiLCAicmV0dXJuU3VjY2Vzc1Jlc3VsdCIsICJydW5Db25maXJtTG9vcCIsICJjaGVja291dEF0dGVtcHRJZCIsICJwZlJlc3VsdCIsICJ2YWxpZGF0ZVBmUmVzdWx0VXNlckFjdGlvbiIsICJ1c2VyQWN0aW9uUmVzdWx0IiwgInJ1blJlcXVpcmVkVXNlckFjdGlvbiIsICJjaGVja0lmTGVnYWN5M0RTUGF0aCIsICJjb21tb25DQzNEU0Zsb3ciLCAicGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiVXNlckFjdGlvbkZFUGF5bG9hZCIsICJwcmVmaWxsTW9kZSIsICJwYXltZW50TWV0aG9kSWQiLCAibG9nX18kYiIsICJlcnJfXyRjIiwgInJ1bkNvbW1vbkNjRmxvdyIsICJ1bmlmaWVkQ0NSb2xsb3V0UmF0aW8iLCAicm9sbCIsICJ1c2VVbmlmaWVkQ0NGbG93IiwgInVjY1JvbGxUcmFja2luZ01ldGFkYXRhIiwgImVyckhlYWRlcnMiLCAicmVxdWlyZXNQb2NreXQzZHMiLCAicG9ja3l0TWV0YWRhdGFGb3JDaGVja291dCIsICJhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0IiwgImFkeWVuTWV0YWRhdGFGb3JDaGVja291dCIsICJjeWJlcnNvdXJjZUFjdGlvbiIsICJjeWJlcnNvdXJjZUFjdGlvblBheWxvYWQiLCAiY3liZXJzb3VyY2VNZXRhZGF0YUZvckNoZWNrb3V0IiwgInNob3VsZFVzZVN0cmlwZUZsb3ciLCAicGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiY2NQbUlkIiwgInN0cmlwZUFjdGlvbiIsICJjb21tb24zRFNBY3Rpb25UeXBlcyIsICJyZXF1aXJlZF91c2VyX2FjdGlvbnMiLCAiQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkxvb3BDcnlwdG9DcG0iLCAibG9nX18kYSIsICJlcnJfXyRiIiwgImluaXRMb29wRmxvdyIsICJwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhIiwgInBheW1lbnRTZXR1cEluZm8iLCAic3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCIsICJtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50IiwgImFsbG93Q3VzdG9tZXJUb0Nob29zZUF1dGgiLCAiY2hhcmdlQW1vdW50VXNkQXRvbSIsICJwYXltZW50VXNkQW1vdW50IiwgImN1c3RvbWVyUmVmSWQiLCAid2lkZ2V0UHJvcHMiLCAiaW5pdExvb3BDb25uZWN0UHJvcHMiLCAicnVuTG9vcEZsb3ciLCAiaXNDaGVja291dE1vZGUiLCAiY3VzdG9tZXJGaWVsZHMiLCAibG9nX18kOSIsICJlcnJfXyRhIiwgIlBheXBhbENwbSIsICJpbml0UGF5cGFsRmxvdyIsICJwYXlwYWxDcG0iLCAicnVuUGF5cGFsRmxvdyIsICJ1c2VSZWRpcmVjdEZsb3ciLCAiZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyIsICJpc1BheUZpcnN0RmxvdyIsICJzdGFydFBheW1lbnRGbG93UmVxdWVzdCIsICJwcmVBY3Rpb25VcmwiLCAiZW5jb2RlZFJlcXVlc3QiLCAic2VhcmNoUGFyYW1zIiwgInBheXBhbEZsb3dSZXN1bHQiLCAiYXBwcm92YWxTZXNzaW9uSWQiLCAibG9nX18kOCIsICJlcnJfXyQ5IiwgIlBvY2t5dFBheXBhbENwbSIsICJpbml0UG9ja3l0UGF5cGFsRmxvdyIsICJwb2NreXRQYXlwYWxDcG0iLCAicnVuUG9ja3l0UGF5cGFsRmxvdyIsICJzZXR0aW5ncyIsICJsb2dfXyQ3IiwgImVycl9fJDgiLCAiU3RyaXBlQWZmaXJtQ3BtIiwgIlN0cmlwZUFmZmlybVJlcXVpcmVkVXNlckFjdGlvbnMiLCAiaW5pdFN0cmlwZUFmZmlybUZsb3ciLCAic3RyaXBlQWZmaXJtQ3BtIiwgInJ1blN0cmlwZUFmZmlybUZsb3ciLCAiY2FydEluZm8iLCAiY2xpZW50X3NlY3JldCIsICJjdXN0b21lck5hbWUiLCAiYWZmaXJtUGF5bWVudERhdGEiLCAiYWZmaXJtT3B0aW9ucyIsICJwYXltZW50SW50ZW50IiwgInRoZWlyUGF5bWVudE1ldGhvZCIsICJsb2dfXyQ2IiwgImVycl9fJDciLCAiU3RyaXBlQWZ0ZXJwYXlDcG0iLCAiU3RyaXBlQWZ0ZXJwYXlSZXF1aXJlZFVzZXJBY3Rpb25zIiwgImluaXRTdHJpcGVBZnRlcnBheUZsb3ciLCAic3RyaXBlQWZ0ZXJwYXlDcG0iLCAicnVuU3RyaXBlQWZ0ZXJwYXlGbG93IiwgImFmdGVycGF5UGF5bWVudERhdGEiLCAiYWZ0ZXJwYXlPcHRpb25zIiwgImNvbmZpcm1hdGlvblJlc3VsdCIsICJsb2dfXyQ1IiwgImVycl9fJDYiLCAiU3RyaXBlS2xhcm5hQ3BtIiwgIlN0cmlwZUtsYXJuYVJlcXVpcmVkVXNlckFjdGlvbnMiLCAiaW5pdFN0cmlwZUtsYXJuYUZsb3ciLCAic3RyaXBlS2xhcm5hQ3BtIiwgInJ1blN0cmlwZUtsYXJuYUZsb3ciLCAia2xhcm5hUGF5bWVudERhdGEiLCAia2xhcm5hT3B0aW9ucyIsICJPSlNfU1RSSVBFX0xJTktfQlROX0lEIiwgImxvZ19fJDQiLCAiZXJyX18kNSIsICJTdHJpcGVMaW5rQ3BtIiwgIlN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zIiwgImluaXRTdHJpcGVMaW5rRmxvdyIsICJpbml0UGFyYW1zIiwgInN0cmlwZUxpbmtDcG0iLCAibGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudCIsICJleHByZXNzQ2hlY2tvdXRFbGVtZW50IiwgInJlbmRlckxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQiLCAic2VsZWN0b3IiLCAic2lsZW50IiwgInBhcmVudENvbnRhaW5lciIsICJjb250YWluZXIiLCAiaXNBdXRoZW50aWNhdGVkIiwgImlzTGlua0F1dGhSZWFkeSIsICJpc1Bvc3NpYmxlQXV0aGVudGljYXRlZCIsICJtb3VudEJ1dHRvbiIsICJkaXNtb3VudEJ1dHRvbiIsICJnZXRFbGVtZW50QnlJZEFzeW5jIiwgInJ1blN0cmlwZUxpbmtGbG93IiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0iLCAib3VyRXhpc3RpbmdQbUlkIiwgInBheWVyTGFzdE5hbWVQYXJ0cyIsICJnZXRFbGVtZW50IiwgImVsZW1lbnQiLCAibG9nX18kMyIsICJlcnJfXyQ0IiwgIlN0cmlwZVByQ3BtIiwgImluaXRTdHJpcGVQckZsb3ciLCAicHIiLCAiY2FuTWFrZVBheW1lbnQiLCAicnVuU3RyaXBlUHJGbG93MiIsICJmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0IiwgInJ1blN0cmlwZVByRmxvdyQxIiwgImluaXRSZXN1bHQiLCAib3ZlcnJpZGUiLCAiYXBwbGVQYXlQYXltZW50UmVxdWVzdCIsICJ1cGRhdGVQcldpdGhBbW91bnQiLCAic3RyaXBlUG1BZGRlZEV2ZW50IiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0iLCAicGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVQbUV2dCIsICJpc1BlbmRpbmciLCAic3RyaXBlQXBwbGVQYXkiLCAibGFiZWwiLCAiY3BtcyIsICJ3aXRoUHJvdmlkZXIiLCAid2l0aFByb2Nlc3NvciIsICJtYXRjaGVzIiwgIm1hdGNoZXNQcm9jZXNzb3IiLCAibWF0Y2hlc1Byb3ZpZGVyIiwgImxvZ19fJDIiLCAiZXJyX18kMyIsICJjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlciIsICJmbG93TmFtZSIsICJpbml0RmxvdyIsICJwdWJsaXNoZXIiLCAic3RhcnRBbGxJbml0Rmxvd3MiLCAiZmxvd3MiLCAiZmxvdyIsICJjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzIiwgImVycl9fJDIiLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgImRldGVjdEZyYW1ld29yayIsICJ3aW5kb3ciLCAibmV4dFdpbmRvdyIsICJub2RlIiwgInZ1ZVdpbmRvdyIsICJnZXRGcmFtZXdvcmtWZXJzaW9uIiwgImZyYW1ld29yayIsICJuZ1ZlcnNpb25FbCIsICJnZXRGcmFtZXdvcmtJbmZvIiwgInNjcmVlbl9oZWlnaHQiLCAic2NyZWVuX3dpZHRoIiwgImNvbG9yX2RlcHRoIiwgImphdmFfZW5hYmxlZCIsICJ1c2VyX2FnZW50IiwgImFjY2VwdF9oZWFkZXIiLCAidGltZV96b25lX29mZnNldCIsICJTdWJtaXRNZXRob2RzIiwgIlN1Ym1pdE1ldGhvZHMyIiwgIlBheW1lbnRQcm92aWRlclR5cGUiLCAiUGF5bWVudFByb3ZpZGVyVHlwZTIiLCAiZ2V0QXBwbGVQYXlQcm9jZXNzb3JzIiwgImluaXRGbG93cyIsICJhcHBsZVBheUluaXRGbG93cyIsICJhcHBsZVBheUluaXRSZXN1bHRzIiwgImZsb3dWYWx1ZSIsICJzdHJpcGVQUkZsb3dSZXN1bHQiLCAic3RhcnRBcHBsZVBheUZsb3ciLCAiZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyIsICJnb29nbGVQYXlJbml0Rmxvd3MiLCAiZ29vZ2xlUGF5SW5pdFJlc3VsdHMiLCAic3RhcnRHb29nbGVQYXlGbG93IiwgImluaXRSZXN1bHRzIiwgImF2YWlsYWJsZUZsb3ciLCAiZ2V0S2xhcm5hUHJvY2Vzc29ycyIsICJrbGFybmFJbml0UmVzdWx0cyIsICJhaXJ3YWxsZXhLbGFybmFGbG93UmVzdWx0IiwgInN0cmlwZUtsYXJuYUZsb3dSZXN1bHQiLCAic3RhcnRLbGFybmFGbG93IiwgImdldEFmZmlybVByb2Nlc3NvcnMiLCAiYWZmaXJtSW5pdFJlc3VsdHMiLCAic3RyaXBlQWZmaXJtRmxvd1Jlc3VsdCIsICJzdGFydEFmZmlybUZsb3ciLCAiZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzIiwgImFmdGVycGF5SW5pdFJlc3VsdHMiLCAic3RyaXBlQWZ0ZXJwYXlGbG93UmVzdWx0IiwgInN0YXJ0QWZ0ZXJwYXlGbG93IiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgImxvZ19fJDEiLCAiZXJyX18kMSIsICJpbml0VHJhY2VyU2FmZSIsICJpbml0VHJhY2VyVW5zYWZlIiwgImdsb2JhbFRyYWNlciIsICJzZGtUcmFjZVdlYiIsICJDb25zb2xlU3BhbkV4cG9ydGVyIiwgIlNpbXBsZVNwYW5Qcm9jZXNzb3IiLCAiV2ViVHJhY2VyUHJvdmlkZXIiLCAiaW5zdHJ1bWVudGF0aW9uRmV0Y2giLCAiRmV0Y2hJbnN0cnVtZW50YXRpb24iLCAiY29udGV4dFpvbmUiLCAiWm9uZUNvbnRleHRNYW5hZ2VyIiwgImluc3RydW1lbnRhdGlvbiIsICJyZWdpc3Rlckluc3RydW1lbnRhdGlvbnMiLCAicmVzb3VyY2VzIiwgIlJlc291cmNlIiwgImRldGVjdFJlc291cmNlcyIsICJkZXRlY3RSZXNvdXJjZXNTeW5jIiwgImV4cG9ydGVyVHJhY2VPdGxwIiwgIk9UTFBUcmFjZUV4cG9ydGVyIiwgInByb3BhZ2F0b3JCMyIsICJCM1Byb3BhZ2F0b3IiLCAiQjNJbmplY3RFbmNvZGluZyIsICJzZGtUcmFjZUJhc2UiLCAiQmF0Y2hTcGFuUHJvY2Vzc29yIiwgImNvbGxlY3RvclVybCIsICJnZXRDb2xsZWN0b3JVcmwiLCAiZXhwb3J0ZXIiLCAiYmFzZUF0dHJzIiwgImZyb21CYXNlVXJsIiwgImJhc2VIb3N0bmFtZSIsICJPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlciIsICJmb3JtSWQiLCAiaW50ZXJuYWxDYWxsYmFja3MiLCAiZ2V0Q2xlYW5PcmlnaW4iLCAiZWxlbWVudElkIiwgImV2ZW50VHlwZSIsICJjcmVhdGVDb25uZWN0aW9uIiwgImlzVmFsaWRPYmplY3QiLCAiQ29ubmVjdGlvbk1hbmFnZXIiLCAic2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzIiwgImluaXRQckZsb3dzIiwgImNhbGxiYWNrcyIsICJzdHJpcGVQUiIsICJjYW5BcHBsZVBheSIsICJjYW5Hb29nbGVQYXkiLCAiZmluYWxTdGF0dXMiLCAidXNlclBhcmFtcyIsICJydW5TdHJpcGVQckZsb3ciLCAiR0VORVJJQ19DT05OX0VSUiIsICJsb2dfXyIsICJfT3BlblBheUZvcm0iLCAiY2RlQnJpZGdlSWZyYW1lIiwgIkVsZW1lbnRUeXBlRW51bSIsICJjZGVMb2FkZWQiLCAiY2RlQ29ublNwYW4iLCAiYW55Q2RlQ29ubiIsICJvanNDb250ZXh0IiwgImVsZW1lbnRUeXBlIiwgIl9FbGVtZW50VHlwZUVudW1ab2QiLCAiZnJhbWUiLCAicXVlcnlTdHJpbmciLCAiY29ubiIsICJjb250ZXh0MiIsICJhcHBsZVBheVByb2Nlc3NvcnMiLCAiaXNBcHBsZVBheUF2YWlsYWJsZSIsICJnb29nbGVQYXlQcm9jZXNzb3JzIiwgImlzR29vZ2xlUGF5QXZhaWxhYmxlIiwgInBheXBhbEF2YWlsYWJsZSIsICJrbGFybmFQcm9jZXNzb3JzIiwgImlzS2xhcm5hQXZhaWxhYmxlIiwgImFmZmlybVByb2Nlc3NvcnMiLCAiaXNBZmZpcm1BdmFpbGFibGUiLCAiYWZ0ZXJwYXlQcm9jZXNzb3JzIiwgImlzQWZ0ZXJwYXlBdmFpbGFibGUiLCAicG9ja3l0UGF5cGFsQXZhaWxhYmxlIiwgIm1ldGhvZCIsICJsb29wQ3J5cHRvQXZhaWxhYmxlIiwgInN0cmlwZUxpbmtGbG93UmVzdWx0IiwgInN0cmlwZUxpbmtBdmFpbGFibGUiLCAibWV0aG9kcyIsICJpbml0Rmxvd05hbWVNYXAiLCAiZmxvd1Jlc3VsdCIsICJzdGFydEZsb3ciLCAiYWlyd2FsbGV4R29vZ2xlUGF5IiwgImFpcndhbGxleEFwcGxlUGF5IiwgImF1dGhvcml6ZU5ldEdvb2dsZVBheSIsICJhdXRob3JpemVOZXRBcHBsZVBheSIsICJhZHllbkdvb2dsZVBheSIsICJhZHllbkFwcGxlUGF5IiwgIm5ld0NhbGxiYWNrcyIsICJtZXRyaWNzQ29udGV4dCIsICJjYWxsZXIiLCAiY3VycmVudEluc3RhbmNlIiwgImRlYnVnSW5mbyIsICJjZGVMb2FkZWRQYXlsb2FkIiwgIk9wZW5QYXlGb3JtIl0KfQo=