@xbstracts/medusa-coupons 0.0.4 → 0.0.5

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.
@@ -322,7 +322,9 @@ function emptyCoupon(options) {
322
322
  code_prefix: "COUPON",
323
323
  shared_code: "",
324
324
  expiration_type: "duration",
325
- expiration_days: "30",
325
+ expiration_duration: "30",
326
+ expiration_duration_unit: "days",
327
+ expiration_time_policy: "day_end",
326
328
  expiration_date: "",
327
329
  expiration_cap_by_campaign: true,
328
330
  expiration_cap_at: "",
@@ -440,7 +442,11 @@ function formsFromRow(row, options) {
440
442
  code_prefix: config3.code_prefix || "",
441
443
  shared_code: config3.shared_code || "",
442
444
  expiration_type: config3.expiration_policy?.type || "duration",
443
- expiration_days: config3.expiration_policy?.type === "duration" ? String(config3.expiration_policy.duration_days) : "30",
445
+ expiration_duration: config3.expiration_policy?.type === "duration" ? String(
446
+ config3.expiration_policy.duration ?? config3.expiration_policy.duration_days ?? 30
447
+ ) : "30",
448
+ expiration_duration_unit: config3.expiration_policy?.type === "duration" ? config3.expiration_policy.duration_unit || "days" : "days",
449
+ expiration_time_policy: config3.expiration_policy?.type === "duration" || config3.expiration_policy?.type === "month_end" ? config3.expiration_policy.time_policy || "exactly" : "day_end",
444
450
  expiration_date: config3.expiration_policy?.type === "fixed" ? toDateTimeLocal(config3.expiration_policy.expires_at) : "",
445
451
  expiration_cap_by_campaign: expirationPolicy.type === "none" || expirationPolicy.cap_by_campaign !== false,
446
452
  expiration_cap_at: expirationPolicy.type === "none" ? "" : toDateTimeLocal(expirationPolicy.cap_at),
@@ -1374,8 +1380,8 @@ function CouponProductModal({
1374
1380
  return false;
1375
1381
  }
1376
1382
  if (coupon.expiration_type === "duration") {
1377
- const days = Number(coupon.expiration_days);
1378
- if (!Number.isInteger(days) || days < 1) return false;
1383
+ const duration = Number(coupon.expiration_duration);
1384
+ if (!Number.isInteger(duration) || duration < 1) return false;
1379
1385
  } else if (coupon.expiration_type === "fixed") {
1380
1386
  const expiration = new Date(coupon.expiration_date);
1381
1387
  if (!coupon.expiration_date || Number.isNaN(expiration.getTime())) {
@@ -1580,9 +1586,16 @@ function CouponProductModal({
1580
1586
  expires_at: new Date(coupon.expiration_date).toISOString(),
1581
1587
  cap_by_campaign: coupon.expiration_cap_by_campaign,
1582
1588
  cap_at: coupon.expiration_cap_at ? new Date(coupon.expiration_cap_at).toISOString() : null
1589
+ } : coupon.expiration_type === "month_end" ? {
1590
+ type: "month_end",
1591
+ time_policy: coupon.expiration_time_policy,
1592
+ cap_by_campaign: coupon.expiration_cap_by_campaign,
1593
+ cap_at: coupon.expiration_cap_at ? new Date(coupon.expiration_cap_at).toISOString() : null
1583
1594
  } : {
1584
1595
  type: "duration",
1585
- duration_days: Number(coupon.expiration_days) || 30,
1596
+ duration: Number(coupon.expiration_duration) || 30,
1597
+ duration_unit: coupon.expiration_duration_unit,
1598
+ time_policy: coupon.expiration_time_policy,
1586
1599
  cap_by_campaign: coupon.expiration_cap_by_campaign,
1587
1600
  cap_at: coupon.expiration_cap_at ? new Date(coupon.expiration_cap_at).toISOString() : null
1588
1601
  },
@@ -1977,25 +1990,45 @@ function CouponProductModal({
1977
1990
  children: [
1978
1991
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Select.Trigger, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Select.Value, {}) }),
1979
1992
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_ui2.Select.Content, { children: [
1980
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Select.Item, { value: "none", children: "None" }),
1993
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Select.Item, { value: "none", children: "No expiration" }),
1994
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Select.Item, { value: "month_end", children: "End of same month" }),
1981
1995
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Select.Item, { value: "duration", children: "Duration after issue" }),
1982
1996
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Select.Item, { value: "fixed", children: "Fixed date" })
1983
1997
  ] })
1984
1998
  ]
1985
1999
  }
1986
2000
  ) }),
1987
- coupon.expiration_type === "duration" ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Field, { label: "Expiration days", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
1988
- import_ui2.Input,
1989
- {
1990
- type: "number",
1991
- min: 1,
1992
- value: coupon.expiration_days,
1993
- onChange: (event) => setCoupon((current) => ({
1994
- ...current,
1995
- expiration_days: event.target.value
1996
- }))
1997
- }
1998
- ) }) : coupon.expiration_type === "fixed" ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Field, { label: "Expires at", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
2001
+ coupon.expiration_type === "duration" ? /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
2002
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Field, { label: "Duration", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
2003
+ import_ui2.Input,
2004
+ {
2005
+ type: "number",
2006
+ min: 1,
2007
+ value: coupon.expiration_duration,
2008
+ onChange: (event) => setCoupon((current) => ({
2009
+ ...current,
2010
+ expiration_duration: event.target.value
2011
+ }))
2012
+ }
2013
+ ) }),
2014
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Field, { label: "Duration unit", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
2015
+ import_ui2.Select,
2016
+ {
2017
+ value: coupon.expiration_duration_unit,
2018
+ onValueChange: (expiration_duration_unit) => setCoupon((current) => ({
2019
+ ...current,
2020
+ expiration_duration_unit
2021
+ })),
2022
+ children: [
2023
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Select.Trigger, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Select.Value, {}) }),
2024
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_ui2.Select.Content, { children: [
2025
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Select.Item, { value: "days", children: "Days" }),
2026
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Select.Item, { value: "months", children: "Months" })
2027
+ ] })
2028
+ ]
2029
+ }
2030
+ ) })
2031
+ ] }) : coupon.expiration_type === "fixed" ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Field, { label: "Expires at", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
1999
2032
  import_ui2.Input,
2000
2033
  {
2001
2034
  type: "datetime-local",
@@ -2006,6 +2039,23 @@ function CouponProductModal({
2006
2039
  }))
2007
2040
  }
2008
2041
  ) }) : null,
2042
+ (coupon.expiration_type === "duration" || coupon.expiration_type === "month_end") && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Field, { label: "Expiration time", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
2043
+ import_ui2.Select,
2044
+ {
2045
+ value: coupon.expiration_time_policy,
2046
+ onValueChange: (expiration_time_policy) => setCoupon((current) => ({
2047
+ ...current,
2048
+ expiration_time_policy
2049
+ })),
2050
+ children: [
2051
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Select.Trigger, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Select.Value, {}) }),
2052
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_ui2.Select.Content, { children: [
2053
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Select.Item, { value: "day_end", children: "End of day" }),
2054
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ui2.Select.Item, { value: "exactly", children: "Exactly" })
2055
+ ] })
2056
+ ]
2057
+ }
2058
+ ) }),
2009
2059
  coupon.expiration_type !== "none" && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
2010
2060
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Field, { label: "Cap expiration", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
2011
2061
  "div",
@@ -2636,9 +2686,13 @@ function expirationPolicyLabel(snapshot) {
2636
2686
  const policy = snapshot?.expiration_policy;
2637
2687
  const type = snapshotString(policy, "type");
2638
2688
  if (type === "none") return "No expiration";
2689
+ if (type === "month_end") {
2690
+ return `End of same month (${snapshotString(policy, "time_policy") || "day_end"})`;
2691
+ }
2639
2692
  if (type === "duration") {
2640
- const days = snapshotNumber(policy, "duration_days") ?? 0;
2641
- return `${days} days after issuance`;
2693
+ const duration = snapshotNumber(policy, "duration") ?? snapshotNumber(policy, "duration_days") ?? 0;
2694
+ const unit = snapshotString(policy, "duration_unit") || "days";
2695
+ return `${duration} ${unit} after issuance`;
2642
2696
  }
2643
2697
  if (type === "fixed") {
2644
2698
  return `Fixed date ${formatDateTime(snapshotString(policy, "expires_at"))}`;
@@ -3223,6 +3277,6 @@ var admin_default = {
3223
3277
  },
3224
3278
  i18nModule: i18n_default
3225
3279
  };
3226
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2FkbWluL2luZGV4LnRzIiwgIi4uLy4uLy4uLy4uL3NyYy9hZG1pbi9pMThuL2VuLmpzb24iLCAiLi4vLi4vLi4vLi4vc3JjL2FkbWluL2kxOG4vaW5kZXgudHMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BtZWR1c2Fqcy9hZG1pbi1zZGsvZGlzdC9pbmRleC5tanMiLCAiLi4vLi4vLi4vLi4vc3JjL2FkbWluL3JvdXRlcy9jb3Vwb25zL3BhZ2UudHN4IiwgIi4uLy4uLy4uLy4uL3NyYy9kYXNoYm9hcmQvY291cG9ucy9jb3Vwb24tbWFuYWdlci50c3giLCAiLi4vLi4vLi4vLi4vc3JjL2Rhc2hib2FyZC9jb3Vwb25zL2NvdXBvbi1wcm9kdWN0cy1wYWdlLnRzeCIsICIuLi8uLi8uLi8uLi9zcmMvZGFzaGJvYXJkL2NvdXBvbnMvZW1wdHktc3RhdGUudHN4IiwgIi4uLy4uLy4uLy4uL3NyYy9hZG1pbi9yb3V0ZXMvY291cG9ucy9baWRdL3BhZ2UudHN4IiwgIi4uLy4uLy4uLy4uL3NyYy9hZG1pbi9yb3V0ZXMvY291cG9ucy9wcm9kdWN0cy9wYWdlLnRzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IGkxOG5SZXNvdXJjZXMgZnJvbSBcIi4vaTE4blwiXG5pbXBvcnQgQ291cG9uc1BhZ2UsIHsgY29uZmlnIGFzIGNvdXBvbnNDb25maWcgfSBmcm9tIFwiLi9yb3V0ZXMvY291cG9ucy9wYWdlXCJcbmltcG9ydCBDb3Vwb25EZXRhaWxQYWdlIGZyb20gXCIuL3JvdXRlcy9jb3Vwb25zL1tpZF0vcGFnZVwiXG5pbXBvcnQgQ291cG9uUHJvZHVjdHNQYWdlLCB7XG4gIGNvbmZpZyBhcyBjb3Vwb25Qcm9kdWN0c0NvbmZpZyxcbn0gZnJvbSBcIi4vcm91dGVzL2NvdXBvbnMvcHJvZHVjdHMvcGFnZVwiXG5cbmNvbnN0IHJvdXRlTW9kdWxlID0ge1xuICByb3V0ZXM6IFtcbiAgICB7XG4gICAgICBDb21wb25lbnQ6IENvdXBvbnNQYWdlLFxuICAgICAgcGF0aDogXCIvY291cG9uc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgQ29tcG9uZW50OiBDb3Vwb25Qcm9kdWN0c1BhZ2UsXG4gICAgICBwYXRoOiBcIi9jb3Vwb25zL3Byb2R1Y3RzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBDb21wb25lbnQ6IENvdXBvbkRldGFpbFBhZ2UsXG4gICAgICBwYXRoOiBcIi9jb3Vwb25zLzppZFwiLFxuICAgIH0sXG4gIF0sXG59XG5cbmNvbnN0IG1lbnVJdGVtTW9kdWxlID0ge1xuICBtZW51SXRlbXM6IFtcbiAgICB7XG4gICAgICBsYWJlbDogY291cG9uc0NvbmZpZy5sYWJlbCxcbiAgICAgIGljb246IGNvdXBvbnNDb25maWcuaWNvbixcbiAgICAgIHBhdGg6IFwiL2NvdXBvbnNcIixcbiAgICAgIHJhbms6IGNvdXBvbnNDb25maWcucmFuayxcbiAgICAgIG5lc3RlZDogY291cG9uc0NvbmZpZy5uZXN0ZWQsXG4gICAgICB0cmFuc2xhdGlvbk5zOiBjb3Vwb25zQ29uZmlnLnRyYW5zbGF0aW9uTnMsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogY291cG9uUHJvZHVjdHNDb25maWcubGFiZWwsXG4gICAgICBpY29uOiBjb3Vwb25Qcm9kdWN0c0NvbmZpZy5pY29uLFxuICAgICAgcGF0aDogXCIvY291cG9ucy9wcm9kdWN0c1wiLFxuICAgICAgcmFuazogMTEsXG4gICAgICBuZXN0ZWQ6IFwiL2NvdXBvbnNcIixcbiAgICAgIHRyYW5zbGF0aW9uTnM6IGNvdXBvblByb2R1Y3RzQ29uZmlnLnRyYW5zbGF0aW9uTnMsXG4gICAgfSxcbiAgXSxcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICB3aWRnZXRNb2R1bGU6IHtcbiAgICB3aWRnZXRzOiBbXSxcbiAgfSxcbiAgcm91dGVNb2R1bGUsXG4gIG1lbnVJdGVtTW9kdWxlLFxuICBmb3JtTW9kdWxlOiB7XG4gICAgY3VzdG9tRmllbGRzOiB7fSxcbiAgfSxcbiAgZGlzcGxheU1vZHVsZToge1xuICAgIGRpc3BsYXlzOiB7fSxcbiAgfSxcbiAgaTE4bk1vZHVsZTogaTE4blJlc291cmNlcyxcbn1cbiIsICJ7XG4gIFwiY291cG9uc1wiOiB7XG4gICAgXCJtZW51XCI6IFwiQ291cG9uc1wiLFxuICAgIFwicHJvZHVjdHNNZW51XCI6IFwiQ291cG9uIFByb2R1Y3RzXCJcbiAgfVxufVxuIiwgImltcG9ydCBlbiBmcm9tIFwiLi9lbi5qc29uXCJcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlbjoge1xuICAgIHRyYW5zbGF0aW9uOiBlbixcbiAgfSxcbn1cbiIsICIvLyBzcmMvY29uZmlnL3V0aWxzLnRzXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuZnVuY3Rpb24gY3JlYXRlQ29uZmlnSGVscGVyKGNvbmZpZykge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbmZpZyxcbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIHJlcXVpcmVkIHRvIGFsbG93IHRoZSBjb25maWcgdG8gYmUgZXhwb3J0ZWQsXG4gICAgICogd2hpbGUgc3RpbGwgYWxsb3dpbmcgSE1SIHRvIHdvcmsgY29ycmVjdGx5LlxuICAgICAqXG4gICAgICogSXQgdHJpY2tzIEZhc3QgUmVmcmVzaCBpbnRvIHRoaW5raW5nIHRoYXQgdGhlIGNvbmZpZyBpcyBhIFJlYWN0IGNvbXBvbmVudCxcbiAgICAgKiB3aGljaCBhbGxvd3MgaXQgdG8gYmUgdXBkYXRlZCB3aXRob3V0IGEgZnVsbCBwYWdlIHJlbG9hZC5cbiAgICAgKi9cbiAgICAkJHR5cGVvZjogU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIilcbiAgfTtcbn1cbmZ1bmN0aW9uIGRlZmluZVdpZGdldENvbmZpZyhjb25maWcpIHtcbiAgcmV0dXJuIGNyZWF0ZUNvbmZpZ0hlbHBlcihjb25maWcpO1xufVxuZnVuY3Rpb24gZGVmaW5lUm91dGVDb25maWcoY29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVDb25maWdIZWxwZXIoY29uZmlnKTtcbn1cbmV4cG9ydCB7XG4gIGRlZmluZVJvdXRlQ29uZmlnLFxuICBkZWZpbmVXaWRnZXRDb25maWdcbn07XG4iLCAiaW1wb3J0IHsgZGVmaW5lUm91dGVDb25maWcgfSBmcm9tIFwiQG1lZHVzYWpzL2FkbWluLXNka1wiXG5pbXBvcnQgeyBSZWNlaXB0UGVyY2VudCB9IGZyb20gXCJAbWVkdXNhanMvaWNvbnNcIlxuaW1wb3J0IHsgQ291cG9uc1BhZ2VWaWV3IH0gZnJvbSBcIi4uLy4uLy4uL2Rhc2hib2FyZC9jb3Vwb25zL2NvdXBvbi1tYW5hZ2VyXCJcblxuZXhwb3J0IGNvbnN0IGNvbmZpZyA9IGRlZmluZVJvdXRlQ29uZmlnKHtcbiAgbGFiZWw6IFwiQ291cG9uc1wiLFxuICBpY29uOiBSZWNlaXB0UGVyY2VudCxcbn0pXG5cbmNvbnN0IENvdXBvbnNQYWdlID0gKCkgPT4ge1xuICByZXR1cm4gPENvdXBvbnNQYWdlVmlldyBhcGlCYXNlPVwiL2FkbWluXCIgdGl0bGU9XCJDb3Vwb25zXCIgLz5cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ291cG9uc1BhZ2VcbiIsICJpbXBvcnQge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VTdGF0ZSxcbiAgdHlwZSBDaGFuZ2VFdmVudCxcbiAgdHlwZSBDU1NQcm9wZXJ0aWVzLFxuICB0eXBlIFJlYWN0Tm9kZSxcbn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7XG4gIEFycm93UGF0aCxcbiAgUGVuY2lsU3F1YXJlLFxuICBQbHVzLFxuICBTaG9wcGluZ0NhcnQsXG4gIFRyYXNoLFxuICBUcmlhbmdsZVJpZ2h0TWluaSxcbn0gZnJvbSBcIkBtZWR1c2Fqcy9pY29uc1wiXG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENvbnRhaW5lcixcbiAgQ29weSxcbiAgQ3VycmVuY3lJbnB1dCxcbiAgRm9jdXNNb2RhbCxcbiAgSGVhZGluZyxcbiAgSW5wdXQsXG4gIExhYmVsLFxuICBQcm9ncmVzc1RhYnMsXG4gIFNlbGVjdCxcbiAgU3RhdHVzQmFkZ2UsXG4gIFN3aXRjaCxcbiAgVGFibGUsXG4gIFRhYnMsXG4gIFRleHQsXG4gIFRleHRhcmVhLFxuICB0b2FzdCxcbiAgdXNlUHJvbXB0LFxufSBmcm9tIFwiQG1lZHVzYWpzL3VpXCJcbmltcG9ydCB7IENvdXBvblByb2R1Y3RzUGFnZSB9IGZyb20gXCIuL2NvdXBvbi1wcm9kdWN0cy1wYWdlXCJcbmltcG9ydCB7IENvdXBvbkVtcHR5U3RhdGUgfSBmcm9tIFwiLi9lbXB0eS1zdGF0ZVwiXG5cbmRlY2xhcmUgY29uc3QgX19CQUNLRU5EX1VSTF9fOiBzdHJpbmdcblxudHlwZSBBcGlCYXNlID0gXCIvYWRtaW5cIiB8IFwiL3ZlbmRvclwiXG50eXBlIEJlbmVmaXRUeXBlID0gXCJmaXhlZF9hbW91bnRcIiB8IFwicGVyY2VudGFnZVwiIHwgXCJmcmVlX3NoaXBwaW5nXCIgfCBcImJ1eV9nZXRcIlxudHlwZSBDb2RlU3RyYXRlZ3kgPSBcInVuaXF1ZV9jb2RlXCIgfCBcInNoYXJlZF9jb2RlXCJcbnR5cGUgTWlycm9yTW9kZSA9IFwibm9uZVwiIHwgXCJtYW51YWxcIiB8IFwiYXV0b1wiXG50eXBlIFByb21vdGlvblN0YXR1cyA9IFwiZHJhZnRcIiB8IFwiYWN0aXZlXCIgfCBcImluYWN0aXZlXCJcbnR5cGUgQ2FtcGFpZ25Nb2RlID0gXCJub25lXCIgfCBcImV4aXN0aW5nXCIgfCBcIm5ld1wiXG50eXBlIEV4cGlyYXRpb25Qb2xpY3lUeXBlID0gXCJkdXJhdGlvblwiIHwgXCJmaXhlZFwiXG50eXBlIFdpemFyZFN0ZXAgPSBcImRldGFpbHNcIiB8IFwib3JnYW5pemVcIiB8IFwidmFyaWFudHNcIiB8IFwiY291cG9uXCIgfCBcImNhbXBhaWduXCJcblxudHlwZSBDb3Vwb25Qcm9kdWN0Q29uZmlnID0ge1xuICBpZDogc3RyaW5nXG4gIGVuYWJsZWQ6IGJvb2xlYW5cbiAgcHJvZHVjdF9pZDogc3RyaW5nXG4gIGJlbmVmaXRfdHlwZTogQmVuZWZpdFR5cGVcbiAgYW1vdW50OiBudW1iZXIgfCBudWxsXG4gIHBlcmNlbnRhZ2U6IG51bWJlciB8IG51bGxcbiAgY3VycmVuY3lfY29kZTogc3RyaW5nIHwgbnVsbFxuICBjb2RlX3N0cmF0ZWd5OiBDb2RlU3RyYXRlZ3lcbiAgY29kZV9wcmVmaXg6IHN0cmluZyB8IG51bGxcbiAgc2hhcmVkX2NvZGU6IHN0cmluZyB8IG51bGxcbiAgZXhwaXJhdGlvbl9wb2xpY3k6XG4gICAgfCB7XG4gICAgICAgIHR5cGU6IFwiZHVyYXRpb25cIlxuICAgICAgICBkdXJhdGlvbl9kYXlzOiBudW1iZXJcbiAgICAgICAgY2FwX2J5X2NhbXBhaWduPzogYm9vbGVhblxuICAgICAgICBjYXBfYXQ/OiBzdHJpbmcgfCBudWxsXG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6IFwiZml4ZWRcIlxuICAgICAgICBleHBpcmVzX2F0OiBzdHJpbmdcbiAgICAgICAgY2FwX2J5X2NhbXBhaWduPzogYm9vbGVhblxuICAgICAgICBjYXBfYXQ/OiBzdHJpbmcgfCBudWxsXG4gICAgICB9XG4gIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTogbnVtYmVyXG4gIHByb21vdGlvbl9taXJyb3JfbW9kZTogTWlycm9yTW9kZVxuICBwcm9tb3Rpb25fc3RhdHVzPzogUHJvbW90aW9uU3RhdHVzIHwgbnVsbFxuICBjYW1wYWlnbl9tb2RlPzogQ2FtcGFpZ25Nb2RlIHwgbnVsbFxuICBjYW1wYWlnbl9pZD86IHN0cmluZyB8IG51bGxcbiAgY2FtcGFpZ25fc25hcHNob3Q/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGxcbiAgY29uZmlnX3ZlcnNpb246IG51bWJlclxufVxuXG50eXBlIENvdXBvblZhcmlhbnRDb25maWcgPSBQYXJ0aWFsPENvdXBvblByb2R1Y3RDb25maWc+ICYge1xuICBpZDogc3RyaW5nXG4gIHByb2R1Y3RfY29uZmlnX2lkOiBzdHJpbmdcbiAgdmFyaWFudF9pZDogc3RyaW5nXG59XG5cbnR5cGUgUHJvZHVjdFZhcmlhbnQgPSB7XG4gIGlkOiBzdHJpbmdcbiAgdGl0bGU6IHN0cmluZyB8IG51bGxcbiAgc2t1Pzogc3RyaW5nIHwgbnVsbFxuICBwcmljZXM/OiB7IGN1cnJlbmN5X2NvZGU/OiBzdHJpbmc7IGFtb3VudD86IG51bWJlciB9W11cbn1cblxudHlwZSBQcm9kdWN0UmVjb3JkID0ge1xuICBpZDogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmcgfCBudWxsXG4gIHN1YnRpdGxlPzogc3RyaW5nIHwgbnVsbFxuICBoYW5kbGU6IHN0cmluZyB8IG51bGxcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsXG4gIHN0YXR1czogc3RyaW5nIHwgbnVsbFxuICB0aHVtYm5haWw6IHN0cmluZyB8IG51bGxcbiAgZGlzY291bnRhYmxlPzogYm9vbGVhblxuICB0eXBlX2lkPzogc3RyaW5nIHwgbnVsbFxuICBjb2xsZWN0aW9uX2lkPzogc3RyaW5nIHwgbnVsbFxuICBzaGlwcGluZ19wcm9maWxlX2lkPzogc3RyaW5nIHwgbnVsbFxuICB2YXJpYW50cz86IFByb2R1Y3RWYXJpYW50W11cbiAgY2F0ZWdvcmllcz86IHsgaWQ6IHN0cmluZzsgbmFtZT86IHN0cmluZyB8IG51bGwgfVtdXG4gIHRhZ3M/OiB7IGlkOiBzdHJpbmc7IHZhbHVlPzogc3RyaW5nIHwgbnVsbCB9W11cbiAgc2FsZXNfY2hhbm5lbHM/OiB7IGlkOiBzdHJpbmc7IG5hbWU/OiBzdHJpbmcgfCBudWxsIH1bXVxufVxuXG50eXBlIENvdXBvblByb2R1Y3RSb3cgPSB7XG4gIGlkOiBzdHJpbmdcbiAgcHJvZHVjdDogUHJvZHVjdFJlY29yZFxuICBjb3Vwb25fcHJvZHVjdF9jb25maWc6IENvdXBvblByb2R1Y3RDb25maWdcbiAgY291cG9uX3Byb2R1Y3RfdmFyaWFudF9jb25maWdzOiBDb3Vwb25WYXJpYW50Q29uZmlnW11cbiAgZW50aXRsZW1lbnRzX2NvdW50OiBudW1iZXJcbn1cblxudHlwZSBDb3Vwb25FbnRpdGxlbWVudCA9IHtcbiAgaWQ6IHN0cmluZ1xuICBvcmlnaW4/OiBcInB1cmNoYXNlXCIgfCBcImV4dGVybmFsXCJcbiAgY3VzdG9tZXJfaWQ6IHN0cmluZyB8IG51bGxcbiAgZW1haWw6IHN0cmluZyB8IG51bGxcbiAgY29kZTogc3RyaW5nIHwgbnVsbFxuICBzaGFyZWRfY29kZTogc3RyaW5nIHwgbnVsbFxuICBzdGF0dXM6IHN0cmluZ1xuICBwcm9kdWN0X2lkOiBzdHJpbmcgfCBudWxsXG4gIHZhcmlhbnRfaWQ6IHN0cmluZyB8IG51bGxcbiAgb3JkZXJfaWQ6IHN0cmluZyB8IG51bGxcbiAgbGluZV9pdGVtX2lkOiBzdHJpbmcgfCBudWxsXG4gIGlzc3VhbmNlX2lkPzogc3RyaW5nIHwgbnVsbFxuICBjb25maWdfaWQ/OiBzdHJpbmcgfCBudWxsXG4gIHZhcmlhbnRfY29uZmlnX2lkPzogc3RyaW5nIHwgbnVsbFxuICBleHBpcmVzX2F0OiBzdHJpbmcgfCBudWxsXG4gIHJlZGVlbWVkX2F0OiBzdHJpbmcgfCBudWxsXG4gIGNyZWF0ZWRfYXQ/OiBzdHJpbmdcbiAgYmVuZWZpdF9zbmFwc2hvdD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxuICBzb3VyY2Vfc25hcHNob3Q/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGxcbiAgZXh0ZXJuYWxfcmVmZXJlbmNlPzogc3RyaW5nIHwgbnVsbFxuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxuICBzZWxsZXJfdGFyZ2V0cz86IEFycmF5PHtcbiAgICBzZWxsZXJfaWQ6IHN0cmluZ1xuICAgIHNlbGxlcl9tZW1iZXJfaWQ/OiBzdHJpbmcgfCBudWxsXG4gIH0+XG59XG5cbnR5cGUgQ291cG9uSXNzdWFuY2VSZWNvcmQgPSB7XG4gIGlkOiBzdHJpbmdcbiAgc3RhdHVzPzogc3RyaW5nIHwgbnVsbFxuICBxdWFudGl0eT86IG51bWJlciB8IG51bGxcbiAgY29uZmlnX3NuYXBzaG90PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsXG4gIGlzc3VlZF9jb3VudD86IG51bWJlciB8IG51bGxcbiAgZmFpbGVkX2NvdW50PzogbnVtYmVyIHwgbnVsbFxuICBjcmVhdGVkX2F0Pzogc3RyaW5nXG4gIHVwZGF0ZWRfYXQ/OiBzdHJpbmdcbn1cblxudHlwZSBDb3Vwb25PcmRlclN1bW1hcnkgPSB7XG4gIGlkOiBzdHJpbmdcbiAgZGlzcGxheV9pZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBlbWFpbDogc3RyaW5nIHwgbnVsbFxuICBjdXN0b21lcl9pZDogc3RyaW5nIHwgbnVsbFxuICBjdXJyZW5jeV9jb2RlOiBzdHJpbmcgfCBudWxsXG4gIHRvdGFsOiBudW1iZXIgfCBudWxsXG4gIGNyZWF0ZWRfYXQ6IHN0cmluZyB8IG51bGxcbn1cblxudHlwZSBDb3Vwb25FbnRpdGxlbWVudERldGFpbCA9IHtcbiAgY3VzdG9tZXJfY291cG9uX2VudGl0bGVtZW50OiBDb3Vwb25FbnRpdGxlbWVudFxuICBjb3Vwb25faXNzdWFuY2U/OiBDb3Vwb25Jc3N1YW5jZVJlY29yZCB8IG51bGxcbiAgb3JkZXI/OiBDb3Vwb25PcmRlclN1bW1hcnkgfCBudWxsXG59XG5cbnR5cGUgT3B0aW9uUmVjb3JkID0ge1xuICBpZDogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIHRpdGxlPzogc3RyaW5nIHwgbnVsbFxuICB2YWx1ZT86IHN0cmluZyB8IG51bGxcbiAgaGFuZGxlPzogc3RyaW5nIHwgbnVsbFxuICBjYW1wYWlnbl9pZGVudGlmaWVyPzogc3RyaW5nIHwgbnVsbFxufVxuXG50eXBlIEN1cnJlbmN5T3B0aW9uID0ge1xuICBjb2RlOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHN5bWJvbDogc3RyaW5nXG4gIHN5bWJvbF9uYXRpdmU6IHN0cmluZ1xuICBpc19kZWZhdWx0OiBib29sZWFuXG59XG5cbnR5cGUgT3B0aW9uc1BheWxvYWQgPSB7XG4gIGN1cnJlbmNpZXM/OiBDdXJyZW5jeU9wdGlvbltdXG4gIHByb2R1Y3RfdHlwZXM/OiBPcHRpb25SZWNvcmRbXVxuICBwcm9kdWN0X2NvbGxlY3Rpb25zPzogT3B0aW9uUmVjb3JkW11cbiAgcHJvZHVjdF9jYXRlZ29yaWVzPzogT3B0aW9uUmVjb3JkW11cbiAgcHJvZHVjdF90YWdzPzogT3B0aW9uUmVjb3JkW11cbiAgc2FsZXNfY2hhbm5lbHM/OiBPcHRpb25SZWNvcmRbXVxuICBzaGlwcGluZ19wcm9maWxlcz86IE9wdGlvblJlY29yZFtdXG4gIGNhbXBhaWducz86IE9wdGlvblJlY29yZFtdXG4gIHNlbGxlcnM/OiBPcHRpb25SZWNvcmRbXVxufVxuXG50eXBlIFByb2R1Y3RGb3JtU3RhdGUgPSB7XG4gIGlkOiBzdHJpbmdcbiAgdGl0bGU6IHN0cmluZ1xuICBzdWJ0aXRsZTogc3RyaW5nXG4gIGhhbmRsZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbiAgdGh1bWJuYWlsOiBzdHJpbmdcbiAgc3RhdHVzOiBzdHJpbmdcbiAgZGlzY291bnRhYmxlOiBib29sZWFuXG4gIHNlbGxlcl9pZDogc3RyaW5nXG4gIHR5cGVfaWQ6IHN0cmluZ1xuICBjb2xsZWN0aW9uX2lkOiBzdHJpbmdcbiAgY2F0ZWdvcnlfaWQ6IHN0cmluZ1xuICB0YWdfaWQ6IHN0cmluZ1xuICBzYWxlc19jaGFubmVsX2lkOiBzdHJpbmdcbiAgdmFyaWFudHM6IFZhcmlhbnRGb3JtU3RhdGVbXVxufVxuXG50eXBlIFZhcmlhbnRGb3JtU3RhdGUgPSB7XG4gIGlkPzogc3RyaW5nXG4gIG92ZXJyaWRlX2NvbmZpZ19pZD86IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nXG4gIHNrdTogc3RyaW5nXG4gIGN1cnJlbmN5X2NvZGU6IHN0cmluZ1xuICBhbW91bnQ6IHN0cmluZ1xuICBvdmVycmlkZV9lbmFibGVkOiBib29sZWFuXG4gIG92ZXJyaWRlX2JlbmVmaXRfdHlwZTogQmVuZWZpdFR5cGVcbiAgb3ZlcnJpZGVfY3VycmVuY3lfY29kZTogc3RyaW5nXG4gIG92ZXJyaWRlX2Ftb3VudDogc3RyaW5nXG4gIG92ZXJyaWRlX3BlcmNlbnRhZ2U6IHN0cmluZ1xufVxuXG50eXBlIENvdXBvbkZvcm1TdGF0ZSA9IHtcbiAgZW5hYmxlZDogYm9vbGVhblxuICBiZW5lZml0X3R5cGU6IEJlbmVmaXRUeXBlXG4gIGFtb3VudDogc3RyaW5nXG4gIHBlcmNlbnRhZ2U6IHN0cmluZ1xuICBjdXJyZW5jeV9jb2RlOiBzdHJpbmdcbiAgY29kZV9zdHJhdGVneTogQ29kZVN0cmF0ZWd5XG4gIGNvZGVfcHJlZml4OiBzdHJpbmdcbiAgc2hhcmVkX2NvZGU6IHN0cmluZ1xuICBleHBpcmF0aW9uX3R5cGU6IEV4cGlyYXRpb25Qb2xpY3lUeXBlXG4gIGV4cGlyYXRpb25fZGF5czogc3RyaW5nXG4gIGV4cGlyYXRpb25fZGF0ZTogc3RyaW5nXG4gIGV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduOiBib29sZWFuXG4gIGV4cGlyYXRpb25fY2FwX2F0OiBzdHJpbmdcbiAgbWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtOiBzdHJpbmdcbiAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiBNaXJyb3JNb2RlXG4gIHByb21vdGlvbl9zdGF0dXM6IFByb21vdGlvblN0YXR1c1xufVxuXG50eXBlIENhbXBhaWduRm9ybVN0YXRlID0ge1xuICBtb2RlOiBDYW1wYWlnbk1vZGVcbiAgY2FtcGFpZ25faWQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgY2FtcGFpZ25faWRlbnRpZmllcjogc3RyaW5nXG4gIHN0YXJ0c19hdDogc3RyaW5nXG4gIGVuZHNfYXQ6IHN0cmluZ1xufVxuXG5jb25zdCBOT05FID0gXCJfX25vbmVfX1wiXG5jb25zdCBzdGVwczogV2l6YXJkU3RlcFtdID0gW1xuICBcImRldGFpbHNcIixcbiAgXCJvcmdhbml6ZVwiLFxuICBcInZhcmlhbnRzXCIsXG4gIFwiY291cG9uXCIsXG4gIFwiY2FtcGFpZ25cIixcbl1cblxuY29uc3QgZW1wdHlWYXJpYW50OiBWYXJpYW50Rm9ybVN0YXRlID0ge1xuICB0aXRsZTogXCJEZWZhdWx0IHZhcmlhbnRcIixcbiAgc2t1OiBcIlwiLFxuICBjdXJyZW5jeV9jb2RlOiBcIlwiLFxuICBhbW91bnQ6IFwiXCIsXG4gIG92ZXJyaWRlX2VuYWJsZWQ6IGZhbHNlLFxuICBvdmVycmlkZV9iZW5lZml0X3R5cGU6IFwiZml4ZWRfYW1vdW50XCIsXG4gIG92ZXJyaWRlX2N1cnJlbmN5X2NvZGU6IFwiXCIsXG4gIG92ZXJyaWRlX2Ftb3VudDogXCJcIixcbiAgb3ZlcnJpZGVfcGVyY2VudGFnZTogXCJcIixcbn1cblxuY29uc3QgZW1wdHlQcm9kdWN0OiBQcm9kdWN0Rm9ybVN0YXRlID0ge1xuICBpZDogXCJcIixcbiAgdGl0bGU6IFwiXCIsXG4gIHN1YnRpdGxlOiBcIlwiLFxuICBoYW5kbGU6IFwiXCIsXG4gIGRlc2NyaXB0aW9uOiBcIlwiLFxuICB0aHVtYm5haWw6IFwiXCIsXG4gIHN0YXR1czogXCJkcmFmdFwiLFxuICBkaXNjb3VudGFibGU6IGZhbHNlLFxuICBzZWxsZXJfaWQ6IFwiXCIsXG4gIHR5cGVfaWQ6IFwiXCIsXG4gIGNvbGxlY3Rpb25faWQ6IFwiXCIsXG4gIGNhdGVnb3J5X2lkOiBcIlwiLFxuICB0YWdfaWQ6IFwiXCIsXG4gIHNhbGVzX2NoYW5uZWxfaWQ6IFwiXCIsXG4gIHZhcmlhbnRzOiBbZW1wdHlWYXJpYW50XSxcbn1cblxuY29uc3QgZW1wdHlDb3Vwb246IENvdXBvbkZvcm1TdGF0ZSA9IHtcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgYmVuZWZpdF90eXBlOiBcImZpeGVkX2Ftb3VudFwiLFxuICBhbW91bnQ6IFwiXCIsXG4gIHBlcmNlbnRhZ2U6IFwiXCIsXG4gIGN1cnJlbmN5X2NvZGU6IFwiXCIsXG4gIGNvZGVfc3RyYXRlZ3k6IFwidW5pcXVlX2NvZGVcIixcbiAgY29kZV9wcmVmaXg6IFwiQ09VUE9OXCIsXG4gIHNoYXJlZF9jb2RlOiBcIlwiLFxuICBleHBpcmF0aW9uX3R5cGU6IFwiZHVyYXRpb25cIixcbiAgZXhwaXJhdGlvbl9kYXlzOiBcIjMwXCIsXG4gIGV4cGlyYXRpb25fZGF0ZTogXCJcIixcbiAgZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ246IHRydWUsXG4gIGV4cGlyYXRpb25fY2FwX2F0OiBcIlwiLFxuICBtYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW06IFwiMVwiLFxuICBwcm9tb3Rpb25fbWlycm9yX21vZGU6IFwibm9uZVwiLFxuICBwcm9tb3Rpb25fc3RhdHVzOiBcImRyYWZ0XCIsXG59XG5cbmNvbnN0IGVtcHR5Q2FtcGFpZ246IENhbXBhaWduRm9ybVN0YXRlID0ge1xuICBtb2RlOiBcIm5vbmVcIixcbiAgY2FtcGFpZ25faWQ6IFwiXCIsXG4gIG5hbWU6IFwiXCIsXG4gIGNhbXBhaWduX2lkZW50aWZpZXI6IFwiXCIsXG4gIHN0YXJ0c19hdDogXCJcIixcbiAgZW5kc19hdDogXCJcIixcbn1cblxuY29uc3QgbW9kYWxDb250ZW50U3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6IFwiZmxleFwiLFxuICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICBoZWlnaHQ6IFwiMTAwJVwiLFxuICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbn1cblxuY29uc3QgbW9kYWxTdGF0aWNSb3dTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZmxleFNocmluazogMCxcbn1cblxuY29uc3QgbW9kYWxXaXphcmRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogXCJmbGV4XCIsXG4gIGZsZXg6IFwiMSAxIGF1dG9cIixcbiAgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIixcbiAgbWluSGVpZ2h0OiAwLFxufVxuXG5jb25zdCBtb2RhbEJvZHlTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZmxleDogXCIxIDEgYXV0b1wiLFxuICBtaW5IZWlnaHQ6IDAsXG4gIG92ZXJmbG93WTogXCJhdXRvXCIsXG4gIHBhZGRpbmc6IFwiMzJweCAyNHB4XCIsXG59XG5cbmNvbnN0IG1vZGFsRm9ybVN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBtYXJnaW46IFwiMCBhdXRvXCIsXG4gIG1heFdpZHRoOiA5MjAsXG4gIHdpZHRoOiBcIm1pbig5MjBweCwgMTAwJSlcIixcbn1cblxuY29uc3Qgc3RhY2tTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogXCJmbGV4XCIsXG4gIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gIGdhcDogMTYsXG59XG5cbmNvbnN0IHR3b0NvbHVtbkdyaWRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogXCJncmlkXCIsXG4gIGdhcDogMTYsXG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwicmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjYwcHgsIDFmcikpXCIsXG59XG5cbmNvbnN0IHRocmVlQ29sdW1uR3JpZFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImdyaWRcIixcbiAgZ2FwOiAxNixcbiAgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCJyZXBlYXQoYXV0by1maXQsIG1pbm1heCgyMjBweCwgMWZyKSlcIixcbn1cblxuY29uc3QgZm91ckNvbHVtbkdyaWRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogXCJncmlkXCIsXG4gIGdhcDogMTYsXG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwicmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMTYwcHgsIDFmcikpXCIsXG59XG5cbmNvbnN0IHBhbmVsU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGJvcmRlcjogXCIxcHggc29saWQgdmFyKC0tYm9yZGVyLWJhc2UpXCIsXG4gIGJvcmRlclJhZGl1czogOCxcbiAgcGFkZGluZzogMTYsXG59XG5cbmNvbnN0IHJvd0JldHdlZW5TdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgZGlzcGxheTogXCJmbGV4XCIsXG4gIGdhcDogMTYsXG4gIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIixcbn1cblxuZnVuY3Rpb24gYmFja2VuZFVybCgpIHtcbiAgcmV0dXJuIHR5cGVvZiBfX0JBQ0tFTkRfVVJMX18gPT09IFwic3RyaW5nXCJcbiAgICA/IF9fQkFDS0VORF9VUkxfXy5yZXBsYWNlKC9cXC8kLywgXCJcIilcbiAgICA6IFwiXCJcbn1cblxuZnVuY3Rpb24gYXBpRXJyb3JNZXNzYWdlKHBheWxvYWQ6IGFueSwgZmFsbGJhY2s6IHN0cmluZykge1xuICBjb25zdCBjYW5kaWRhdGVzID0gW1xuICAgIHBheWxvYWQ/Lm1lc3NhZ2UsXG4gICAgcGF5bG9hZD8uZXJyb3I/Lm1lc3NhZ2UsXG4gICAgcGF5bG9hZD8uZXJyb3IsXG4gICAgcGF5bG9hZD8uZXJyb3JzPy5bMF0/Lm1lc3NhZ2UsXG4gIF1cbiAgY29uc3QgbWVzc2FnZSA9IGNhbmRpZGF0ZXMuZmluZChcbiAgICAoY2FuZGlkYXRlKSA9PiB0eXBlb2YgY2FuZGlkYXRlID09PSBcInN0cmluZ1wiICYmIGNhbmRpZGF0ZS50cmltKCksXG4gIClcblxuICByZXR1cm4gbWVzc2FnZSB8fCBmYWxsYmFjayB8fCBcIlJlcXVlc3QgZmFpbGVkXCJcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXBpRmV0Y2g8VD4oXG4gIHBhdGg6IHN0cmluZyxcbiAgb3B0aW9uczogUmVxdWVzdEluaXQgPSB7fSxcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2JhY2tlbmRVcmwoKX0ke3BhdGh9YCwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLihvcHRpb25zLmJvZHkgPyB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0gOiB7fSksXG4gICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXG4gICAgfSxcbiAgfSlcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICAgIHRocm93IG5ldyBFcnJvcihhcGlFcnJvck1lc3NhZ2UocGF5bG9hZCwgcmVzcG9uc2Uuc3RhdHVzVGV4dCkpXG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpXG59XG5cbmZ1bmN0aW9uIG51bWJlck9yTnVsbCh2YWx1ZTogc3RyaW5nKSB7XG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSlcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpICYmIHBhcnNlZCA+IDAgPyBwYXJzZWQgOiBudWxsXG59XG5cbmZ1bmN0aW9uIG9wdGlvbkxhYmVsKG9wdGlvbjogT3B0aW9uUmVjb3JkKSB7XG4gIHJldHVybiAoXG4gICAgb3B0aW9uLm5hbWUgfHwgb3B0aW9uLnRpdGxlIHx8IG9wdGlvbi52YWx1ZSB8fCBvcHRpb24uaGFuZGxlIHx8IG9wdGlvbi5pZFxuICApXG59XG5cbmZ1bmN0aW9uIGJlbmVmaXRMYWJlbChcbiAgY29uZmlnOiBQaWNrPFxuICAgIENvdXBvblByb2R1Y3RDb25maWcsXG4gICAgXCJiZW5lZml0X3R5cGVcIiB8IFwiYW1vdW50XCIgfCBcInBlcmNlbnRhZ2VcIiB8IFwiY3VycmVuY3lfY29kZVwiXG4gID4sXG4pIHtcbiAgaWYgKGNvbmZpZy5iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCIpIHtcbiAgICByZXR1cm4gYCR7Y29uZmlnLmFtb3VudCB8fCAwfSAkeyhjb25maWcuY3VycmVuY3lfY29kZSB8fCBcIlwiKS50b1VwcGVyQ2FzZSgpfWBcbiAgfVxuICBpZiAoY29uZmlnLmJlbmVmaXRfdHlwZSA9PT0gXCJwZXJjZW50YWdlXCIpIHtcbiAgICByZXR1cm4gYCR7Y29uZmlnLnBlcmNlbnRhZ2UgfHwgMH0lYFxuICB9XG4gIGlmIChjb25maWcuYmVuZWZpdF90eXBlID09PSBcImZyZWVfc2hpcHBpbmdcIikge1xuICAgIHJldHVybiBcIkZyZWUgc2hpcHBpbmdcIlxuICB9XG4gIHJldHVybiBcIkJ1eSBnZXRcIlxufVxuXG5mdW5jdGlvbiBmb3JtYXREYXRlKHZhbHVlPzogc3RyaW5nIHwgbnVsbCkge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gXCItXCJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKVxuICBpZiAoTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgcmV0dXJuIFwiLVwiXG4gIHJldHVybiBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpXG59XG5cbmZ1bmN0aW9uIGZvcm1hdERhdGVUaW1lKHZhbHVlPzogc3RyaW5nIHwgbnVsbCkge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gXCItXCJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKVxuICBpZiAoTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgcmV0dXJuIFwiLVwiXG4gIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gZm9ybWF0RnVsbERhdGUodmFsdWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBcIi1cIlxuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpXG4gIGlmIChOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gXCItXCJcbiAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcodW5kZWZpbmVkLCB7XG4gICAgZGF5OiBcIm51bWVyaWNcIixcbiAgICBob3VyOiBcIm51bWVyaWNcIixcbiAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxuICAgIG1vbnRoOiBcInNob3J0XCIsXG4gICAgeWVhcjogXCJudW1lcmljXCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGZvcm1hdFJlbGF0aXZlRGF0ZSh2YWx1ZT86IHN0cmluZyB8IG51bGwpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiLVwiXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgaWYgKE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiBcIi1cIlxuXG4gIGNvbnN0IGRpZmZTZWNvbmRzID0gTWF0aC5yb3VuZCgoZGF0ZS5nZXRUaW1lKCkgLSBEYXRlLm5vdygpKSAvIDEwMDApXG4gIGNvbnN0IGFic1NlY29uZHMgPSBNYXRoLmFicyhkaWZmU2Vjb25kcylcbiAgY29uc3QgdW5pdHM6IEFycmF5PFtJbnRsLlJlbGF0aXZlVGltZUZvcm1hdFVuaXQsIG51bWJlcl0+ID0gW1xuICAgIFtcInllYXJcIiwgNjAgKiA2MCAqIDI0ICogMzY1XSxcbiAgICBbXCJtb250aFwiLCA2MCAqIDYwICogMjQgKiAzMF0sXG4gICAgW1wid2Vla1wiLCA2MCAqIDYwICogMjQgKiA3XSxcbiAgICBbXCJkYXlcIiwgNjAgKiA2MCAqIDI0XSxcbiAgICBbXCJob3VyXCIsIDYwICogNjBdLFxuICAgIFtcIm1pbnV0ZVwiLCA2MF0sXG4gIF1cbiAgY29uc3QgW3VuaXQsIHNlY29uZHNdID1cbiAgICB1bml0cy5maW5kKChbLCBzZWNvbmRzUGVyVW5pdF0pID0+IGFic1NlY29uZHMgPj0gc2Vjb25kc1BlclVuaXQpIHx8IFtdXG5cbiAgaWYgKCF1bml0IHx8ICFzZWNvbmRzKSB7XG4gICAgcmV0dXJuIFwianVzdCBub3dcIlxuICB9XG5cbiAgcmV0dXJuIG5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdCh1bmRlZmluZWQsIHsgbnVtZXJpYzogXCJhdXRvXCIgfSkuZm9ybWF0KFxuICAgIE1hdGgucm91bmQoZGlmZlNlY29uZHMgLyBzZWNvbmRzKSxcbiAgICB1bml0LFxuICApXG59XG5cbmZ1bmN0aW9uIGZvcm1hdFNuYXBzaG90QW1vdW50KGFtb3VudDogbnVtYmVyIHwgbnVsbCwgY3VycmVuY3k/OiBzdHJpbmcgfCBudWxsKSB7XG4gIGlmIChhbW91bnQgPT0gbnVsbCkgcmV0dXJuIFwiLVwiXG4gIGNvbnN0IGNvZGUgPSBjdXJyZW5jeSA/IGN1cnJlbmN5LnRvVXBwZXJDYXNlKCkgOiBcIlwiXG4gIHJldHVybiBbY29kZSwgYW1vdW50LnRvTG9jYWxlU3RyaW5nKHVuZGVmaW5lZCwgeyBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDIgfSldXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKFwiIFwiKVxufVxuXG5mdW5jdGlvbiB0b0RhdGVUaW1lTG9jYWwodmFsdWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBcIlwiXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgaWYgKE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiBcIlwiXG4gIGNvbnN0IGxvY2FsRGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpIC0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjBfMDAwKVxuICByZXR1cm4gbG9jYWxEYXRlLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTYpXG59XG5cbmZ1bmN0aW9uIGVudGl0bGVtZW50U3RhdHVzQ29sb3Ioc3RhdHVzOiBzdHJpbmcpIHtcbiAgaWYgKHN0YXR1cyA9PT0gXCJpc3N1ZWRcIikgcmV0dXJuIFwiZ3JlZW5cIiBhcyBjb25zdFxuICBpZiAoc3RhdHVzID09PSBcInJlZGVlbWVkXCIpIHJldHVybiBcImJsdWVcIiBhcyBjb25zdFxuICBpZiAoc3RhdHVzID09PSBcImV4cGlyZWRcIiB8fCBzdGF0dXMgPT09IFwiY2FuY2VsZWRcIikgcmV0dXJuIFwiZ3JleVwiIGFzIGNvbnN0XG4gIHJldHVybiBcIm9yYW5nZVwiIGFzIGNvbnN0XG59XG5cbmZ1bmN0aW9uIHByb2R1Y3RTdGF0dXNDb2xvcihzdGF0dXM/OiBzdHJpbmcgfCBudWxsKSB7XG4gIGlmIChzdGF0dXMgPT09IFwicHVibGlzaGVkXCIpIHJldHVybiBcImdyZWVuXCIgYXMgY29uc3RcbiAgaWYgKHN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKSByZXR1cm4gXCJyZWRcIiBhcyBjb25zdFxuICBpZiAoc3RhdHVzID09PSBcInByb3Bvc2VkXCIpIHJldHVybiBcIm9yYW5nZVwiIGFzIGNvbnN0XG4gIHJldHVybiBcImdyZXlcIiBhcyBjb25zdFxufVxuXG5mdW5jdGlvbiBzbmFwc2hvdFN0cmluZyhcbiAgc25hcHNob3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAga2V5OiBzdHJpbmcsXG4pIHtcbiAgY29uc3QgdmFsdWUgPSBzbmFwc2hvdD8uW2tleV1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS50cmltKCkpIHJldHVybiB2YWx1ZVxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSByZXR1cm4gU3RyaW5nKHZhbHVlKVxuICByZXR1cm4gXCJcIlxufVxuXG5mdW5jdGlvbiBzbmFwc2hvdE51bWJlcihcbiAgc25hcHNob3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAga2V5OiBzdHJpbmcsXG4pIHtcbiAgY29uc3QgdmFsdWUgPSBzbmFwc2hvdD8uW2tleV1cbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGpzb25CbG9jayh2YWx1ZTogdW5rbm93bikge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIFwie31cIlxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpXG59XG5cbmZ1bmN0aW9uIGNvdXBvbkNvZGUoZW50aXRsZW1lbnQ6IENvdXBvbkVudGl0bGVtZW50KSB7XG4gIHJldHVybiBlbnRpdGxlbWVudC5jb2RlIHx8IGVudGl0bGVtZW50LnNoYXJlZF9jb2RlIHx8IFwiLVwiXG59XG5cbmZ1bmN0aW9uIGVudGl0bGVtZW50U291cmNlKGVudGl0bGVtZW50OiBDb3Vwb25FbnRpdGxlbWVudCkge1xuICBpZiAoZW50aXRsZW1lbnQub3JpZ2luID09PSBcImV4dGVybmFsXCIpIHJldHVybiBcIkV4dGVybmFsXCJcbiAgcmV0dXJuIFwiUHVyY2hhc2VcIlxufVxuXG5mdW5jdGlvbiBlbnRpdGxlbWVudFNlbGxlclNjb3BlKGVudGl0bGVtZW50OiBDb3Vwb25FbnRpdGxlbWVudCkge1xuICBjb25zdCBjb3VudCA9IGVudGl0bGVtZW50LnNlbGxlcl90YXJnZXRzPy5sZW5ndGggfHwgMFxuICBpZiAoZW50aXRsZW1lbnQub3JpZ2luICE9PSBcImV4dGVybmFsXCIpIHtcbiAgICBpZiAoIWNvdW50KSByZXR1cm4gXCJQcm9kdWN0IHNlbGxlclwiXG4gICAgcmV0dXJuIGBQcm9kdWN0IHNlbGxlciArICR7Y291bnR9IGxpbmtlZGBcbiAgfVxuICBpZiAoIWNvdW50KSByZXR1cm4gXCJBZG1pbiBvbmx5XCJcbiAgcmV0dXJuIGNvdW50ID09PSAxID8gXCIxIGxpbmtlZCBzZWxsZXJcIiA6IGAke2NvdW50fSBsaW5rZWQgc2VsbGVyc2Bcbn1cblxuZnVuY3Rpb24gb3JkZXJEaXNwbGF5SWQob3JkZXI6IENvdXBvbk9yZGVyU3VtbWFyeSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgaWYgKCFvcmRlcikgcmV0dXJuIFwiLVwiXG4gIHJldHVybiBvcmRlci5kaXNwbGF5X2lkID09IG51bGwgPyBvcmRlci5pZCA6IGAjJHtvcmRlci5kaXNwbGF5X2lkfWBcbn1cblxuZnVuY3Rpb24gZGFzaGJvYXJkQmFzZVBhdGgoYXBpQmFzZTogQXBpQmFzZSkge1xuICByZXR1cm4gYXBpQmFzZSA9PT0gXCIvdmVuZG9yXCIgPyBcIi9zZWxsZXJcIiA6IFwiL2Rhc2hib2FyZFwiXG59XG5cbmZ1bmN0aW9uIGNvdXBvbkRldGFpbFBhdGgoYXBpQmFzZTogQXBpQmFzZSwgZW50aXRsZW1lbnRJZDogc3RyaW5nKSB7XG4gIHJldHVybiBgJHtkYXNoYm9hcmRCYXNlUGF0aChhcGlCYXNlKX0vY291cG9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChcbiAgICBlbnRpdGxlbWVudElkLFxuICApfWBcbn1cblxuZnVuY3Rpb24gb3JkZXJEZXRhaWxQYXRoKGFwaUJhc2U6IEFwaUJhc2UsIG9yZGVySWQ6IHN0cmluZykge1xuICByZXR1cm4gYCR7ZGFzaGJvYXJkQmFzZVBhdGgoYXBpQmFzZSl9L29yZGVycy8ke2VuY29kZVVSSUNvbXBvbmVudChvcmRlcklkKX1gXG59XG5cbmZ1bmN0aW9uIGN1cnJlbnRDb3Vwb25EZXRhaWxJZChhcGlCYXNlOiBBcGlCYXNlKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIFwiXCJcbiAgfVxuXG4gIGNvbnN0IHByZWZpeCA9IGAke2Rhc2hib2FyZEJhc2VQYXRoKGFwaUJhc2UpfS9jb3Vwb25zL2BcbiAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZVxuICBjb25zdCBpbmRleCA9IHBhdGguaW5kZXhPZihwcmVmaXgpXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gXCJcIlxuICB9XG5cbiAgY29uc3QgaWQgPSBwYXRoLnNsaWNlKGluZGV4ICsgcHJlZml4Lmxlbmd0aCkuc3BsaXQoXCIvXCIpWzBdXG4gIGlmICghaWQgfHwgaWQgPT09IFwicHJvZHVjdHNcIikge1xuICAgIHJldHVybiBcIlwiXG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoaWQpXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBpZFxuICB9XG59XG5cbmZ1bmN0aW9uIGJlbmVmaXRTbmFwc2hvdExhYmVsKFxuICBzbmFwc2hvdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkLFxuKSB7XG4gIGNvbnN0IHR5cGUgPSBzbmFwc2hvdFN0cmluZyhzbmFwc2hvdCwgXCJiZW5lZml0X3R5cGVcIilcbiAgaWYgKHR5cGUgPT09IFwiZml4ZWRfYW1vdW50XCIpIHtcbiAgICBjb25zdCBhbW91bnRzID0gQXJyYXkuaXNBcnJheShzbmFwc2hvdD8uYW1vdW50cylcbiAgICAgID8gKHNuYXBzaG90LmFtb3VudHMgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KVxuICAgICAgOiBbXVxuICAgIGlmIChhbW91bnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGFtb3VudHNcbiAgICAgICAgLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgY29uc3QgYW1vdW50ID0gc25hcHNob3ROdW1iZXIocm93LCBcImFtb3VudFwiKVxuICAgICAgICAgIGNvbnN0IGN1cnJlbmN5ID0gc25hcHNob3RTdHJpbmcocm93LCBcImN1cnJlbmN5X2NvZGVcIikudG9VcHBlckNhc2UoKVxuICAgICAgICAgIHJldHVybiBgJHthbW91bnQgPz8gMH0gJHtjdXJyZW5jeX1gLnRyaW0oKVxuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIiwgXCIpXG4gICAgfVxuXG4gICAgY29uc3QgYW1vdW50ID0gc25hcHNob3ROdW1iZXIoc25hcHNob3QsIFwiYW1vdW50XCIpXG4gICAgY29uc3QgY3VycmVuY3kgPSBzbmFwc2hvdFN0cmluZyhzbmFwc2hvdCwgXCJjdXJyZW5jeV9jb2RlXCIpLnRvVXBwZXJDYXNlKClcbiAgICByZXR1cm4gYCR7YW1vdW50ID8/IDB9ICR7Y3VycmVuY3l9YC50cmltKClcbiAgfVxuXG4gIGlmICh0eXBlID09PSBcInBlcmNlbnRhZ2VcIikge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gc25hcHNob3Q/LnByb21vdGlvbl90ZW1wbGF0ZSBhc1xuICAgICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgfCBudWxsXG4gICAgICB8IHVuZGVmaW5lZFxuICAgIGNvbnN0IG1ldGhvZCA9IHRlbXBsYXRlPy5hcHBsaWNhdGlvbl9tZXRob2QgYXNcbiAgICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgIHwgbnVsbFxuICAgICAgfCB1bmRlZmluZWRcbiAgICBjb25zdCBzY29wZSA9IHNuYXBzaG90U3RyaW5nKG1ldGhvZCwgXCJ0YXJnZXRfdHlwZVwiKSA9PT0gXCJvcmRlclwiXG4gICAgICA/IFwib3JkZXJcIlxuICAgICAgOiBcInByb2R1Y3RzXCJcbiAgICByZXR1cm4gYCR7c25hcHNob3ROdW1iZXIoc25hcHNob3QsIFwicGVyY2VudGFnZVwiKSA/PyAwfSUgb2ZmICR7c2NvcGV9YFxuICB9XG5cbiAgaWYgKHR5cGUgPT09IFwiZnJlZV9zaGlwcGluZ1wiKSB7XG4gICAgcmV0dXJuIFwiRnJlZSBzaGlwcGluZ1wiXG4gIH1cblxuICBpZiAodHlwZSA9PT0gXCJidXlfZ2V0XCIpIHtcbiAgICByZXR1cm4gXCJCdXkgWCBHZXQgWVwiXG4gIH1cblxuICByZXR1cm4gXCJVbmtub3duXCJcbn1cblxuZnVuY3Rpb24gZXhwaXJhdGlvblBvbGljeUxhYmVsKFxuICBzbmFwc2hvdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkLFxuKSB7XG4gIGNvbnN0IHBvbGljeSA9IHNuYXBzaG90Py5leHBpcmF0aW9uX3BvbGljeSBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IG51bGxcbiAgICB8IHVuZGVmaW5lZFxuICBjb25zdCB0eXBlID0gc25hcHNob3RTdHJpbmcocG9saWN5LCBcInR5cGVcIilcblxuICBpZiAodHlwZSA9PT0gXCJub25lXCIpIHJldHVybiBcIk5vIGV4cGlyYXRpb25cIlxuICBpZiAodHlwZSA9PT0gXCJkdXJhdGlvblwiKSB7XG4gICAgY29uc3QgZGF5cyA9IHNuYXBzaG90TnVtYmVyKHBvbGljeSwgXCJkdXJhdGlvbl9kYXlzXCIpID8/IDBcbiAgICByZXR1cm4gYCR7ZGF5c30gZGF5cyBhZnRlciBpc3N1YW5jZWBcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJmaXhlZFwiKSB7XG4gICAgcmV0dXJuIGBGaXhlZCBkYXRlICR7Zm9ybWF0RGF0ZVRpbWUoc25hcHNob3RTdHJpbmcocG9saWN5LCBcImV4cGlyZXNfYXRcIikpfWBcbiAgfVxuXG4gIHJldHVybiBcIi1cIlxufVxuXG5mdW5jdGlvbiBjYW1wYWlnblNuYXBzaG90TGFiZWwoXG4gIHNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfCB1bmRlZmluZWQsXG4pIHtcbiAgY29uc3QgY2FtcGFpZ25TbmFwc2hvdCA9IHNuYXBzaG90Py5jYW1wYWlnbl9zbmFwc2hvdCBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IG51bGxcbiAgICB8IHVuZGVmaW5lZFxuICByZXR1cm4gKFxuICAgIHNuYXBzaG90U3RyaW5nKGNhbXBhaWduU25hcHNob3QsIFwibmFtZVwiKSB8fFxuICAgIHNuYXBzaG90U3RyaW5nKGNhbXBhaWduU25hcHNob3QsIFwiY2FtcGFpZ25faWRlbnRpZmllclwiKSB8fFxuICAgIHNuYXBzaG90U3RyaW5nKHNuYXBzaG90LCBcImNhbXBhaWduX2lkXCIpIHx8XG4gICAgXCJOb25lXCJcbiAgKVxufVxuXG5mdW5jdGlvbiBwcm9tb3Rpb25TbmFwc2hvdExhYmVsKFxuICBzbmFwc2hvdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkLFxuKSB7XG4gIGNvbnN0IHRlbXBsYXRlID0gc25hcHNob3Q/LnByb21vdGlvbl90ZW1wbGF0ZSBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IG51bGxcbiAgICB8IHVuZGVmaW5lZFxuICBjb25zdCBtZXRob2QgPSB0ZW1wbGF0ZT8uYXBwbGljYXRpb25fbWV0aG9kIGFzXG4gICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHwgbnVsbFxuICAgIHwgdW5kZWZpbmVkXG4gIGNvbnN0IHRhcmdldCA9IHNuYXBzaG90U3RyaW5nKG1ldGhvZCwgXCJ0YXJnZXRfdHlwZVwiKVxuICBjb25zdCBhbGxvY2F0aW9uID0gc25hcHNob3RTdHJpbmcobWV0aG9kLCBcImFsbG9jYXRpb25cIilcblxuICByZXR1cm4gW3RhcmdldCwgYWxsb2NhdGlvbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgLyBcIikgfHwgXCJOb25lXCJcbn1cblxuZnVuY3Rpb24gY2FtcGFpZ25MYWJlbChjb25maWc6IENvdXBvblByb2R1Y3RDb25maWcpIHtcbiAgY29uc3QgbmFtZSA9IGNvbmZpZy5jYW1wYWlnbl9zbmFwc2hvdD8ubmFtZVxuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIgJiYgbmFtZSkge1xuICAgIHJldHVybiBuYW1lXG4gIH1cblxuICByZXR1cm4gY29uZmlnLmNhbXBhaWduX2lkIHx8IFwiTm9uZVwiXG59XG5cbmZ1bmN0aW9uIGZvcm1Gcm9tUm93KHJvdzogQ291cG9uUHJvZHVjdFJvdywgZGVmYXVsdEN1cnJlbmN5Q29kZTogc3RyaW5nKSB7XG4gIGNvbnN0IHByb2R1Y3QgPSByb3cucHJvZHVjdCB8fCAoe30gYXMgUHJvZHVjdFJlY29yZClcbiAgY29uc3QgY29uZmlnID0gcm93LmNvdXBvbl9wcm9kdWN0X2NvbmZpZ1xuICBjb25zdCB2YXJpYW50Q29uZmlnQnlWYXJpYW50SWQgPSBuZXcgTWFwKFxuICAgIChyb3cuY291cG9uX3Byb2R1Y3RfdmFyaWFudF9jb25maWdzIHx8IFtdKS5tYXAoKHZhcmlhbnRDb25maWcpID0+IFtcbiAgICAgIHZhcmlhbnRDb25maWcudmFyaWFudF9pZCxcbiAgICAgIHZhcmlhbnRDb25maWcsXG4gICAgXSksXG4gIClcbiAgY29uc3QgZHVyYXRpb25EYXlzID1cbiAgICBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3k/LnR5cGUgPT09IFwiZHVyYXRpb25cIlxuICAgICAgPyBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3kuZHVyYXRpb25fZGF5c1xuICAgICAgOiAzMFxuXG4gIHJldHVybiB7XG4gICAgcHJvZHVjdDoge1xuICAgICAgLi4uZW1wdHlQcm9kdWN0LFxuICAgICAgaWQ6IHByb2R1Y3QuaWQgfHwgXCJcIixcbiAgICAgIHRpdGxlOiBwcm9kdWN0LnRpdGxlIHx8IFwiXCIsXG4gICAgICBzdWJ0aXRsZTogcHJvZHVjdC5zdWJ0aXRsZSB8fCBcIlwiLFxuICAgICAgaGFuZGxlOiBwcm9kdWN0LmhhbmRsZSB8fCBcIlwiLFxuICAgICAgZGVzY3JpcHRpb246IHByb2R1Y3QuZGVzY3JpcHRpb24gfHwgXCJcIixcbiAgICAgIHRodW1ibmFpbDogcHJvZHVjdC50aHVtYm5haWwgfHwgXCJcIixcbiAgICAgIHN0YXR1czogcHJvZHVjdC5zdGF0dXMgfHwgXCJkcmFmdFwiLFxuICAgICAgZGlzY291bnRhYmxlOiBCb29sZWFuKHByb2R1Y3QuZGlzY291bnRhYmxlKSxcbiAgICAgIHR5cGVfaWQ6IHByb2R1Y3QudHlwZV9pZCB8fCBcIlwiLFxuICAgICAgY29sbGVjdGlvbl9pZDogcHJvZHVjdC5jb2xsZWN0aW9uX2lkIHx8IFwiXCIsXG4gICAgICBjYXRlZ29yeV9pZDogcHJvZHVjdC5jYXRlZ29yaWVzPy5bMF0/LmlkIHx8IFwiXCIsXG4gICAgICB0YWdfaWQ6IHByb2R1Y3QudGFncz8uWzBdPy5pZCB8fCBcIlwiLFxuICAgICAgc2FsZXNfY2hhbm5lbF9pZDogcHJvZHVjdC5zYWxlc19jaGFubmVscz8uWzBdPy5pZCB8fCBcIlwiLFxuICAgICAgdmFyaWFudHM6IChwcm9kdWN0LnZhcmlhbnRzPy5sZW5ndGggPyBwcm9kdWN0LnZhcmlhbnRzIDogW10pLm1hcChcbiAgICAgICAgKHZhcmlhbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBvdmVycmlkZSA9IHZhcmlhbnRDb25maWdCeVZhcmlhbnRJZC5nZXQodmFyaWFudC5pZClcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uZW1wdHlWYXJpYW50LFxuICAgICAgICAgICAgaWQ6IHZhcmlhbnQuaWQsXG4gICAgICAgICAgICBvdmVycmlkZV9jb25maWdfaWQ6IG92ZXJyaWRlPy5pZCxcbiAgICAgICAgICAgIHRpdGxlOiB2YXJpYW50LnRpdGxlIHx8IFwiXCIsXG4gICAgICAgICAgICBza3U6IHZhcmlhbnQuc2t1IHx8IFwiXCIsXG4gICAgICAgICAgICBjdXJyZW5jeV9jb2RlOlxuICAgICAgICAgICAgICB2YXJpYW50LnByaWNlcz8uWzBdPy5jdXJyZW5jeV9jb2RlIHx8XG4gICAgICAgICAgICAgIG92ZXJyaWRlPy5jdXJyZW5jeV9jb2RlIHx8XG4gICAgICAgICAgICAgIGNvbmZpZy5jdXJyZW5jeV9jb2RlIHx8XG4gICAgICAgICAgICAgIGRlZmF1bHRDdXJyZW5jeUNvZGUsXG4gICAgICAgICAgICBhbW91bnQ6XG4gICAgICAgICAgICAgIHZhcmlhbnQucHJpY2VzPy5bMF0/LmFtb3VudCA9PSBudWxsXG4gICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgOiBTdHJpbmcodmFyaWFudC5wcmljZXM/LlswXT8uYW1vdW50KSxcbiAgICAgICAgICAgIG92ZXJyaWRlX2VuYWJsZWQ6IG92ZXJyaWRlID8gb3ZlcnJpZGUuZW5hYmxlZCAhPT0gZmFsc2UgOiBmYWxzZSxcbiAgICAgICAgICAgIG92ZXJyaWRlX2JlbmVmaXRfdHlwZTpcbiAgICAgICAgICAgICAgb3ZlcnJpZGU/LmJlbmVmaXRfdHlwZSB8fCBjb25maWcuYmVuZWZpdF90eXBlIHx8IFwiZml4ZWRfYW1vdW50XCIsXG4gICAgICAgICAgICBvdmVycmlkZV9jdXJyZW5jeV9jb2RlOlxuICAgICAgICAgICAgICBvdmVycmlkZT8uY3VycmVuY3lfY29kZSB8fFxuICAgICAgICAgICAgICBjb25maWcuY3VycmVuY3lfY29kZSB8fFxuICAgICAgICAgICAgICBkZWZhdWx0Q3VycmVuY3lDb2RlLFxuICAgICAgICAgICAgb3ZlcnJpZGVfYW1vdW50OlxuICAgICAgICAgICAgICBvdmVycmlkZT8uYW1vdW50ID09IG51bGwgPyBcIlwiIDogU3RyaW5nKG92ZXJyaWRlLmFtb3VudCksXG4gICAgICAgICAgICBvdmVycmlkZV9wZXJjZW50YWdlOlxuICAgICAgICAgICAgICBvdmVycmlkZT8ucGVyY2VudGFnZSA9PSBudWxsID8gXCJcIiA6IFN0cmluZyhvdmVycmlkZS5wZXJjZW50YWdlKSxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApLFxuICAgIH0sXG4gICAgY291cG9uOiB7XG4gICAgICAuLi5lbXB0eUNvdXBvbixcbiAgICAgIGVuYWJsZWQ6IGNvbmZpZy5lbmFibGVkLFxuICAgICAgYmVuZWZpdF90eXBlOiBjb25maWcuYmVuZWZpdF90eXBlLFxuICAgICAgYW1vdW50OiBjb25maWcuYW1vdW50ID09IG51bGwgPyBcIlwiIDogU3RyaW5nKGNvbmZpZy5hbW91bnQpLFxuICAgICAgcGVyY2VudGFnZTogY29uZmlnLnBlcmNlbnRhZ2UgPT0gbnVsbCA/IFwiXCIgOiBTdHJpbmcoY29uZmlnLnBlcmNlbnRhZ2UpLFxuICAgICAgY3VycmVuY3lfY29kZTogY29uZmlnLmN1cnJlbmN5X2NvZGUgfHwgZGVmYXVsdEN1cnJlbmN5Q29kZSxcbiAgICAgIGNvZGVfc3RyYXRlZ3k6IGNvbmZpZy5jb2RlX3N0cmF0ZWd5LFxuICAgICAgY29kZV9wcmVmaXg6IGNvbmZpZy5jb2RlX3ByZWZpeCB8fCBcIlwiLFxuICAgICAgc2hhcmVkX2NvZGU6IGNvbmZpZy5zaGFyZWRfY29kZSB8fCBcIlwiLFxuICAgICAgZXhwaXJhdGlvbl90eXBlOiBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3k/LnR5cGUgfHwgXCJkdXJhdGlvblwiLFxuICAgICAgZXhwaXJhdGlvbl9kYXlzOiBTdHJpbmcoZHVyYXRpb25EYXlzKSxcbiAgICAgIGV4cGlyYXRpb25fZGF0ZTpcbiAgICAgICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlID09PSBcImZpeGVkXCJcbiAgICAgICAgICA/IHRvRGF0ZVRpbWVMb2NhbChjb25maWcuZXhwaXJhdGlvbl9wb2xpY3kuZXhwaXJlc19hdClcbiAgICAgICAgICA6IFwiXCIsXG4gICAgICBleHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbjpcbiAgICAgICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py5jYXBfYnlfY2FtcGFpZ24gIT09IGZhbHNlLFxuICAgICAgZXhwaXJhdGlvbl9jYXBfYXQ6IGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeT8uY2FwX2F0XG4gICAgICAgID8gdG9EYXRlVGltZUxvY2FsKGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeS5jYXBfYXQpXG4gICAgICAgIDogXCJcIixcbiAgICAgIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTogU3RyaW5nKFxuICAgICAgICBjb25maWcubWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtIHx8IDEsXG4gICAgICApLFxuICAgICAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiBjb25maWcucHJvbW90aW9uX21pcnJvcl9tb2RlIHx8IFwibm9uZVwiLFxuICAgICAgcHJvbW90aW9uX3N0YXR1czogY29uZmlnLnByb21vdGlvbl9zdGF0dXMgfHwgXCJkcmFmdFwiLFxuICAgIH0sXG4gICAgY2FtcGFpZ246IHtcbiAgICAgIC4uLmVtcHR5Q2FtcGFpZ24sXG4gICAgICBtb2RlOiBjb25maWcuY2FtcGFpZ25faWQgPyBcImV4aXN0aW5nXCIgOiBcIm5vbmVcIixcbiAgICAgIGNhbXBhaWduX2lkOiBjb25maWcuY2FtcGFpZ25faWQgfHwgXCJcIixcbiAgICB9LFxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ291cG9uUGF5bG9hZChcbiAgY291cG9uOiBDb3Vwb25Gb3JtU3RhdGUsXG4gIGFsbG93UHJvbW90aW9uTWlycm9yOiBib29sZWFuLFxuKSB7XG4gIHJldHVybiB7XG4gICAgZW5hYmxlZDogY291cG9uLmVuYWJsZWQsXG4gICAgYmVuZWZpdF90eXBlOiBjb3Vwb24uYmVuZWZpdF90eXBlLFxuICAgIGFtb3VudDpcbiAgICAgIGNvdXBvbi5iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCJcbiAgICAgICAgPyBudW1iZXJPck51bGwoY291cG9uLmFtb3VudClcbiAgICAgICAgOiBudWxsLFxuICAgIHBlcmNlbnRhZ2U6XG4gICAgICBjb3Vwb24uYmVuZWZpdF90eXBlID09PSBcInBlcmNlbnRhZ2VcIlxuICAgICAgICA/IG51bWJlck9yTnVsbChjb3Vwb24ucGVyY2VudGFnZSlcbiAgICAgICAgOiBudWxsLFxuICAgIGN1cnJlbmN5X2NvZGU6XG4gICAgICBjb3Vwb24uYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiXG4gICAgICAgID8gY291cG9uLmN1cnJlbmN5X2NvZGUudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgOiBudWxsLFxuICAgIGNvZGVfc3RyYXRlZ3k6IGNvdXBvbi5jb2RlX3N0cmF0ZWd5LFxuICAgIGNvZGVfcHJlZml4OlxuICAgICAgY291cG9uLmNvZGVfc3RyYXRlZ3kgPT09IFwidW5pcXVlX2NvZGVcIlxuICAgICAgICA/IGNvdXBvbi5jb2RlX3ByZWZpeC50cmltKCkgfHwgXCJDT1VQT05cIlxuICAgICAgICA6IG51bGwsXG4gICAgc2hhcmVkX2NvZGU6XG4gICAgICBjb3Vwb24uY29kZV9zdHJhdGVneSA9PT0gXCJzaGFyZWRfY29kZVwiID8gY291cG9uLnNoYXJlZF9jb2RlLnRyaW0oKSA6IG51bGwsXG4gICAgZXhwaXJhdGlvbl9wb2xpY3k6XG4gICAgICBjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcImZpeGVkXCJcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0eXBlOiBcImZpeGVkXCIgYXMgY29uc3QsXG4gICAgICAgICAgICBleHBpcmVzX2F0OiBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9kYXRlKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgY2FwX2J5X2NhbXBhaWduOiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ24sXG4gICAgICAgICAgICBjYXBfYXQ6IGNvdXBvbi5leHBpcmF0aW9uX2NhcF9hdFxuICAgICAgICAgICAgICA/IG5ldyBEYXRlKGNvdXBvbi5leHBpcmF0aW9uX2NhcF9hdCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZHVyYXRpb25cIiBhcyBjb25zdCxcbiAgICAgICAgICAgIGR1cmF0aW9uX2RheXM6IE51bWJlcihjb3Vwb24uZXhwaXJhdGlvbl9kYXlzKSB8fCAzMCxcbiAgICAgICAgICAgIGNhcF9ieV9jYW1wYWlnbjogY291cG9uLmV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduLFxuICAgICAgICAgICAgY2FwX2F0OiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXRcbiAgICAgICAgICAgICAgPyBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXQpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIH0sXG4gICAgbWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtOlxuICAgICAgTnVtYmVyKGNvdXBvbi5tYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW0pIHx8IDEsXG4gICAgLi4uKGFsbG93UHJvbW90aW9uTWlycm9yXG4gICAgICA/IHtcbiAgICAgICAgICBwcm9tb3Rpb25fbWlycm9yX21vZGU6IGNvdXBvbi5wcm9tb3Rpb25fbWlycm9yX21vZGUsXG4gICAgICAgICAgcHJvbW90aW9uX3N0YXR1czogY291cG9uLnByb21vdGlvbl9zdGF0dXMsXG4gICAgICAgIH1cbiAgICAgIDoge30pLFxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ2FtcGFpZ25QYXlsb2FkKFxuICBjYW1wYWlnbjogQ2FtcGFpZ25Gb3JtU3RhdGUsXG4gIGFsbG93Q2FtcGFpZ246IGJvb2xlYW4sXG4pIHtcbiAgaWYgKCFhbGxvd0NhbXBhaWduKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIGlmIChjYW1wYWlnbi5tb2RlID09PSBcImV4aXN0aW5nXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJleGlzdGluZ1wiLFxuICAgICAgY2FtcGFpZ25faWQ6IGNhbXBhaWduLmNhbXBhaWduX2lkIHx8IG51bGwsXG4gICAgfVxuICB9XG4gIGlmIChjYW1wYWlnbi5tb2RlID09PSBcIm5ld1wiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwibmV3XCIsXG4gICAgICBjYW1wYWlnbjoge1xuICAgICAgICBuYW1lOiBjYW1wYWlnbi5uYW1lLFxuICAgICAgICBjYW1wYWlnbl9pZGVudGlmaWVyOiBjYW1wYWlnbi5jYW1wYWlnbl9pZGVudGlmaWVyLFxuICAgICAgICBzdGFydHNfYXQ6IGNhbXBhaWduLnN0YXJ0c19hdFxuICAgICAgICAgID8gbmV3IERhdGUoY2FtcGFpZ24uc3RhcnRzX2F0KS50b0lTT1N0cmluZygpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICBlbmRzX2F0OiBjYW1wYWlnbi5lbmRzX2F0XG4gICAgICAgICAgPyBuZXcgRGF0ZShjYW1wYWlnbi5lbmRzX2F0KS50b0lTT1N0cmluZygpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgfSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgbW9kZTogXCJub25lXCIgfVxufVxuXG5mdW5jdGlvbiBzdGVwU3RhdHVzKHN0ZXA6IFdpemFyZFN0ZXAsIGFjdGl2ZTogV2l6YXJkU3RlcCkge1xuICBjb25zdCBzdGVwSW5kZXggPSBzdGVwcy5pbmRleE9mKHN0ZXApXG4gIGNvbnN0IGFjdGl2ZUluZGV4ID0gc3RlcHMuaW5kZXhPZihhY3RpdmUpXG4gIGlmIChzdGVwSW5kZXggPCBhY3RpdmVJbmRleCkgcmV0dXJuIFwiY29tcGxldGVkXCJcbiAgaWYgKHN0ZXBJbmRleCA9PT0gYWN0aXZlSW5kZXgpIHJldHVybiBcImluLXByb2dyZXNzXCJcbiAgcmV0dXJuIFwibm90LXN0YXJ0ZWRcIlxufVxuXG5mdW5jdGlvbiBGaWVsZCh7IGxhYmVsLCBjaGlsZHJlbiB9OiB7IGxhYmVsOiBzdHJpbmc7IGNoaWxkcmVuOiBSZWFjdE5vZGUgfSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAteS0xXCIgc3R5bGU9e3sgbWluV2lkdGg6IDAgfX0+XG4gICAgICA8TGFiZWw+e2xhYmVsfTwvTGFiZWw+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZnVuY3Rpb24gY3VycmVuY3lEZWNpbWFsRGlnaXRzKGNvZGU6IHN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXCJlblwiLCB7XG4gICAgICBzdHlsZTogXCJjdXJyZW5jeVwiLFxuICAgICAgY3VycmVuY3k6IGNvZGUudG9VcHBlckNhc2UoKSxcbiAgICB9KS5yZXNvbHZlZE9wdGlvbnMoKS5tYXhpbXVtRnJhY3Rpb25EaWdpdHNcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIDJcbiAgfVxufVxuXG5mdW5jdGlvbiBjdXJyZW5jeVN5bWJvbChjb2RlOiBzdHJpbmcpIHtcbiAgaWYgKCFjb2RlKSByZXR1cm4gXCJcIlxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIChcbiAgICAgIG5ldyBJbnRsLk51bWJlckZvcm1hdChcImVuXCIsIHtcbiAgICAgICAgc3R5bGU6IFwiY3VycmVuY3lcIixcbiAgICAgICAgY3VycmVuY3k6IGNvZGUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgY3VycmVuY3lEaXNwbGF5OiBcIm5hcnJvd1N5bWJvbFwiLFxuICAgICAgfSlcbiAgICAgICAgLmZvcm1hdFRvUGFydHMoMClcbiAgICAgICAgLmZpbmQoKHBhcnQpID0+IHBhcnQudHlwZSA9PT0gXCJjdXJyZW5jeVwiKT8udmFsdWUgfHwgY29kZS50b1VwcGVyQ2FzZSgpXG4gICAgKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gY29kZS50b1VwcGVyQ2FzZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gQ3VycmVuY3lTZWxlY3Qoe1xuICBjdXJyZW5jaWVzLFxuICBkaXNhYmxlZCxcbiAgb25DaGFuZ2UsXG4gIHZhbHVlLFxufToge1xuICBjdXJyZW5jaWVzOiBDdXJyZW5jeU9wdGlvbltdXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgdmFsdWU6IHN0cmluZ1xufSkge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RcbiAgICAgIHZhbHVlPXt2YWx1ZSB8fCB1bmRlZmluZWR9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgfHwgIWN1cnJlbmNpZXMubGVuZ3RofVxuICAgICAgb25WYWx1ZUNoYW5nZT17b25DaGFuZ2V9XG4gICAgPlxuICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICA8U2VsZWN0LlZhbHVlXG4gICAgICAgICAgcGxhY2Vob2xkZXI9e1xuICAgICAgICAgICAgY3VycmVuY2llcy5sZW5ndGggPyBcIlNlbGVjdCBjdXJyZW5jeVwiIDogXCJObyBjdXJyZW5jaWVzIGF2YWlsYWJsZVwiXG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAge2N1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gKFxuICAgICAgICAgIDxTZWxlY3QuSXRlbSBrZXk9e2N1cnJlbmN5LmNvZGV9IHZhbHVlPXtjdXJyZW5jeS5jb2RlfT5cbiAgICAgICAgICAgIHtjdXJyZW5jeS5uYW1lfSAoe2N1cnJlbmN5LmNvZGUudG9VcHBlckNhc2UoKX0pXG4gICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgKSl9XG4gICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgIDwvU2VsZWN0PlxuICApXG59XG5cbmZ1bmN0aW9uIEN1cnJlbmN5QW1vdW50SW5wdXQoe1xuICBjdXJyZW5jaWVzLFxuICBjdXJyZW5jeUNvZGUsXG4gIGRpc2FibGVkLFxuICBvbkNoYW5nZSxcbiAgdmFsdWUsXG59OiB7XG4gIGN1cnJlbmNpZXM6IEN1cnJlbmN5T3B0aW9uW11cbiAgY3VycmVuY3lDb2RlOiBzdHJpbmdcbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuICB2YWx1ZTogc3RyaW5nXG59KSB7XG4gIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy5maW5kKChpdGVtKSA9PiBpdGVtLmNvZGUgPT09IGN1cnJlbmN5Q29kZSlcbiAgY29uc3QgY29kZSA9IGN1cnJlbmN5Q29kZS50b1VwcGVyQ2FzZSgpXG4gIGNvbnN0IGRlY2ltYWxzID0gY3VycmVuY3lEZWNpbWFsRGlnaXRzKGNvZGUgfHwgXCJVU0RcIilcblxuICByZXR1cm4gKFxuICAgIDxDdXJyZW5jeUlucHV0XG4gICAgICBjb2RlPXtjb2RlIHx8IFwiVVNEXCJ9XG4gICAgICBzeW1ib2w9e1xuICAgICAgICBjdXJyZW5jeT8uc3ltYm9sX25hdGl2ZSB8fFxuICAgICAgICBjdXJyZW5jeT8uc3ltYm9sIHx8XG4gICAgICAgIGN1cnJlbmN5U3ltYm9sKGNvZGUgfHwgXCJVU0RcIilcbiAgICAgIH1cbiAgICAgIG1pbj17MH1cbiAgICAgIGRlY2ltYWxTY2FsZT17ZGVjaW1hbHN9XG4gICAgICBkZWNpbWFsc0xpbWl0PXtkZWNpbWFsc31cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZCB8fCAhY3VycmVuY3lDb2RlfVxuICAgICAgb25WYWx1ZUNoYW5nZT17KG5leHRWYWx1ZSkgPT4gb25DaGFuZ2UobmV4dFZhbHVlIHx8IFwiXCIpfVxuICAgIC8+XG4gIClcbn1cblxuY29uc3QgZW50aXRsZW1lbnRGaWx0ZXJzID0gW1xuICB7IGxhYmVsOiBcIkFsbFwiLCB2YWx1ZTogXCJhbGxcIiB9LFxuICB7IGxhYmVsOiBcIklzc3VlZFwiLCB2YWx1ZTogXCJpc3N1ZWRcIiB9LFxuICB7IGxhYmVsOiBcIlJlZGVlbWVkXCIsIHZhbHVlOiBcInJlZGVlbWVkXCIgfSxcbiAgeyBsYWJlbDogXCJFeHBpcmVkXCIsIHZhbHVlOiBcImV4cGlyZWRcIiB9LFxuICB7IGxhYmVsOiBcIkNhbmNlbGVkXCIsIHZhbHVlOiBcImNhbmNlbGVkXCIgfSxcbl0gYXMgY29uc3RcblxudHlwZSBFbnRpdGxlbWVudEZpbHRlciA9ICh0eXBlb2YgZW50aXRsZW1lbnRGaWx0ZXJzKVtudW1iZXJdW1widmFsdWVcIl1cblxuZnVuY3Rpb24gU25hcHNob3RCbG9jayh7IHRpdGxlLCB2YWx1ZSB9OiB7IHRpdGxlOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGV0YWlscyBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBwLTNcIj5cbiAgICAgIDxzdW1tYXJ5IGNsYXNzTmFtZT1cImN1cnNvci1wb2ludGVyIHRleHQtdWktZmctYmFzZSB0eHQtc21hbGwtcGx1c1wiPlxuICAgICAgICB7dGl0bGV9XG4gICAgICA8L3N1bW1hcnk+XG4gICAgICA8cHJlXG4gICAgICAgIGNsYXNzTmFtZT1cIm10LTMgcm91bmRlZC1tZCBiZy11aS1iZy1zdWJ0bGUgcC0zIHRleHQtdWktZmctc3VidGxlIHR4dC1jb21wYWN0LXhzbWFsbFwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgbWF4SGVpZ2h0OiAyMjAsXG4gICAgICAgICAgb3ZlcmZsb3c6IFwiYXV0b1wiLFxuICAgICAgICAgIHdoaXRlU3BhY2U6IFwicHJlLXdyYXBcIixcbiAgICAgICAgICB3b3JkQnJlYWs6IFwiYnJlYWstd29yZFwiLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7anNvbkJsb2NrKHZhbHVlKX1cbiAgICAgIDwvcHJlPlxuICAgIDwvZGV0YWlscz5cbiAgKVxufVxuXG5mdW5jdGlvbiBUd29Db2x1bW5MYXlvdXQoe1xuICBmaXJzdENvbCxcbiAgc2Vjb25kQ29sLFxufToge1xuICBmaXJzdENvbDogUmVhY3ROb2RlXG4gIHNlY29uZENvbDogUmVhY3ROb2RlXG59KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC14LTQgZ2FwLXktMyB4bDpmbGV4LXJvdyB4bDppdGVtcy1zdGFydFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBmbGV4LWNvbCBnYXAteS0zXCI+e2ZpcnN0Q29sfTwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBtYXgtdy1bMTAwJV0gZmxleC1jb2wgZ2FwLXktMyB4bDptdC0wIHhsOm1heC13LVs0NDBweF1cIj5cbiAgICAgICAge3NlY29uZENvbH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmZ1bmN0aW9uIFNlY3Rpb25Sb3coe1xuICB0aXRsZSxcbiAgdmFsdWUsXG59OiB7XG4gIHRpdGxlOiBzdHJpbmdcbiAgdmFsdWU6IFJlYWN0Tm9kZVxufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1zdWJ0bGUgZ3JpZCBncmlkLWNvbHMtMiBpdGVtcy1jZW50ZXIgZ2FwLXgtNCBweC02IHB5LTRcIj5cbiAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIHdlaWdodD1cInBsdXNcIiBsZWFkaW5nPVwiY29tcGFjdFwiPlxuICAgICAgICB7dGl0bGV9XG4gICAgICA8L1RleHQ+XG4gICAgICB7dHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlID09IG51bGwgPyAoXG4gICAgICAgIDxUZXh0XG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBsZWFkaW5nPVwiY29tcGFjdFwiXG4gICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1wcmV0dHkgd2hpdGVzcGFjZS1wcmUtbGluZVwiXG4gICAgICAgID5cbiAgICAgICAgICB7dmFsdWUgfHwgXCItXCJ9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMFwiPnt2YWx1ZX08L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZnVuY3Rpb24gV2lkZ2V0SGVhZGVyKHsgdGl0bGUgfTogeyB0aXRsZTogc3RyaW5nIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC02IHB5LTRcIj5cbiAgICAgIDxIZWFkaW5nIGxldmVsPVwiaDJcIj57dGl0bGV9PC9IZWFkaW5nPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmZ1bmN0aW9uIFNpZGViYXJMaW5rKHtcbiAgaHJlZixcbiAgbGFiZWwsXG4gIGRlc2NyaXB0aW9uLFxuICBpY29uLFxufToge1xuICBocmVmOiBzdHJpbmdcbiAgbGFiZWw6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIGljb24/OiBSZWFjdE5vZGVcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8YSBocmVmPXtocmVmfSBjbGFzc05hbWU9XCJncm91cCBvdXRsaW5lLW5vbmVcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMiBweC0yIHBiLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzaGFkb3ctZWxldmF0aW9uLWNhcmQtcmVzdCBiZy11aS1iZy1jb21wb25lbnQgdHJhbnNpdGlvbi1mZyBob3ZlcjpiZy11aS1iZy1jb21wb25lbnQtaG92ZXIgYWN0aXZlOmJnLXVpLWJnLWNvbXBvbmVudC1wcmVzc2VkIGdyb3VwLWZvY3VzLXZpc2libGU6c2hhZG93LWJvcmRlcnMtaW50ZXJhY3RpdmUtd2l0aC1hY3RpdmUgcm91bmRlZC1tZCBweC00IHB5LTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00XCI+XG4gICAgICAgICAgICB7aWNvbiAmJiA8ZGl2PntpY29ufTwvZGl2Pn1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LTEgZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgbGVhZGluZz1cImNvbXBhY3RcIiB3ZWlnaHQ9XCJwbHVzXCI+XG4gICAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICBsZWFkaW5nPVwiY29tcGFjdFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1zdWJ0bGVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2Rlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPFRyaWFuZ2xlUmlnaHRNaW5pIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmZ1bmN0aW9uIFN1bW1hcnlXaWRnZXQoe1xuICBsYWJlbCxcbiAgdmFsdWUsXG4gIHRvbmUgPSBcImdyZWVuXCIsXG59OiB7XG4gIGxhYmVsOiBzdHJpbmdcbiAgdmFsdWU6IHN0cmluZ1xuICB0b25lPzogXCJncmVlblwiIHwgXCJuZXV0cmFsXCJcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cInB4LTYgcHktNFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLXN1YnRsZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0zXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2BoLTggdy0xIHJvdW5kZWQtZnVsbCAke1xuICAgICAgICAgICAgdG9uZSA9PT0gXCJncmVlblwiXG4gICAgICAgICAgICAgID8gXCJiZy11aS10YWctZ3JlZW4taWNvblwiXG4gICAgICAgICAgICAgIDogXCJiZy11aS10YWctbmV1dHJhbC1pY29uXCJcbiAgICAgICAgICB9YH1cbiAgICAgICAgLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wXCI+XG4gICAgICAgICAgPFRleHQgd2VpZ2h0PVwicGx1c1wiIHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctc3VidGxlXCI+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICB3ZWlnaHQ9XCJwbHVzXCJcbiAgICAgICAgICAgIHNpemU9XCJ4bGFyZ2VcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGFidWxhci1udW1zIHRleHQtdWktZmctYmFzZSBicmVhay13b3Jkc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3ZhbHVlfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L0NvbnRhaW5lcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb3Vwb25HZW5lcmFsU2VjdGlvbih7IGRldGFpbCB9OiB7IGRldGFpbDogQ291cG9uRW50aXRsZW1lbnREZXRhaWwgfSkge1xuICBjb25zdCBlbnRpdGxlbWVudCA9IGRldGFpbC5jdXN0b21lcl9jb3Vwb25fZW50aXRsZW1lbnRcbiAgY29uc3QgaXNzdWFuY2UgPSBkZXRhaWwuY291cG9uX2lzc3VhbmNlIHx8IG51bGxcbiAgY29uc3QgYmVuZWZpdFNuYXBzaG90ID0gZW50aXRsZW1lbnQuYmVuZWZpdF9zbmFwc2hvdCB8fCBudWxsXG4gIGNvbnN0IHNvdXJjZVNuYXBzaG90ID0gZW50aXRsZW1lbnQuc291cmNlX3NuYXBzaG90IHx8IG51bGxcbiAgY29uc3QgY29kZSA9IGNvdXBvbkNvZGUoZW50aXRsZW1lbnQpXG4gIGNvbnN0IGV4dGVybmFsID0gZW50aXRsZW1lbnQub3JpZ2luID09PSBcImV4dGVybmFsXCJcbiAgY29uc3QgcHJvZHVjdExhYmVsID1cbiAgICBzbmFwc2hvdFN0cmluZyhzb3VyY2VTbmFwc2hvdCwgXCJ0aXRsZVwiKSB8fFxuICAgIHNuYXBzaG90U3RyaW5nKHNvdXJjZVNuYXBzaG90LCBcInNvdXJjZVwiKSB8fFxuICAgIGVudGl0bGVtZW50LnByb2R1Y3RfaWQgfHxcbiAgICBcIkV4dGVybmFsXCJcbiAgY29uc3QgdmFyaWFudExhYmVsID1cbiAgICBzbmFwc2hvdFN0cmluZyhzb3VyY2VTbmFwc2hvdCwgXCJ2YXJpYW50X2lkXCIpIHx8IGVudGl0bGVtZW50LnZhcmlhbnRfaWQgfHwgXCItXCJcbiAgY29uc3QgaXNzdWVkRGF0ZSA9IGVudGl0bGVtZW50LmNyZWF0ZWRfYXQgfHwgaXNzdWFuY2U/LmNyZWF0ZWRfYXQgfHwgbnVsbFxuXG4gIHJldHVybiAoXG4gICAgPENvbnRhaW5lciBjbGFzc05hbWU9XCJkaXZpZGUteSBwLTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTYgcHktNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC14LTFcIj5cbiAgICAgICAgICAgIDxIZWFkaW5nIGNsYXNzTmFtZT1cImJyZWFrLWFsbFwiPiN7Y29kZX08L0hlYWRpbmc+XG4gICAgICAgICAgICB7Y29kZSAhPT0gXCItXCIgJiYgKFxuICAgICAgICAgICAgICA8Q29weSBjb250ZW50PXtjb2RlfSBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCIgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1zdWJ0bGVcIj5cbiAgICAgICAgICAgIHtmb3JtYXRGdWxsRGF0ZShpc3N1ZWREYXRlKX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8U3RhdHVzQmFkZ2UgY29sb3I9e2VudGl0bGVtZW50U3RhdHVzQ29sb3IoZW50aXRsZW1lbnQuc3RhdHVzKX0+XG4gICAgICAgICAge2VudGl0bGVtZW50LnN0YXR1c31cbiAgICAgICAgPC9TdGF0dXNCYWRnZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJEYXRlIGlzc3VlZFwiIHZhbHVlPXtmb3JtYXRSZWxhdGl2ZURhdGUoaXNzdWVkRGF0ZSl9IC8+XG4gICAgICA8U2VjdGlvblJvd1xuICAgICAgICB0aXRsZT1cIkN1c3RvbWVyXCJcbiAgICAgICAgdmFsdWU9e2VudGl0bGVtZW50LmVtYWlsIHx8IGVudGl0bGVtZW50LmN1c3RvbWVyX2lkIHx8IFwiLVwifVxuICAgICAgLz5cbiAgICAgIDxTZWN0aW9uUm93IHRpdGxlPVwiT3JpZ2luXCIgdmFsdWU9e2VudGl0bGVtZW50U291cmNlKGVudGl0bGVtZW50KX0gLz5cbiAgICAgIDxTZWN0aW9uUm93XG4gICAgICAgIHRpdGxlPXtleHRlcm5hbCA/IFwiU291cmNlXCIgOiBcIkNvdXBvbiBwcm9kdWN0XCJ9XG4gICAgICAgIHZhbHVlPXtwcm9kdWN0TGFiZWx9XG4gICAgICAvPlxuICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJTZWxsZXIgc2NvcGVcIiB2YWx1ZT17ZW50aXRsZW1lbnRTZWxsZXJTY29wZShlbnRpdGxlbWVudCl9IC8+XG4gICAgICB7IWV4dGVybmFsICYmIDxTZWN0aW9uUm93IHRpdGxlPVwiVmFyaWFudFwiIHZhbHVlPXt2YXJpYW50TGFiZWx9IC8+fVxuICAgICAgeyFleHRlcm5hbCAmJiAoXG4gICAgICAgIDxTZWN0aW9uUm93XG4gICAgICAgICAgdGl0bGU9XCJRdWFudGl0eVwiXG4gICAgICAgICAgdmFsdWU9e1N0cmluZyhcbiAgICAgICAgICAgIHNuYXBzaG90TnVtYmVyKHNvdXJjZVNuYXBzaG90LCBcInF1YW50aXR5XCIpID8/IGlzc3VhbmNlPy5xdWFudGl0eSA/PyAxLFxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPFNlY3Rpb25Sb3dcbiAgICAgICAgdGl0bGU9XCJCZW5lZml0XCJcbiAgICAgICAgdmFsdWU9e2JlbmVmaXRTbmFwc2hvdExhYmVsKGJlbmVmaXRTbmFwc2hvdCl9XG4gICAgICAvPlxuICAgICAgPFNlY3Rpb25Sb3dcbiAgICAgICAgdGl0bGU9XCJFeHBpcmF0aW9uIHBvbGljeVwiXG4gICAgICAgIHZhbHVlPXtleHBpcmF0aW9uUG9saWN5TGFiZWwoYmVuZWZpdFNuYXBzaG90KX1cbiAgICAgIC8+XG4gICAgICA8U2VjdGlvblJvdyB0aXRsZT1cIkV4cGlyYXRpb24gRGF0ZVwiIHZhbHVlPXtmb3JtYXREYXRlKGVudGl0bGVtZW50LmV4cGlyZXNfYXQpfSAvPlxuICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJSZWRlZW1lZCBEYXRlXCIgdmFsdWU9e2Zvcm1hdERhdGUoZW50aXRsZW1lbnQucmVkZWVtZWRfYXQpfSAvPlxuICAgIDwvQ29udGFpbmVyPlxuICApXG59XG5cbmZ1bmN0aW9uIFJlbGF0ZWRPcmRlclNlY3Rpb24oe1xuICBhcGlCYXNlLFxuICBkZXRhaWwsXG59OiB7XG4gIGFwaUJhc2U6IEFwaUJhc2VcbiAgZGV0YWlsOiBDb3Vwb25FbnRpdGxlbWVudERldGFpbFxufSkge1xuICBjb25zdCBlbnRpdGxlbWVudCA9IGRldGFpbC5jdXN0b21lcl9jb3Vwb25fZW50aXRsZW1lbnRcbiAgY29uc3Qgb3JkZXIgPSBkZXRhaWwub3JkZXIgfHwgbnVsbFxuICBjb25zdCBvcmRlcklkID0gb3JkZXI/LmlkIHx8IGVudGl0bGVtZW50Lm9yZGVyX2lkXG4gIGlmICghb3JkZXJJZCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb250YWluZXIgY2xhc3NOYW1lPVwicC0wXCI+XG4gICAgICA8V2lkZ2V0SGVhZGVyIHRpdGxlPVwiUmVsYXRlZCBPcmRlclwiIC8+XG4gICAgICA8U2lkZWJhckxpbmtcbiAgICAgICAgaHJlZj17b3JkZXJEZXRhaWxQYXRoKGFwaUJhc2UsIG9yZGVySWQpfVxuICAgICAgICBsYWJlbD17b3JkZXIgPyBvcmRlckRpc3BsYXlJZChvcmRlcikgOiBvcmRlcklkfVxuICAgICAgICBkZXNjcmlwdGlvbj17XG4gICAgICAgICAgb3JkZXI/LmNyZWF0ZWRfYXRcbiAgICAgICAgICAgID8gYE9yZGVyIHBsYWNlZCAke2Zvcm1hdFJlbGF0aXZlRGF0ZShvcmRlci5jcmVhdGVkX2F0KX1gXG4gICAgICAgICAgICA6IFwiUHVyY2hhc2VkIGNvdXBvbiBvcmRlclwiXG4gICAgICAgIH1cbiAgICAgICAgaWNvbj17PFNob3BwaW5nQ2FydCAvPn1cbiAgICAgIC8+XG4gICAgPC9Db250YWluZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gQ291cG9uU25hcHNob3RzU2VjdGlvbih7XG4gIGRldGFpbCxcbn06IHtcbiAgZGV0YWlsOiBDb3Vwb25FbnRpdGxlbWVudERldGFpbFxufSkge1xuICBjb25zdCBlbnRpdGxlbWVudCA9IGRldGFpbC5jdXN0b21lcl9jb3Vwb25fZW50aXRsZW1lbnRcbiAgY29uc3QgaXNzdWFuY2UgPSBkZXRhaWwuY291cG9uX2lzc3VhbmNlIHx8IG51bGxcblxuICByZXR1cm4gKFxuICAgIDxDb250YWluZXIgY2xhc3NOYW1lPVwicC0wXCI+XG4gICAgICA8V2lkZ2V0SGVhZGVyIHRpdGxlPVwiSlNPTlwiIC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktMyBweC02IHBiLTZcIj5cbiAgICAgICAgPFNuYXBzaG90QmxvY2tcbiAgICAgICAgICB0aXRsZT1cIkJlbmVmaXQgc25hcHNob3RcIlxuICAgICAgICAgIHZhbHVlPXtlbnRpdGxlbWVudC5iZW5lZml0X3NuYXBzaG90fVxuICAgICAgICAvPlxuICAgICAgICA8U25hcHNob3RCbG9ja1xuICAgICAgICAgIHRpdGxlPVwiU291cmNlIHNuYXBzaG90XCJcbiAgICAgICAgICB2YWx1ZT17ZW50aXRsZW1lbnQuc291cmNlX3NuYXBzaG90fVxuICAgICAgICAvPlxuICAgICAgICA8U25hcHNob3RCbG9ja1xuICAgICAgICAgIHRpdGxlPVwiSXNzdWFuY2UgY29uZmlnIHNuYXBzaG90XCJcbiAgICAgICAgICB2YWx1ZT17aXNzdWFuY2U/LmNvbmZpZ19zbmFwc2hvdH1cbiAgICAgICAgLz5cbiAgICAgICAgPFNuYXBzaG90QmxvY2sgdGl0bGU9XCJTZWxsZXIgdGFyZ2V0c1wiIHZhbHVlPXtlbnRpdGxlbWVudC5zZWxsZXJfdGFyZ2V0c30gLz5cbiAgICAgICAgPFNuYXBzaG90QmxvY2sgdGl0bGU9XCJNZXRhZGF0YVwiIHZhbHVlPXtlbnRpdGxlbWVudC5tZXRhZGF0YX0gLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvQ29udGFpbmVyPlxuICApXG59XG5cbmZ1bmN0aW9uIENvdXBvblN1bW1hcnlTZWN0aW9ucyh7XG4gIGRldGFpbCxcbn06IHtcbiAgZGV0YWlsOiBDb3Vwb25FbnRpdGxlbWVudERldGFpbFxufSkge1xuICBjb25zdCBlbnRpdGxlbWVudCA9IGRldGFpbC5jdXN0b21lcl9jb3Vwb25fZW50aXRsZW1lbnRcbiAgY29uc3QgaXNzdWFuY2UgPSBkZXRhaWwuY291cG9uX2lzc3VhbmNlIHx8IG51bGxcbiAgY29uc3QgYmVuZWZpdFNuYXBzaG90ID0gZW50aXRsZW1lbnQuYmVuZWZpdF9zbmFwc2hvdCB8fCBudWxsXG4gIGNvbnN0IHNvdXJjZVNuYXBzaG90ID0gZW50aXRsZW1lbnQuc291cmNlX3NuYXBzaG90IHx8IG51bGxcbiAgY29uc3Qgb3JkZXIgPSBkZXRhaWwub3JkZXIgfHwgbnVsbFxuICBjb25zdCBsaW5lVG90YWwgPSBzbmFwc2hvdE51bWJlcihzb3VyY2VTbmFwc2hvdCwgXCJ0b3RhbFwiKVxuICBjb25zdCBleHRlcm5hbCA9IGVudGl0bGVtZW50Lm9yaWdpbiA9PT0gXCJleHRlcm5hbFwiXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFN1bW1hcnlXaWRnZXRcbiAgICAgICAgbGFiZWw9XCJCZW5lZml0XCJcbiAgICAgICAgdmFsdWU9e2JlbmVmaXRTbmFwc2hvdExhYmVsKGJlbmVmaXRTbmFwc2hvdCl9XG4gICAgICAvPlxuICAgICAgeyFleHRlcm5hbCAmJiAoXG4gICAgICAgIDxTdW1tYXJ5V2lkZ2V0XG4gICAgICAgICAgbGFiZWw9XCJMaW5lIFRvdGFsXCJcbiAgICAgICAgICB2YWx1ZT17Zm9ybWF0U25hcHNob3RBbW91bnQobGluZVRvdGFsLCBvcmRlcj8uY3VycmVuY3lfY29kZSl9XG4gICAgICAgICAgdG9uZT1cIm5ldXRyYWxcIlxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHshZXh0ZXJuYWwgJiYgKFxuICAgICAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cImRpdmlkZS15IHAtMFwiPlxuICAgICAgICAgIDxXaWRnZXRIZWFkZXIgdGl0bGU9XCJDYW1wYWlnblwiIC8+XG4gICAgICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJDYW1wYWlnblwiIHZhbHVlPXtjYW1wYWlnblNuYXBzaG90TGFiZWwoYmVuZWZpdFNuYXBzaG90KX0gLz5cbiAgICAgICAgICA8U2VjdGlvblJvdyB0aXRsZT1cIlByb21vdGlvblwiIHZhbHVlPXtwcm9tb3Rpb25TbmFwc2hvdExhYmVsKGJlbmVmaXRTbmFwc2hvdCl9IC8+XG4gICAgICAgICAgPFNlY3Rpb25Sb3dcbiAgICAgICAgICAgIHRpdGxlPVwiUHJvbW90aW9uIHN0YXR1c1wiXG4gICAgICAgICAgICB2YWx1ZT17c25hcHNob3RTdHJpbmcoYmVuZWZpdFNuYXBzaG90LCBcInByb21vdGlvbl9zdGF0dXNcIikgfHwgXCItXCJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Db250YWluZXI+XG4gICAgICApfVxuICAgICAgeyFleHRlcm5hbCAmJiAoXG4gICAgICAgIDxDb250YWluZXIgY2xhc3NOYW1lPVwiZGl2aWRlLXkgcC0wXCI+XG4gICAgICAgICAgPFdpZGdldEhlYWRlciB0aXRsZT1cIklzc3VhbmNlXCIgLz5cbiAgICAgICAgICA8U2VjdGlvblJvdyB0aXRsZT1cIlN0YXR1c1wiIHZhbHVlPXtpc3N1YW5jZT8uc3RhdHVzIHx8IFwiLVwifSAvPlxuICAgICAgICAgIDxTZWN0aW9uUm93XG4gICAgICAgICAgICB0aXRsZT1cIklzc3VlZCAvIGZhaWxlZFwiXG4gICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgIGlzc3VhbmNlXG4gICAgICAgICAgICAgICAgPyBgJHtpc3N1YW5jZS5pc3N1ZWRfY291bnQgPz8gMH0gLyAke2lzc3VhbmNlLmZhaWxlZF9jb3VudCA/PyAwfWBcbiAgICAgICAgICAgICAgICA6IFwiLVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8U2VjdGlvblJvdyB0aXRsZT1cIkNvbmZpZ1wiIHZhbHVlPXtlbnRpdGxlbWVudC5jb25maWdfaWQgfHwgXCItXCJ9IC8+XG4gICAgICAgICAgPFNlY3Rpb25Sb3dcbiAgICAgICAgICAgIHRpdGxlPVwiVmFyaWFudCBjb25maWdcIlxuICAgICAgICAgICAgdmFsdWU9e2VudGl0bGVtZW50LnZhcmlhbnRfY29uZmlnX2lkIHx8IFwiLVwifVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvQ29udGFpbmVyPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ291cG9uRGV0YWlsUGFnZVZpZXcoeyBhcGlCYXNlIH06IHsgYXBpQmFzZTogQXBpQmFzZSB9KSB7XG4gIGNvbnN0IGlkID0gY3VycmVudENvdXBvbkRldGFpbElkKGFwaUJhc2UpXG4gIGNvbnN0IFtkZXRhaWwsIHNldERldGFpbF0gPSB1c2VTdGF0ZTxDb3Vwb25FbnRpdGxlbWVudERldGFpbCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpXG4gIGNvbnN0IFtsb2FkRXJyb3IsIHNldExvYWRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGFjdGl2ZSA9IHRydWVcbiAgICBhc3luYyBmdW5jdGlvbiBsb2FkKCkge1xuICAgICAgaWYgKCFpZCkge1xuICAgICAgICBzZXRMb2FkRXJyb3IoXCJNaXNzaW5nIGNvdXBvbiBpZFwiKVxuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgc2V0TG9hZEVycm9yKG51bGwpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBhcGlGZXRjaDxDb3Vwb25FbnRpdGxlbWVudERldGFpbD4oXG4gICAgICAgICAgYCR7YXBpQmFzZX0vY291cG9uLXByb2R1Y3RzL2VudGl0bGVtZW50cy8ke2VuY29kZVVSSUNvbXBvbmVudChpZCl9YCxcbiAgICAgICAgKVxuICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgc2V0RGV0YWlsKHBheWxvYWQpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgID8gZXJyb3IubWVzc2FnZVxuICAgICAgICAgICAgOiBcIkZhaWxlZCB0byBsb2FkIGNvdXBvbiBkZXRhaWxzXCJcbiAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgIHNldExvYWRFcnJvcihtZXNzYWdlKVxuICAgICAgICAgIHRvYXN0LmVycm9yKG1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdm9pZCBsb2FkKClcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBhY3RpdmUgPSBmYWxzZVxuICAgIH1cbiAgfSwgW2FwaUJhc2UsIGlkXSlcblxuICBpZiAobG9hZGluZykge1xuICAgIHJldHVybiA8Q291cG9uRW1wdHlTdGF0ZSB0aXRsZT1cIkxvYWRpbmcgY291cG9uXCIgLz5cbiAgfVxuXG4gIGlmIChsb2FkRXJyb3IpIHtcbiAgICByZXR1cm4gPENvdXBvbkVtcHR5U3RhdGUgdGl0bGU9e2xvYWRFcnJvcn0gLz5cbiAgfVxuXG4gIGlmICghZGV0YWlsKSB7XG4gICAgcmV0dXJuIDxDb3Vwb25FbXB0eVN0YXRlIHRpdGxlPVwiQ291cG9uIG5vdCBmb3VuZFwiIC8+XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxUd29Db2x1bW5MYXlvdXRcbiAgICAgIGZpcnN0Q29sPXtcbiAgICAgICAgPD5cbiAgICAgICAgICA8Q291cG9uR2VuZXJhbFNlY3Rpb24gZGV0YWlsPXtkZXRhaWx9IC8+XG4gICAgICAgICAgPFJlbGF0ZWRPcmRlclNlY3Rpb24gYXBpQmFzZT17YXBpQmFzZX0gZGV0YWlsPXtkZXRhaWx9IC8+XG4gICAgICAgICAgPENvdXBvblNuYXBzaG90c1NlY3Rpb24gZGV0YWlsPXtkZXRhaWx9IC8+XG4gICAgICAgIDwvPlxuICAgICAgfVxuICAgICAgc2Vjb25kQ29sPXs8Q291cG9uU3VtbWFyeVNlY3Rpb25zIGRldGFpbD17ZGV0YWlsfSAvPn1cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIEVudGl0bGVtZW50c1RhYmxlKHtcbiAgZW50aXRsZW1lbnRzLFxuICBsb2FkaW5nLFxuICBlcnJvcixcbiAgb25PcGVuLFxufToge1xuICBlbnRpdGxlbWVudHM6IENvdXBvbkVudGl0bGVtZW50W11cbiAgbG9hZGluZzogYm9vbGVhblxuICBlcnJvcjogc3RyaW5nIHwgbnVsbFxuICBvbk9wZW46IChlbnRpdGxlbWVudDogQ291cG9uRW50aXRsZW1lbnQpID0+IHZvaWRcbn0pIHtcbiAgaWYgKGxvYWRpbmcpIHtcbiAgICByZXR1cm4gPENvdXBvbkVtcHR5U3RhdGUgdGl0bGU9XCJMb2FkaW5nIGNvdXBvbnNcIiAvPlxuICB9XG4gIGlmIChlcnJvcikge1xuICAgIHJldHVybiA8Q291cG9uRW1wdHlTdGF0ZSB0aXRsZT17ZXJyb3J9IC8+XG4gIH1cbiAgaWYgKCFlbnRpdGxlbWVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDb3Vwb25FbXB0eVN0YXRlXG4gICAgICAgIHRpdGxlPVwiTm8gY291cG9ucyBmb3VuZFwiXG4gICAgICAgIGRlc2NyaXB0aW9uPVwiUHVyY2hhc2VkIGNvdXBvbnMgd2lsbCBhcHBlYXIgaGVyZSBhZnRlciB0aGV5IGFyZSBpc3N1ZWQuXCJcbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8VGFibGU+XG4gICAgICA8VGFibGUuSGVhZGVyPlxuICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlN0YXR1czwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5Db2RlPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkRhdGUgaXNzdWVkPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPk9yZGVyPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkN1c3RvbWVyPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPk9yaWdpbjwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5TZWxsZXIgc2NvcGU8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+U291cmNlPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkV4cGlyZXM8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgPC9UYWJsZS5IZWFkZXI+XG4gICAgICA8VGFibGUuQm9keT5cbiAgICAgICAge2VudGl0bGVtZW50cy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICA8VGFibGUuUm93XG4gICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy11aS1iZy1zdWJ0bGVcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25PcGVuKGl0ZW0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8U3RhdHVzQmFkZ2UgY29sb3I9e2VudGl0bGVtZW50U3RhdHVzQ29sb3IoaXRlbS5zdGF0dXMpfT5cbiAgICAgICAgICAgICAgICB7aXRlbS5zdGF0dXN9XG4gICAgICAgICAgICAgIDwvU3RhdHVzQmFkZ2U+XG4gICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICA8VGFibGUuQ2VsbD57aXRlbS5jb2RlIHx8IGl0ZW0uc2hhcmVkX2NvZGUgfHwgXCItXCJ9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkNlbGwgdGl0bGU9e2Zvcm1hdEZ1bGxEYXRlKGl0ZW0uY3JlYXRlZF9hdCl9PlxuICAgICAgICAgICAgICB7Zm9ybWF0UmVsYXRpdmVEYXRlKGl0ZW0uY3JlYXRlZF9hdCl9XG4gICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICA8VGFibGUuQ2VsbD57aXRlbS5vcmRlcl9pZCB8fCBcIi1cIn08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICA8VGFibGUuQ2VsbD57aXRlbS5lbWFpbCB8fCBpdGVtLmN1c3RvbWVyX2lkIHx8IFwiLVwifTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgIDxUYWJsZS5DZWxsPntlbnRpdGxlbWVudFNvdXJjZShpdGVtKX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICA8VGFibGUuQ2VsbD57ZW50aXRsZW1lbnRTZWxsZXJTY29wZShpdGVtKX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAge3NuYXBzaG90U3RyaW5nKGl0ZW0uc291cmNlX3NuYXBzaG90LCBcInRpdGxlXCIpIHx8XG4gICAgICAgICAgICAgICAgc25hcHNob3RTdHJpbmcoaXRlbS5zb3VyY2Vfc25hcHNob3QsIFwic291cmNlXCIpIHx8XG4gICAgICAgICAgICAgICAgaXRlbS5wcm9kdWN0X2lkIHx8XG4gICAgICAgICAgICAgICAgXCJFeHRlcm5hbFwifVxuICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2Zvcm1hdERhdGUoaXRlbS5leHBpcmVzX2F0KX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICkpfVxuICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgIDwvVGFibGU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvdXBvbnNQYWdlVmlldyh7XG4gIGFwaUJhc2UsXG4gIHRpdGxlLFxufToge1xuICBhcGlCYXNlOiBBcGlCYXNlXG4gIHRpdGxlOiBzdHJpbmdcbn0pIHtcbiAgY29uc3QgW2VudGl0bGVtZW50cywgc2V0RW50aXRsZW1lbnRzXSA9IHVzZVN0YXRlPENvdXBvbkVudGl0bGVtZW50W10+KFtdKVxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKVxuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2ZpbHRlciwgc2V0RmlsdGVyXSA9IHVzZVN0YXRlPEVudGl0bGVtZW50RmlsdGVyPihcImFsbFwiKVxuXG4gIGNvbnN0IGxvYWQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0TG9hZGluZyh0cnVlKVxuICAgIHNldExvYWRFcnJvcihudWxsKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgYXBpRmV0Y2g8e1xuICAgICAgICBjdXN0b21lcl9jb3Vwb25fZW50aXRsZW1lbnRzOiBDb3Vwb25FbnRpdGxlbWVudFtdXG4gICAgICB9PihgJHthcGlCYXNlfS9jb3Vwb24tcHJvZHVjdHMvZW50aXRsZW1lbnRzYClcbiAgICAgIHNldEVudGl0bGVtZW50cyhwYXlsb2FkLmN1c3RvbWVyX2NvdXBvbl9lbnRpdGxlbWVudHMgfHwgW10pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiRmFpbGVkIHRvIGxvYWQgY291cG9uc1wiXG4gICAgICBzZXRMb2FkRXJyb3IobWVzc2FnZSlcbiAgICAgIHRvYXN0LmVycm9yKG1lc3NhZ2UpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgfVxuICB9LCBbYXBpQmFzZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB2b2lkIGxvYWQoKVxuICB9LCBbbG9hZF0pXG5cbiAgY29uc3Qgb3BlbkRldGFpbCA9IHVzZUNhbGxiYWNrKFxuICAgIChlbnRpdGxlbWVudDogQ291cG9uRW50aXRsZW1lbnQpID0+IHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oY291cG9uRGV0YWlsUGF0aChhcGlCYXNlLCBlbnRpdGxlbWVudC5pZCkpXG4gICAgfSxcbiAgICBbYXBpQmFzZV0sXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxDb250YWluZXIgY2xhc3NOYW1lPVwiZGl2aWRlLXkgcC0wXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC02IHB5LTRcIj5cbiAgICAgICAgPEhlYWRpbmcgbGV2ZWw9XCJoMVwiPnt0aXRsZX08L0hlYWRpbmc+XG4gICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cInNlY29uZGFyeVwiIG9uQ2xpY2s9eygpID0+IHZvaWQgbG9hZCgpfT5cbiAgICAgICAgICA8QXJyb3dQYXRoIC8+XG4gICAgICAgICAgUmVmcmVzaFxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPFRhYnNcbiAgICAgICAgdmFsdWU9e2ZpbHRlcn1cbiAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PiBzZXRGaWx0ZXIodmFsdWUgYXMgRW50aXRsZW1lbnRGaWx0ZXIpfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB4LTYgcHktMiBib3JkZXItYlwiPlxuICAgICAgICAgIDxUYWJzLkxpc3Q+XG4gICAgICAgICAgICB7ZW50aXRsZW1lbnRGaWx0ZXJzLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgICAgICA8VGFicy5UcmlnZ2VyIGtleT17aXRlbS52YWx1ZX0gdmFsdWU9e2l0ZW0udmFsdWV9PlxuICAgICAgICAgICAgICAgIHtpdGVtLmxhYmVsfVxuICAgICAgICAgICAgICA8L1RhYnMuVHJpZ2dlcj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvVGFicy5MaXN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2VudGl0bGVtZW50RmlsdGVycy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICA8VGFicy5Db250ZW50IGtleT17aXRlbS52YWx1ZX0gdmFsdWU9e2l0ZW0udmFsdWV9PlxuICAgICAgICAgICAgPEVudGl0bGVtZW50c1RhYmxlXG4gICAgICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgICAgICAgIGVycm9yPXtsb2FkRXJyb3J9XG4gICAgICAgICAgICAgIG9uT3Blbj17b3BlbkRldGFpbH1cbiAgICAgICAgICAgICAgZW50aXRsZW1lbnRzPXtcbiAgICAgICAgICAgICAgICBpdGVtLnZhbHVlID09PSBcImFsbFwiXG4gICAgICAgICAgICAgICAgICA/IGVudGl0bGVtZW50c1xuICAgICAgICAgICAgICAgICAgOiBlbnRpdGxlbWVudHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgIChlbnRpdGxlbWVudCkgPT4gZW50aXRsZW1lbnQuc3RhdHVzID09PSBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9UYWJzLkNvbnRlbnQ+XG4gICAgICAgICkpfVxuICAgICAgPC9UYWJzPlxuICAgIDwvQ29udGFpbmVyPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb3Vwb25Qcm9kdWN0c1BhZ2VWaWV3KHtcbiAgYXBpQmFzZSxcbiAgdGl0bGUsXG4gIGFsbG93UHJvbW90aW9uTWlycm9yID0gZmFsc2UsXG59OiB7XG4gIGFwaUJhc2U6IEFwaUJhc2VcbiAgdGl0bGU6IHN0cmluZ1xuICBhbGxvd1Byb21vdGlvbk1pcnJvcj86IGJvb2xlYW5cbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8Q291cG9uUHJvZHVjdHNQYWdlXG4gICAgICBhcGlCYXNlPXthcGlCYXNlfVxuICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgYWxsb3dQcm9tb3Rpb25NaXJyb3I9e2FsbG93UHJvbW90aW9uTWlycm9yfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gTGVnYWN5Q291cG9uUHJvZHVjdHNQYWdlVmlldyh7XG4gIGFwaUJhc2UsXG4gIHRpdGxlLFxuICBhbGxvd1Byb21vdGlvbk1pcnJvciA9IGZhbHNlLFxufToge1xuICBhcGlCYXNlOiBBcGlCYXNlXG4gIHRpdGxlOiBzdHJpbmdcbiAgYWxsb3dQcm9tb3Rpb25NaXJyb3I/OiBib29sZWFuXG59KSB7XG4gIGNvbnN0IFtwcm9kdWN0cywgc2V0UHJvZHVjdHNdID0gdXNlU3RhdGU8Q291cG9uUHJvZHVjdFJvd1tdPihbXSlcbiAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gdXNlU3RhdGU8T3B0aW9uc1BheWxvYWQ+KHt9KVxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKVxuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW21vZGFsT3Blbiwgc2V0TW9kYWxPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2F2aW5nLCBzZXRTYXZpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFthY3RpdmVTdGVwLCBzZXRBY3RpdmVTdGVwXSA9IHVzZVN0YXRlPFdpemFyZFN0ZXA+KFwiZGV0YWlsc1wiKVxuICBjb25zdCBbcHJvZHVjdEZvcm0sIHNldFByb2R1Y3RGb3JtXSA9IHVzZVN0YXRlPFByb2R1Y3RGb3JtU3RhdGU+KGVtcHR5UHJvZHVjdClcbiAgY29uc3QgW2NvdXBvbkZvcm0sIHNldENvdXBvbkZvcm1dID0gdXNlU3RhdGU8Q291cG9uRm9ybVN0YXRlPihlbXB0eUNvdXBvbilcbiAgY29uc3QgW2NhbXBhaWduRm9ybSwgc2V0Q2FtcGFpZ25Gb3JtXSA9XG4gICAgdXNlU3RhdGU8Q2FtcGFpZ25Gb3JtU3RhdGU+KGVtcHR5Q2FtcGFpZ24pXG4gIGNvbnN0IHByb21wdCA9IHVzZVByb21wdCgpXG5cbiAgY29uc3QgY291cG9uQmFzZSA9IGAke2FwaUJhc2V9L2NvdXBvbi1wcm9kdWN0c2BcblxuICBjb25zdCBsb2FkID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICBzZXRMb2FkRXJyb3IobnVsbClcbiAgICB0cnkge1xuICAgICAgY29uc3QgW3Byb2R1Y3RzUGF5bG9hZCwgb3B0aW9uc1BheWxvYWRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBhcGlGZXRjaDx7IGNvdXBvbl9wcm9kdWN0czogQ291cG9uUHJvZHVjdFJvd1tdIH0+KGNvdXBvbkJhc2UpLFxuICAgICAgICBhcGlGZXRjaDxPcHRpb25zUGF5bG9hZD4oYCR7Y291cG9uQmFzZX0vb3B0aW9uc2ApLFxuICAgICAgXSlcbiAgICAgIHNldFByb2R1Y3RzKHByb2R1Y3RzUGF5bG9hZC5jb3Vwb25fcHJvZHVjdHMgfHwgW10pXG4gICAgICBzZXRPcHRpb25zKG9wdGlvbnNQYXlsb2FkIHx8IHt9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgID8gZXJyb3IubWVzc2FnZVxuICAgICAgICAgIDogXCJGYWlsZWQgdG8gbG9hZCBjb3Vwb24gcHJvZHVjdHNcIlxuICAgICAgc2V0TG9hZEVycm9yKG1lc3NhZ2UpXG4gICAgICB0b2FzdC5lcnJvcihtZXNzYWdlKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfSwgW2NvdXBvbkJhc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdm9pZCBsb2FkKClcbiAgfSwgW2xvYWRdKVxuXG4gIGNvbnN0IG9wdGlvbkRlZmF1bHRzID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgc2FsZXNfY2hhbm5lbF9pZDogb3B0aW9ucy5zYWxlc19jaGFubmVscz8uWzBdPy5pZCB8fCBcIlwiLFxuICAgICAgY3VycmVuY3lfY29kZTpcbiAgICAgICAgb3B0aW9ucy5jdXJyZW5jaWVzPy5maW5kKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuaXNfZGVmYXVsdCk/LmNvZGUgfHxcbiAgICAgICAgb3B0aW9ucy5jdXJyZW5jaWVzPy5bMF0/LmNvZGUgfHxcbiAgICAgICAgXCJcIixcbiAgICB9KSxcbiAgICBbb3B0aW9uc10sXG4gIClcblxuICBjb25zdCBjdXJyZW5jaWVzID0gb3B0aW9ucy5jdXJyZW5jaWVzIHx8IFtdXG4gIGNvbnN0IHN1cHBvcnRlZEN1cnJlbmN5Q29kZXMgPSB1c2VNZW1vKFxuICAgICgpID0+IG5ldyBTZXQoY3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiBjdXJyZW5jeS5jb2RlKSksXG4gICAgW2N1cnJlbmNpZXNdLFxuICApXG5cbiAgY29uc3QgdXBkYXRlUHJvZHVjdCA9XG4gICAgKGZpZWxkOiBrZXlvZiBQcm9kdWN0Rm9ybVN0YXRlKSA9PlxuICAgIChldmVudDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgW2ZpZWxkXTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgfSkpXG4gICAgfVxuXG4gIGNvbnN0IHVwZGF0ZUNvdXBvbiA9XG4gICAgKGZpZWxkOiBrZXlvZiBDb3Vwb25Gb3JtU3RhdGUpID0+XG4gICAgKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgW2ZpZWxkXTogZXZlbnQudGFyZ2V0LnZhbHVlIH0pKVxuICAgIH1cblxuICBjb25zdCB1cGRhdGVDYW1wYWlnbiA9XG4gICAgKGZpZWxkOiBrZXlvZiBDYW1wYWlnbkZvcm1TdGF0ZSkgPT5cbiAgICAoZXZlbnQ6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBzZXRDYW1wYWlnbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgIFtmaWVsZF06IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgIH0pKVxuICAgIH1cblxuICBmdW5jdGlvbiBvcGVuQ3JlYXRlKCkge1xuICAgIGNvbnN0IGN1cnJlbmN5Q29kZSA9IG9wdGlvbkRlZmF1bHRzLmN1cnJlbmN5X2NvZGVcbiAgICBzZXRQcm9kdWN0Rm9ybSh7XG4gICAgICAuLi5lbXB0eVByb2R1Y3QsXG4gICAgICAuLi5vcHRpb25EZWZhdWx0cyxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5lbXB0eVZhcmlhbnQsXG4gICAgICAgICAgY3VycmVuY3lfY29kZTogY3VycmVuY3lDb2RlLFxuICAgICAgICAgIG92ZXJyaWRlX2N1cnJlbmN5X2NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgICBzZXRDb3Vwb25Gb3JtKHsgLi4uZW1wdHlDb3Vwb24sIGN1cnJlbmN5X2NvZGU6IGN1cnJlbmN5Q29kZSB9KVxuICAgIHNldENhbXBhaWduRm9ybShlbXB0eUNhbXBhaWduKVxuICAgIHNldEFjdGl2ZVN0ZXAoXCJkZXRhaWxzXCIpXG4gICAgc2V0TW9kYWxPcGVuKHRydWUpXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuRWRpdChyb3c6IENvdXBvblByb2R1Y3RSb3cpIHtcbiAgICBjb25zdCBmb3JtcyA9IGZvcm1Gcm9tUm93KHJvdywgb3B0aW9uRGVmYXVsdHMuY3VycmVuY3lfY29kZSlcbiAgICBzZXRQcm9kdWN0Rm9ybSh7XG4gICAgICAuLi5mb3Jtcy5wcm9kdWN0LFxuICAgICAgdmFyaWFudHM6IGZvcm1zLnByb2R1Y3QudmFyaWFudHMubGVuZ3RoXG4gICAgICAgID8gZm9ybXMucHJvZHVjdC52YXJpYW50c1xuICAgICAgICA6IFt7IC4uLmVtcHR5VmFyaWFudCB9XSxcbiAgICB9KVxuICAgIHNldENvdXBvbkZvcm0oZm9ybXMuY291cG9uKVxuICAgIHNldENhbXBhaWduRm9ybShmb3Jtcy5jYW1wYWlnbilcbiAgICBzZXRBY3RpdmVTdGVwKFwiZGV0YWlsc1wiKVxuICAgIHNldE1vZGFsT3Blbih0cnVlKVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0VmFyaWFudChpbmRleDogbnVtYmVyLCBwYXRjaDogUGFydGlhbDxWYXJpYW50Rm9ybVN0YXRlPikge1xuICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIHZhcmlhbnRzOiBjdXJyZW50LnZhcmlhbnRzLm1hcCgodmFyaWFudCwgdmFyaWFudEluZGV4KSA9PlxuICAgICAgICB2YXJpYW50SW5kZXggPT09IGluZGV4ID8geyAuLi52YXJpYW50LCAuLi5wYXRjaCB9IDogdmFyaWFudCxcbiAgICAgICksXG4gICAgfSkpXG4gIH1cblxuICBmdW5jdGlvbiBhZGRWYXJpYW50KCkge1xuICAgIGNvbnN0IGN1cnJlbmN5Q29kZSA9XG4gICAgICBjb3Vwb25Gb3JtLmN1cnJlbmN5X2NvZGUgfHwgb3B0aW9uRGVmYXVsdHMuY3VycmVuY3lfY29kZVxuICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIC4uLmN1cnJlbnQudmFyaWFudHMsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5lbXB0eVZhcmlhbnQsXG4gICAgICAgICAgY3VycmVuY3lfY29kZTogY3VycmVuY3lDb2RlLFxuICAgICAgICAgIG92ZXJyaWRlX2N1cnJlbmN5X2NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSkpXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVWYXJpYW50KGluZGV4OiBudW1iZXIpIHtcbiAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICB2YXJpYW50czogY3VycmVudC52YXJpYW50cy5maWx0ZXIoXG4gICAgICAgIChfLCB2YXJpYW50SW5kZXgpID0+IHZhcmlhbnRJbmRleCAhPT0gaW5kZXgsXG4gICAgICApLFxuICAgIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gcHJvZHVjdFBheWxvYWQoaW5jbHVkZVZhcmlhbnRzOiBib29sZWFuKSB7XG4gICAgY29uc3QgcHJvZHVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICB0aXRsZTogcHJvZHVjdEZvcm0udGl0bGUsXG4gICAgICBzdWJ0aXRsZTogcHJvZHVjdEZvcm0uc3VidGl0bGUgfHwgbnVsbCxcbiAgICAgIGhhbmRsZTogcHJvZHVjdEZvcm0uaGFuZGxlIHx8IG51bGwsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvZHVjdEZvcm0uZGVzY3JpcHRpb24gfHwgbnVsbCxcbiAgICAgIHN0YXR1czogcHJvZHVjdEZvcm0uc3RhdHVzLFxuICAgICAgdGh1bWJuYWlsOiBwcm9kdWN0Rm9ybS50aHVtYm5haWwgfHwgbnVsbCxcbiAgICAgIGRpc2NvdW50YWJsZTogcHJvZHVjdEZvcm0uZGlzY291bnRhYmxlLFxuICAgICAgdHlwZV9pZDogcHJvZHVjdEZvcm0udHlwZV9pZCB8fCBudWxsLFxuICAgICAgY29sbGVjdGlvbl9pZDogcHJvZHVjdEZvcm0uY29sbGVjdGlvbl9pZCB8fCBudWxsLFxuICAgICAgY2F0ZWdvcmllczogcHJvZHVjdEZvcm0uY2F0ZWdvcnlfaWRcbiAgICAgICAgPyBbeyBpZDogcHJvZHVjdEZvcm0uY2F0ZWdvcnlfaWQgfV1cbiAgICAgICAgOiBbXSxcbiAgICAgIHRhZ3M6IHByb2R1Y3RGb3JtLnRhZ19pZCA/IFt7IGlkOiBwcm9kdWN0Rm9ybS50YWdfaWQgfV0gOiBbXSxcbiAgICAgIHNhbGVzX2NoYW5uZWxzOiBwcm9kdWN0Rm9ybS5zYWxlc19jaGFubmVsX2lkXG4gICAgICAgID8gW3sgaWQ6IHByb2R1Y3RGb3JtLnNhbGVzX2NoYW5uZWxfaWQgfV1cbiAgICAgICAgOiBbXSxcbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZVZhcmlhbnRzKSB7XG4gICAgICBwcm9kdWN0LnZhcmlhbnRzID0gcHJvZHVjdEZvcm0udmFyaWFudHMubWFwKCh2YXJpYW50KSA9PiAoe1xuICAgICAgICB0aXRsZTogdmFyaWFudC50aXRsZSxcbiAgICAgICAgc2t1OiB2YXJpYW50LnNrdSB8fCBudWxsLFxuICAgICAgICBtYW5hZ2VfaW52ZW50b3J5OiBmYWxzZSxcbiAgICAgICAgYWxsb3dfYmFja29yZGVyOiB0cnVlLFxuICAgICAgICBwcmljZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjdXJyZW5jeV9jb2RlOiB2YXJpYW50LmN1cnJlbmN5X2NvZGUudHJpbSgpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICBhbW91bnQ6IE51bWJlcih2YXJpYW50LmFtb3VudCkgfHwgMCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2R1Y3RcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhcmlhbnRPdmVycmlkZXMoKSB7XG4gICAgcmV0dXJuIHByb2R1Y3RGb3JtLnZhcmlhbnRzXG4gICAgICAubWFwKCh2YXJpYW50LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIXZhcmlhbnQub3ZlcnJpZGVfZW5hYmxlZCkgcmV0dXJuIG51bGxcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YXJpYW50X2luZGV4OiBpbmRleCxcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIGJlbmVmaXRfdHlwZTogdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUsXG4gICAgICAgICAgYW1vdW50OlxuICAgICAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCJcbiAgICAgICAgICAgICAgPyBudW1iZXJPck51bGwodmFyaWFudC5vdmVycmlkZV9hbW91bnQpXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBwZXJjZW50YWdlOlxuICAgICAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgPT09IFwicGVyY2VudGFnZVwiXG4gICAgICAgICAgICAgID8gbnVtYmVyT3JOdWxsKHZhcmlhbnQub3ZlcnJpZGVfcGVyY2VudGFnZSlcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIGN1cnJlbmN5X2NvZGU6XG4gICAgICAgICAgICB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIlxuICAgICAgICAgICAgICA/IHZhcmlhbnQub3ZlcnJpZGVfY3VycmVuY3lfY29kZS50cmltKCkudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAgICAgICAgIGNvdXBvbkZvcm0uY3VycmVuY3lfY29kZVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0ZUZvcm0oKSB7XG4gICAgaWYgKCFwcm9kdWN0Rm9ybS50aXRsZS50cmltKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb2R1Y3QgdGl0bGUgaXMgcmVxdWlyZWRcIilcbiAgICB9XG4gICAgaWYgKCFwcm9kdWN0Rm9ybS5pZCAmJiAhcHJvZHVjdEZvcm0udmFyaWFudHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdCBsZWFzdCBvbmUgcHJvZHVjdCB2YXJpYW50IGlzIHJlcXVpcmVkXCIpXG4gICAgfVxuICAgIGlmICghY3VycmVuY2llcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFkZCBhIHN1cHBvcnRlZCBjdXJyZW5jeSB0byB0aGUgc3RvcmUgYmVmb3JlIGNvbnRpbnVpbmdcIilcbiAgICB9XG4gICAgaWYgKCFwcm9kdWN0Rm9ybS5pZCkge1xuICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHByb2R1Y3RGb3JtLnZhcmlhbnRzKSB7XG4gICAgICAgIGlmICghc3VwcG9ydGVkQ3VycmVuY3lDb2Rlcy5oYXModmFyaWFudC5jdXJyZW5jeV9jb2RlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VsZWN0IGFuIGF2YWlsYWJsZSBjdXJyZW5jeSBmb3IgJHt2YXJpYW50LnRpdGxlfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgY291cG9uRm9ybS5iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCIgJiZcbiAgICAgIG51bWJlck9yTnVsbChjb3Vwb25Gb3JtLmFtb3VudCkgPT0gbnVsbFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBwb3NpdGl2ZSBjb3Vwb24gYW1vdW50IGlzIHJlcXVpcmVkXCIpXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNvdXBvbkZvcm0uYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiICYmXG4gICAgICAhc3VwcG9ydGVkQ3VycmVuY3lDb2Rlcy5oYXMoY291cG9uRm9ybS5jdXJyZW5jeV9jb2RlKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0IGFuIGF2YWlsYWJsZSBjb3Vwb24gY3VycmVuY3lcIilcbiAgICB9XG4gICAgaWYgKGNvdXBvbkZvcm0uYmVuZWZpdF90eXBlID09PSBcInBlcmNlbnRhZ2VcIikge1xuICAgICAgY29uc3QgcGVyY2VudGFnZSA9IG51bWJlck9yTnVsbChjb3Vwb25Gb3JtLnBlcmNlbnRhZ2UpXG4gICAgICBpZiAocGVyY2VudGFnZSA9PSBudWxsIHx8IHBlcmNlbnRhZ2UgPiAxMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291cG9uIHBlcmNlbnRhZ2UgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwMFwiKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBjb3Vwb25Gb3JtLmNvZGVfc3RyYXRlZ3kgPT09IFwic2hhcmVkX2NvZGVcIiAmJlxuICAgICAgIWNvdXBvbkZvcm0uc2hhcmVkX2NvZGUudHJpbSgpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHNoYXJlZCBjb3Vwb24gY29kZSBpcyByZXF1aXJlZFwiKVxuICAgIH1cbiAgICBpZiAoY291cG9uRm9ybS5leHBpcmF0aW9uX3R5cGUgPT09IFwiZml4ZWRcIikge1xuICAgICAgY29uc3QgZXhwaXJhdGlvbiA9IG5ldyBEYXRlKGNvdXBvbkZvcm0uZXhwaXJhdGlvbl9kYXRlKVxuICAgICAgaWYgKCFjb3Vwb25Gb3JtLmV4cGlyYXRpb25fZGF0ZSB8fCBOdW1iZXIuaXNOYU4oZXhwaXJhdGlvbi5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgdmFsaWQgZml4ZWQgZXhwaXJhdGlvbiBkYXRlIGlzIHJlcXVpcmVkXCIpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb3Vwb25Gb3JtLmV4cGlyYXRpb25fY2FwX2F0KSB7XG4gICAgICBjb25zdCBleHBpcmF0aW9uQ2FwID0gbmV3IERhdGUoY291cG9uRm9ybS5leHBpcmF0aW9uX2NhcF9hdClcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4oZXhwaXJhdGlvbkNhcC5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgdmFsaWQgZXhwaXJhdGlvbiBjYXAgZGF0ZSBpcyByZXF1aXJlZFwiKVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgcHJvZHVjdEZvcm0udmFyaWFudHMpIHtcbiAgICAgIGlmICghdmFyaWFudC5vdmVycmlkZV9lbmFibGVkKSBjb250aW51ZVxuICAgICAgaWYgKFxuICAgICAgICB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIiAmJlxuICAgICAgICBudW1iZXJPck51bGwodmFyaWFudC5vdmVycmlkZV9hbW91bnQpID09IG51bGxcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEEgcG9zaXRpdmUgY291cG9uIGFtb3VudCBpcyByZXF1aXJlZCBmb3IgJHt2YXJpYW50LnRpdGxlfWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCIgJiZcbiAgICAgICAgIXN1cHBvcnRlZEN1cnJlbmN5Q29kZXMuaGFzKHZhcmlhbnQub3ZlcnJpZGVfY3VycmVuY3lfY29kZSlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFNlbGVjdCBhbiBhdmFpbGFibGUgY291cG9uIGN1cnJlbmN5IGZvciAke3ZhcmlhbnQudGl0bGV9YCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlID09PSBcInBlcmNlbnRhZ2VcIikge1xuICAgICAgICBjb25zdCBwZXJjZW50YWdlID0gbnVtYmVyT3JOdWxsKHZhcmlhbnQub3ZlcnJpZGVfcGVyY2VudGFnZSlcbiAgICAgICAgaWYgKHBlcmNlbnRhZ2UgPT0gbnVsbCB8fCBwZXJjZW50YWdlID4gMTAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENvdXBvbiBwZXJjZW50YWdlIGZvciAke3ZhcmlhbnQudGl0bGV9IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMDBgLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBhbGxvd1Byb21vdGlvbk1pcnJvciAmJlxuICAgICAgY2FtcGFpZ25Gb3JtLm1vZGUgPT09IFwiZXhpc3RpbmdcIiAmJlxuICAgICAgIWNhbXBhaWduRm9ybS5jYW1wYWlnbl9pZFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0IGFuIGV4aXN0aW5nIGNhbXBhaWduXCIpXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGFsbG93UHJvbW90aW9uTWlycm9yICYmXG4gICAgICBjYW1wYWlnbkZvcm0ubW9kZSA9PT0gXCJuZXdcIiAmJlxuICAgICAgKCFjYW1wYWlnbkZvcm0ubmFtZS50cmltKCkgfHwgIWNhbXBhaWduRm9ybS5jYW1wYWlnbl9pZGVudGlmaWVyLnRyaW0oKSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbXBhaWduIG5hbWUgYW5kIGlkZW50aWZpZXIgYXJlIHJlcXVpcmVkXCIpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3luY1ZhcmlhbnRPdmVycmlkZXMocHJvZHVjdElkOiBzdHJpbmcpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHByb2R1Y3RGb3JtLnZhcmlhbnRzLm1hcChhc3luYyAodmFyaWFudCkgPT4ge1xuICAgICAgICBpZiAoIXZhcmlhbnQuaWQpIHJldHVyblxuXG4gICAgICAgIGlmICghdmFyaWFudC5vdmVycmlkZV9lbmFibGVkKSB7XG4gICAgICAgICAgaWYgKHZhcmlhbnQub3ZlcnJpZGVfY29uZmlnX2lkKSB7XG4gICAgICAgICAgICBhd2FpdCBhcGlGZXRjaChgJHtjb3Vwb25CYXNlfS8ke3Byb2R1Y3RJZH0vdmFyaWFudHNgLCB7XG4gICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICB2YXJpYW50X2lkOiB2YXJpYW50LmlkLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgYXBpRmV0Y2goYCR7Y291cG9uQmFzZX0vJHtwcm9kdWN0SWR9L3ZhcmlhbnRzYCwge1xuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgdmFyaWFudF9pZDogdmFyaWFudC5pZCxcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBiZW5lZml0X3R5cGU6IHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlLFxuICAgICAgICAgICAgYW1vdW50OlxuICAgICAgICAgICAgICB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIlxuICAgICAgICAgICAgICAgID8gbnVtYmVyT3JOdWxsKHZhcmlhbnQub3ZlcnJpZGVfYW1vdW50KVxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIHBlcmNlbnRhZ2U6XG4gICAgICAgICAgICAgIHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlID09PSBcInBlcmNlbnRhZ2VcIlxuICAgICAgICAgICAgICAgID8gbnVtYmVyT3JOdWxsKHZhcmlhbnQub3ZlcnJpZGVfcGVyY2VudGFnZSlcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBjdXJyZW5jeV9jb2RlOlxuICAgICAgICAgICAgICB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIlxuICAgICAgICAgICAgICAgID8gdmFyaWFudC5vdmVycmlkZV9jdXJyZW5jeV9jb2RlLnRyaW0oKS50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgICAgICAgICAgICBjb3Vwb25Gb3JtLmN1cnJlbmN5X2NvZGUudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pXG4gICAgICB9KSxcbiAgICApXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzYXZlUHJvZHVjdCgpIHtcbiAgICBzZXRTYXZpbmcodHJ1ZSlcbiAgICB0cnkge1xuICAgICAgdmFsaWRhdGVGb3JtKClcbiAgICAgIGNvbnN0IGlzRWRpdCA9IEJvb2xlYW4ocHJvZHVjdEZvcm0uaWQpXG4gICAgICBjb25zdCBwYXRoID0gaXNFZGl0ID8gYCR7Y291cG9uQmFzZX0vJHtwcm9kdWN0Rm9ybS5pZH1gIDogY291cG9uQmFzZVxuICAgICAgY29uc3QgbWV0aG9kID0gaXNFZGl0ID8gXCJQQVRDSFwiIDogXCJQT1NUXCJcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIHByb2R1Y3Q6IHByb2R1Y3RQYXlsb2FkKCFpc0VkaXQpLFxuICAgICAgICBjb3Vwb246IGJ1aWxkQ291cG9uUGF5bG9hZChjb3Vwb25Gb3JtLCBhbGxvd1Byb21vdGlvbk1pcnJvciksXG4gICAgICAgIGNhbXBhaWduOiBidWlsZENhbXBhaWduUGF5bG9hZChjYW1wYWlnbkZvcm0sIGFsbG93UHJvbW90aW9uTWlycm9yKSxcbiAgICAgICAgc2VsbGVyX2lkOiBwcm9kdWN0Rm9ybS5zZWxsZXJfaWQgfHwgbnVsbCxcbiAgICAgICAgdmFyaWFudF9vdmVycmlkZXM6IGlzRWRpdCA/IFtdIDogdmFyaWFudE92ZXJyaWRlcygpLFxuICAgICAgfVxuXG4gICAgICBhd2FpdCBhcGlGZXRjaChwYXRoLCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXG4gICAgICB9KVxuICAgICAgaWYgKGlzRWRpdCkge1xuICAgICAgICBhd2FpdCBzeW5jVmFyaWFudE92ZXJyaWRlcyhwcm9kdWN0Rm9ybS5pZClcbiAgICAgIH1cbiAgICAgIHRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgIGlzRWRpdCA/IFwiQ291cG9uIHByb2R1Y3QgdXBkYXRlZFwiIDogXCJDb3Vwb24gcHJvZHVjdCBjcmVhdGVkXCIsXG4gICAgICApXG4gICAgICBzZXRNb2RhbE9wZW4oZmFsc2UpXG4gICAgICBhd2FpdCBsb2FkKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdG9hc3QuZXJyb3IoXG4gICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICA6IFwiRmFpbGVkIHRvIHNhdmUgY291cG9uIHByb2R1Y3RcIixcbiAgICAgIClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U2F2aW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVByb2R1Y3Qocm93OiBDb3Vwb25Qcm9kdWN0Um93KSB7XG4gICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgcHJvbXB0KHtcbiAgICAgIHRpdGxlOiBcIlJlbW92ZSBjb3Vwb24gcHJvZHVjdD9cIixcbiAgICAgIGRlc2NyaXB0aW9uOiBgVGhpcyByZW1vdmVzIGNvdXBvbiBpc3N1YW5jZSBmcm9tICR7XG4gICAgICAgIHJvdy5wcm9kdWN0LnRpdGxlIHx8IHJvdy5wcm9kdWN0LmlkXG4gICAgICB9LiBUaGUgdW5kZXJseWluZyBNZWR1c2EgcHJvZHVjdCB3aWxsIHJlbWFpbiBhdmFpbGFibGUuYCxcbiAgICAgIGNvbmZpcm1UZXh0OiBcIlJlbW92ZSBwcm9kdWN0XCIsXG4gICAgICBjYW5jZWxUZXh0OiBcIkNhbmNlbFwiLFxuICAgICAgdmFyaWFudDogXCJkYW5nZXJcIixcbiAgICB9KVxuICAgIGlmICghY29uZmlybWVkKSByZXR1cm5cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcGlGZXRjaChgJHtjb3Vwb25CYXNlfS8ke3Jvdy5wcm9kdWN0LmlkfWAsIHsgbWV0aG9kOiBcIkRFTEVURVwiIH0pXG4gICAgICB0b2FzdC5zdWNjZXNzKFwiQ291cG9uIGNvbmZpZ3VyYXRpb24gcmVtb3ZlZFwiKVxuICAgICAgYXdhaXQgbG9hZCgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRvYXN0LmVycm9yKFxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgPyBlcnJvci5tZXNzYWdlXG4gICAgICAgICAgOiBcIkZhaWxlZCB0byByZW1vdmUgY291cG9uIHByb2R1Y3RcIixcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBtaXJyb3JQcm9tb3Rpb24ocm93OiBDb3Vwb25Qcm9kdWN0Um93KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwaUZldGNoKFxuICAgICAgICBgL2FkbWluL2NvdXBvbi1wcm9kdWN0cy8ke3Jvdy5wcm9kdWN0LmlkfS9taXJyb3ItcHJvbW90aW9uYCxcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe30pLFxuICAgICAgICB9LFxuICAgICAgKVxuICAgICAgdG9hc3Quc3VjY2VzcyhcIlByb21vdGlvbiBtaXJyb3IgY3JlYXRlZFwiKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0b2FzdC5lcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiTWlycm9yIGZhaWxlZFwiKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRTdGVwSW5kZXggPSBzdGVwcy5pbmRleE9mKGFjdGl2ZVN0ZXApXG4gIGNvbnN0IGNhbkdvQmFjayA9IGN1cnJlbnRTdGVwSW5kZXggPiAwXG4gIGNvbnN0IGNhbkdvTmV4dCA9IGN1cnJlbnRTdGVwSW5kZXggPCBzdGVwcy5sZW5ndGggLSAxXG4gIGNvbnN0IHNob3dDYW1wYWlnblN0ZXAgPSBhbGxvd1Byb21vdGlvbk1pcnJvclxuICBjb25zdCB2aXNpYmxlU3RlcHMgPSBzaG93Q2FtcGFpZ25TdGVwXG4gICAgPyBzdGVwc1xuICAgIDogc3RlcHMuZmlsdGVyKChzdGVwKSA9PiBzdGVwICE9PSBcImNhbXBhaWduXCIpXG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cImRpdmlkZS15IHAtMFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNiBweS00XCI+XG4gICAgICAgIDxIZWFkaW5nIGxldmVsPVwiaDFcIj57dGl0bGV9PC9IZWFkaW5nPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC14LTJcIj5cbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKSA9PiB2b2lkIGxvYWQoKX0+XG4gICAgICAgICAgICA8QXJyb3dQYXRoIC8+XG4gICAgICAgICAgICBSZWZyZXNoXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiBvbkNsaWNrPXtvcGVuQ3JlYXRlfT5cbiAgICAgICAgICAgIDxQbHVzIC8+XG4gICAgICAgICAgICBDcmVhdGVcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICA8Q291cG9uRW1wdHlTdGF0ZSB0aXRsZT1cIkxvYWRpbmcgY291cG9uIHByb2R1Y3RzXCIgLz5cbiAgICAgICkgOiBsb2FkRXJyb3IgPyAoXG4gICAgICAgIDxDb3Vwb25FbXB0eVN0YXRlIHRpdGxlPXtsb2FkRXJyb3J9IC8+XG4gICAgICApIDogcHJvZHVjdHMubGVuZ3RoID8gKFxuICAgICAgICA8VGFibGU+XG4gICAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlByb2R1Y3Q8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlN0YXR1czwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+QmVuZWZpdDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+Q29kZTwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+Q2FtcGFpZ248L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPklzc3VlZDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGwgLz5cbiAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgIDwvVGFibGUuSGVhZGVyPlxuICAgICAgICAgIDxUYWJsZS5Cb2R5PlxuICAgICAgICAgICAge3Byb2R1Y3RzLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHJvdy5jb3Vwb25fcHJvZHVjdF9jb25maWdcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8VGFibGUuUm93IGtleT17cm93LmlkfT5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJwbHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cm93LnByb2R1Y3QudGl0bGUgfHwgcm93LnByb2R1Y3QuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtyb3cucHJvZHVjdC5oYW5kbGUgfHwgcm93LnByb2R1Y3QuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8U3RhdHVzQmFkZ2UgY29sb3I9e3Byb2R1Y3RTdGF0dXNDb2xvcihyb3cucHJvZHVjdC5zdGF0dXMpfT5cbiAgICAgICAgICAgICAgICAgICAgICB7cm93LnByb2R1Y3Quc3RhdHVzIHx8IFwiZHJhZnRcIn1cbiAgICAgICAgICAgICAgICAgICAgPC9TdGF0dXNCYWRnZT5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntiZW5lZml0TGFiZWwoY29uZmlnKX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAge2NvbmZpZy5jb2RlX3N0cmF0ZWd5ID09PSBcInNoYXJlZF9jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IGNvbmZpZy5zaGFyZWRfY29kZSB8fCBcIi1cIlxuICAgICAgICAgICAgICAgICAgICAgIDogY29uZmlnLmNvZGVfcHJlZml4IHx8IFwiQ09VUE9OXCJ9XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57Y2FtcGFpZ25MYWJlbChjb25maWcpfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntyb3cuZW50aXRsZW1lbnRzX2NvdW50IHx8IDB9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBnYXAteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAge2FsbG93UHJvbW90aW9uTWlycm9yICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgbWlycm9yUHJvbW90aW9uKHJvdyl9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE1pcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvcGVuRWRpdChyb3cpfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQZW5jaWxTcXVhcmUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRcbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIGRlbGV0ZVByb2R1Y3Qocm93KX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VHJhc2ggLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZSBjb25maWdcbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgPC9UYWJsZT5cbiAgICAgICkgOiAoXG4gICAgICAgIDxDb3Vwb25FbXB0eVN0YXRlXG4gICAgICAgICAgdGl0bGU9XCJObyBjb3Vwb24gcHJvZHVjdHMgZm91bmRcIlxuICAgICAgICAgIGRlc2NyaXB0aW9uPVwiQ3JlYXRlIGEgbmV3IGNvdXBvbiBwcm9kdWN0IHRvIGdldCBzdGFydGVkLlwiXG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICA8Rm9jdXNNb2RhbCBvcGVuPXttb2RhbE9wZW59IG9uT3BlbkNoYW5nZT17c2V0TW9kYWxPcGVufT5cbiAgICAgICAgPEZvY3VzTW9kYWwuQ29udGVudCBzdHlsZT17bW9kYWxDb250ZW50U3R5bGV9PlxuICAgICAgICAgIDxGb2N1c01vZGFsLkhlYWRlciBzdHlsZT17bW9kYWxTdGF0aWNSb3dTdHlsZX0+XG4gICAgICAgICAgICA8Rm9jdXNNb2RhbC5UaXRsZT5cbiAgICAgICAgICAgICAge3Byb2R1Y3RGb3JtLmlkID8gXCJFZGl0IENvdXBvbiBQcm9kdWN0XCIgOiBcIkNyZWF0ZSBDb3Vwb24gUHJvZHVjdFwifVxuICAgICAgICAgICAgPC9Gb2N1c01vZGFsLlRpdGxlPlxuICAgICAgICAgIDwvRm9jdXNNb2RhbC5IZWFkZXI+XG4gICAgICAgICAgPFByb2dyZXNzVGFic1xuICAgICAgICAgICAgdmFsdWU9e2FjdGl2ZVN0ZXB9XG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodmFsdWUpID0+IHNldEFjdGl2ZVN0ZXAodmFsdWUgYXMgV2l6YXJkU3RlcCl9XG4gICAgICAgICAgICBzdHlsZT17bW9kYWxXaXphcmRTdHlsZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkxpc3QgY2xhc3NOYW1lPVwiYm9yZGVyLWJcIiBzdHlsZT17bW9kYWxTdGF0aWNSb3dTdHlsZX0+XG4gICAgICAgICAgICAgIHt2aXNpYmxlU3RlcHMubWFwKChzdGVwKSA9PiAoXG4gICAgICAgICAgICAgICAgPFByb2dyZXNzVGFicy5UcmlnZ2VyXG4gICAgICAgICAgICAgICAgICBrZXk9e3N0ZXB9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17c3RlcH1cbiAgICAgICAgICAgICAgICAgIHN0YXR1cz17c3RlcFN0YXR1cyhzdGVwLCBhY3RpdmVTdGVwKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7c3RlcCA9PT0gXCJkZXRhaWxzXCJcbiAgICAgICAgICAgICAgICAgICAgPyBcIkRldGFpbHNcIlxuICAgICAgICAgICAgICAgICAgICA6IHN0ZXAgPT09IFwib3JnYW5pemVcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJPcmdhbml6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBzdGVwID09PSBcInZhcmlhbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJWYXJpYW50c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHN0ZXAgPT09IFwiY291cG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIkNvdXBvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJDYW1wYWlnblwifVxuICAgICAgICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzLlRyaWdnZXI+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuTGlzdD5cbiAgICAgICAgICAgIDxGb2N1c01vZGFsLkJvZHkgc3R5bGU9e21vZGFsQm9keVN0eWxlfT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17bW9kYWxGb3JtU3R5bGV9PlxuICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuQ29udGVudCB2YWx1ZT1cImRldGFpbHNcIiBzdHlsZT17c3RhY2tTdHlsZX0+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt0aHJlZUNvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdEZvcm0udGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlUHJvZHVjdChcInRpdGxlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdEZvcm0uc3VidGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlUHJvZHVjdChcInN1YnRpdGxlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkhhbmRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLmhhbmRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVQcm9kdWN0KFwiaGFuZGxlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJEZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxUZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZVByb2R1Y3QoXCJkZXNjcmlwdGlvblwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJNZWRpYSBVUkxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS50aHVtYm5haWx9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlUHJvZHVjdChcInRodW1ibmFpbFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuQ29udGVudD5cblxuICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuQ29udGVudCB2YWx1ZT1cIm9yZ2FuaXplXCIgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLnN0YXR1c31cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdEZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImRyYWZ0XCI+RHJhZnQ8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJwdWJsaXNoZWRcIj5QdWJsaXNoZWQ8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJwcm9wb3NlZFwiPlByb3Bvc2VkPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwicmVqZWN0ZWRcIj5SZWplY3RlZDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICB7YXBpQmFzZSA9PT0gXCIvYWRtaW5cIiAmJiAhcHJvZHVjdEZvcm0uaWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlNlbGxlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdEZvcm0uc2VsbGVyX2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnNlbGxlcnMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdEZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsbGVyX2lkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJUeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLnR5cGVfaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnByb2R1Y3RfdHlwZXMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfaWQ6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDb2xsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLmNvbGxlY3Rpb25faWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnByb2R1Y3RfY29sbGVjdGlvbnMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25faWQ6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDYXRlZ29yeVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS5jYXRlZ29yeV9pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnMucHJvZHVjdF9jYXRlZ29yaWVzIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdEZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeV9pZDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlRhZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS50YWdfaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnByb2R1Y3RfdGFncyB8fCBbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnX2lkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU2FsZXMgY2hhbm5lbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS5zYWxlc19jaGFubmVsX2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5zYWxlc19jaGFubmVscyB8fCBbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FsZXNfY2hhbm5lbF9pZDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3BhbmVsU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtyb3dCZXR3ZWVuU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJwbHVzXCI+RGlzY291bnRhYmxlPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3VudHMgY2FuIGFwcGx5IHRvIHRoaXMgcHJvZHVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Byb2R1Y3RGb3JtLmRpc2NvdW50YWJsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzY291bnRhYmxlOiBCb29sZWFuKGNoZWNrZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzLkNvbnRlbnQ+XG5cbiAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkNvbnRlbnQgdmFsdWU9XCJ2YXJpYW50c1wiIHN0eWxlPXtzdGFja1N0eWxlfT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3Jvd0JldHdlZW5TdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgIDxIZWFkaW5nIGxldmVsPVwiaDJcIj5WYXJpYW50czwvSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgeyFwcm9kdWN0Rm9ybS5pZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17YWRkVmFyaWFudH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UGx1cyAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgQWRkIHZhcmlhbnRcbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTRcIj5cbiAgICAgICAgICAgICAgICAgICAge3Byb2R1Y3RGb3JtLnZhcmlhbnRzLm1hcCgodmFyaWFudCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17YCR7dmFyaWFudC5pZCB8fCBpbmRleH1gfSBzdHlsZT17cGFuZWxTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtmb3VyQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiVGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YXJpYW50LnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e0Jvb2xlYW4ocHJvZHVjdEZvcm0uaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFyaWFudChpbmRleCwgeyB0aXRsZTogZXZlbnQudGFyZ2V0LnZhbHVlIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU0tVXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFyaWFudC5za3V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Qm9vbGVhbihwcm9kdWN0Rm9ybS5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYXJpYW50KGluZGV4LCB7IHNrdTogZXZlbnQudGFyZ2V0LnZhbHVlIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ3VycmVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q3VycmVuY3lTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmNpZXM9e2N1cnJlbmNpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFyaWFudC5jdXJyZW5jeV9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e0Jvb2xlYW4ocHJvZHVjdEZvcm0uaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhjdXJyZW5jeV9jb2RlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYXJpYW50KGluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lfY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJQcmljZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDdXJyZW5jeUFtb3VudElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jaWVzPXtjdXJyZW5jaWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lDb2RlPXt2YXJpYW50LmN1cnJlbmN5X2NvZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFyaWFudC5hbW91bnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Qm9vbGVhbihwcm9kdWN0Rm9ybS5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGFtb3VudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFyaWFudChpbmRleCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyVG9wOiBcIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IDE2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdUb3A6IDE2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtyb3dCZXR3ZWVuU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHdlaWdodD1cInBsdXNcIj5Db3Vwb24gYmVuZWZpdCBvdmVycmlkZTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXt2YXJpYW50Lm92ZXJyaWRlX2VuYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYXJpYW50KGluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVfZW5hYmxlZDogQm9vbGVhbihjaGVja2VkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3ZhcmlhbnQub3ZlcnJpZGVfZW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgLi4uZm91ckNvbHVtbkdyaWRTdHlsZSwgbWFyZ2luVG9wOiAxMiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkJlbmVmaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYXJpYW50KGluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlX2JlbmVmaXRfdHlwZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBhcyBCZW5lZml0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZml4ZWRfYW1vdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkIGFtb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cInBlcmNlbnRhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVyY2VudGFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImZyZWVfc2hpcHBpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlZSBzaGlwcGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDdXJyZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q3VycmVuY3lTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jaWVzPXtjdXJyZW5jaWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YXJpYW50Lm92ZXJyaWRlX2N1cnJlbmN5X2NvZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgIT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpeGVkX2Ftb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsob3ZlcnJpZGVfY3VycmVuY3lfY29kZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhcmlhbnQoaW5kZXgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVfY3VycmVuY3lfY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkFtb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q3VycmVuY3lBbW91bnRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmNpZXM9e2N1cnJlbmNpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lDb2RlPXt2YXJpYW50Lm92ZXJyaWRlX2N1cnJlbmN5X2NvZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhcmlhbnQub3ZlcnJpZGVfYW1vdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXhlZF9hbW91bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KG92ZXJyaWRlX2Ftb3VudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhcmlhbnQoaW5kZXgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVfYW1vdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiUGVyY2VudGFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFyaWFudC5vdmVycmlkZV9wZXJjZW50YWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwZXJjZW50YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhcmlhbnQoaW5kZXgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVfcGVyY2VudGFnZTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IXByb2R1Y3RGb3JtLmlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdEZvcm0udmFyaWFudHMubGVuZ3RoID4gMSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6IDE2IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiByZW1vdmVWYXJpYW50KGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlIHZhcmlhbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5Db250ZW50PlxuXG4gICAgICAgICAgICAgICAgPFByb2dyZXNzVGFicy5Db250ZW50IHZhbHVlPVwiY291cG9uXCIgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cGFuZWxTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3Jvd0JldHdlZW5TdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHdlaWdodD1cInBsdXNcIj5Db3Vwb24gaXNzdWFuY2U8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIElzc3VlIGNvdXBvbnMgd2hlbiBjdXN0b21lcnMgcHVyY2hhc2UgdGhpcyBwcm9kdWN0XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y291cG9uRm9ybS5lbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oY2hlY2tlZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt0d29Db2x1bW5HcmlkU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJCZW5lZml0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uYmVuZWZpdF90eXBlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb25Gb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVuZWZpdF90eXBlOiB2YWx1ZSBhcyBCZW5lZml0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJmaXhlZF9hbW91bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZCBhbW91bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwicGVyY2VudGFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmNlbnRhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZnJlZV9zaGlwcGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZWUgc2hpcHBpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIHthbGxvd1Byb21vdGlvbk1pcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiUHJvbW90aW9uIHN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5wcm9tb3Rpb25fc3RhdHVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25fc3RhdHVzOiB2YWx1ZSBhcyBQcm9tb3Rpb25TdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImRyYWZ0XCI+RHJhZnQ8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImFjdGl2ZVwiPkFjdGl2ZTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiaW5hY3RpdmVcIj5JbmFjdGl2ZTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJBbW91bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Q3VycmVuY3lBbW91bnRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY2llcz17Y3VycmVuY2llc31cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5Q29kZT17Y291cG9uRm9ybS5jdXJyZW5jeV9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2NvdXBvbkZvcm0uYmVuZWZpdF90eXBlICE9PSBcImZpeGVkX2Ftb3VudFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uYW1vdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhhbW91bnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGFtb3VudCB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJQZXJjZW50YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjb3Vwb25Gb3JtLmJlbmVmaXRfdHlwZSAhPT0gXCJwZXJjZW50YWdlXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5wZXJjZW50YWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZUNvdXBvbihcInBlcmNlbnRhZ2VcIil9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ3VycmVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Q3VycmVuY3lTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmNpZXM9e2N1cnJlbmNpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5jdXJyZW5jeV9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2NvdXBvbkZvcm0uYmVuZWZpdF90eXBlICE9PSBcImZpeGVkX2Ftb3VudFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhjdXJyZW5jeV9jb2RlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb25Gb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lfY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhwaXJhdGlvbiBwb2xpY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5leHBpcmF0aW9uX3R5cGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX3R5cGU6IHZhbHVlIGFzIEV4cGlyYXRpb25Qb2xpY3lUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImR1cmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVyYXRpb24gYWZ0ZXIgaXNzdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZml4ZWRcIj5GaXhlZCBkYXRlPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIHtjb3Vwb25Gb3JtLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJkdXJhdGlvblwiID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkV4cGlyYXRpb24gZGF5c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLmV4cGlyYXRpb25fZGF5c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZUNvdXBvbihcImV4cGlyYXRpb25fZGF5c1wiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJFeHBpcmVzIGF0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uZXhwaXJhdGlvbl9kYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlQ291cG9uKFwiZXhwaXJhdGlvbl9kYXRlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDYXAgZXhwaXJhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3Jvd0JldHdlZW5TdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIENhbXBhaWduIGVuZCBvciBjYXAgZGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjb3Vwb25Gb3JtLmV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWdufVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ246IEJvb2xlYW4oY2hlY2tlZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkV4cGlyYXRpb24gY2FwIGRhdGUgKG9wdGlvbmFsKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY291cG9uRm9ybS5leHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLmV4cGlyYXRpb25fY2FwX2F0fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZUNvdXBvbihcImV4cGlyYXRpb25fY2FwX2F0XCIpfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNvZGUgc3RyYXRlZ3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5jb2RlX3N0cmF0ZWd5fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb25Gb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9zdHJhdGVneTogdmFsdWUgYXMgQ29kZVN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cInVuaXF1ZV9jb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pcXVlIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwic2hhcmVkX2NvZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZWQgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ29kZSBwcmVmaXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjb3Vwb25Gb3JtLmNvZGVfc3RyYXRlZ3kgIT09IFwidW5pcXVlX2NvZGVcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLmNvZGVfcHJlZml4fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZUNvdXBvbihcImNvZGVfcHJlZml4XCIpfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlNoYXJlZCBjb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y291cG9uRm9ybS5jb2RlX3N0cmF0ZWd5ICE9PSBcInNoYXJlZF9jb2RlXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5zaGFyZWRfY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDb3Vwb24oXCJzaGFyZWRfY29kZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJNYXggaXNzdWFuY2UgcGVyIGl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0ubWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZUNvdXBvbihcIm1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICB7YWxsb3dQcm9tb3Rpb25NaXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlByb21vdGlvbiBtaXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0ucHJvbW90aW9uX21pcnJvcl9tb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25fbWlycm9yX21vZGU6IHZhbHVlIGFzIE1pcnJvck1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cIm5vbmVcIj5Ob25lPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJtYW51YWxcIj5NYW51YWw8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImF1dG9cIj5BdXRvPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5Db250ZW50PlxuXG4gICAgICAgICAgICAgICAge2FsbG93UHJvbW90aW9uTWlycm9yICYmIChcbiAgICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuQ29udGVudCB2YWx1ZT1cImNhbXBhaWduXCIgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt0d29Db2x1bW5HcmlkU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNhbXBhaWduXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbkZvcm0ubW9kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENhbXBhaWduRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiB2YWx1ZSBhcyBDYW1wYWlnbk1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cIm5vbmVcIj5ObyBjYW1wYWlnbjwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZXhpc3RpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4aXN0aW5nIGNhbXBhaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJuZXdcIj5OZXcgY2FtcGFpZ248L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICB7Y2FtcGFpZ25Gb3JtLm1vZGUgPT09IFwiZXhpc3RpbmdcIiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJFeGlzdGluZyBjYW1wYWlnblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduRm9ybS5jYW1wYWlnbl9pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLmNhbXBhaWducyB8fCBbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2FtcGFpZ25Gb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1wYWlnbl9pZDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAge2NhbXBhaWduRm9ybS5tb2RlID09PSBcIm5ld1wiICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIk5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbkZvcm0ubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDYW1wYWlnbihcIm5hbWVcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiSWRlbnRpZmllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduRm9ybS5jYW1wYWlnbl9pZGVudGlmaWVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZUNhbXBhaWduKFwiY2FtcGFpZ25faWRlbnRpZmllclwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJTdGFydHMgYXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2FtcGFpZ25Gb3JtLnN0YXJ0c19hdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDYW1wYWlnbihcInN0YXJ0c19hdFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJFbmRzIGF0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduRm9ybS5lbmRzX2F0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZUNhbXBhaWduKFwiZW5kc19hdFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5Db250ZW50PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9Gb2N1c01vZGFsLkJvZHk+XG4gICAgICAgICAgPC9Qcm9ncmVzc1RhYnM+XG4gICAgICAgICAgPEZvY3VzTW9kYWwuRm9vdGVyIHN0eWxlPXttb2RhbFN0YXRpY1Jvd1N0eWxlfT5cbiAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cInNlY29uZGFyeVwiIG9uQ2xpY2s9eygpID0+IHNldE1vZGFsT3BlbihmYWxzZSl9PlxuICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAge2NhbkdvQmFjayAmJiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlU3RlcCh2aXNpYmxlU3RlcHNbY3VycmVudFN0ZXBJbmRleCAtIDFdKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEJhY2tcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2NhbkdvTmV4dCAmJlxuICAgICAgICAgICAgYWN0aXZlU3RlcCAhPT0gdmlzaWJsZVN0ZXBzW3Zpc2libGVTdGVwcy5sZW5ndGggLSAxXSA/IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgICBzZXRBY3RpdmVTdGVwKHZpc2libGVTdGVwc1tjdXJyZW50U3RlcEluZGV4ICsgMV0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQ29udGludWVcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8QnV0dG9uIGlzTG9hZGluZz17c2F2aW5nfSBvbkNsaWNrPXsoKSA9PiB2b2lkIHNhdmVQcm9kdWN0KCl9PlxuICAgICAgICAgICAgICAgIFNhdmVcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvRm9jdXNNb2RhbC5Gb290ZXI+XG4gICAgICAgIDwvRm9jdXNNb2RhbC5Db250ZW50PlxuICAgICAgPC9Gb2N1c01vZGFsPlxuICAgIDwvQ29udGFpbmVyPlxuICApXG59XG5cbmZ1bmN0aW9uIE9wdGlvblNlbGVjdCh7XG4gIHZhbHVlLFxuICBvcHRpb25zLFxuICBvbkNoYW5nZSxcbn06IHtcbiAgdmFsdWU6IHN0cmluZ1xuICBvcHRpb25zOiBPcHRpb25SZWNvcmRbXVxuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0XG4gICAgICB2YWx1ZT17dmFsdWUgfHwgTk9ORX1cbiAgICAgIG9uVmFsdWVDaGFuZ2U9eyhuZXh0KSA9PiBvbkNoYW5nZShuZXh0ID09PSBOT05FID8gXCJcIiA6IG5leHQpfVxuICAgID5cbiAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgPFNlbGVjdC5WYWx1ZSAvPlxuICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPXtOT05FfT5Ob25lPC9TZWxlY3QuSXRlbT5cbiAgICAgICAge29wdGlvbnMubWFwKChvcHRpb24pID0+IChcbiAgICAgICAgICA8U2VsZWN0Lkl0ZW0ga2V5PXtvcHRpb24uaWR9IHZhbHVlPXtvcHRpb24uaWR9PlxuICAgICAgICAgICAge29wdGlvbkxhYmVsKG9wdGlvbil9XG4gICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgKSl9XG4gICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgIDwvU2VsZWN0PlxuICApXG59XG4iLCAiaW1wb3J0IHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbiAgdHlwZSBDaGFuZ2VFdmVudCxcbiAgdHlwZSBDU1NQcm9wZXJ0aWVzLFxuICB0eXBlIERyYWdFdmVudCxcbiAgdHlwZSBSZWFjdE5vZGUsXG59IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge1xuICBBZGp1c3RtZW50cyxcbiAgQXJyb3dQYXRoLFxuICBBcnJvd1VwVHJheSxcbiAgSW5mb3JtYXRpb25DaXJjbGUsXG4gIFBlbmNpbFNxdWFyZSxcbiAgUGx1cyxcbiAgVGF4RXhjbHVzaXZlLFxuICBUYXhJbmNsdXNpdmUsXG4gIFRyYXNoLFxuICBYTWFya01pbmksXG59IGZyb20gXCJAbWVkdXNhanMvaWNvbnNcIlxuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDaGVja2JveCxcbiAgQ29udGFpbmVyLFxuICBDdXJyZW5jeUlucHV0LFxuICBEaXZpZGVyLFxuICBEcm9wZG93bk1lbnUsXG4gIERyYXdlcixcbiAgRm9jdXNNb2RhbCxcbiAgSGVhZGluZyxcbiAgSW5wdXQsXG4gIExhYmVsLFxuICBQcm9ncmVzc1RhYnMsXG4gIFJhZGlvR3JvdXAsXG4gIFNlbGVjdCxcbiAgU3RhdHVzQmFkZ2UsXG4gIFN3aXRjaCxcbiAgVGFibGUsXG4gIFRleHQsXG4gIFRleHRhcmVhLFxuICBUb29sdGlwLFxuICB0b2FzdCxcbiAgdXNlUHJvbXB0LFxufSBmcm9tIFwiQG1lZHVzYWpzL3VpXCJcbmltcG9ydCB7IENvdXBvbkVtcHR5U3RhdGUgfSBmcm9tIFwiLi9lbXB0eS1zdGF0ZVwiXG5cbmRlY2xhcmUgY29uc3QgX19CQUNLRU5EX1VSTF9fOiBzdHJpbmdcblxudHlwZSBBcGlCYXNlID0gXCIvYWRtaW5cIiB8IFwiL3ZlbmRvclwiXG50eXBlIEJlbmVmaXRUeXBlID0gXCJmaXhlZF9hbW91bnRcIiB8IFwicGVyY2VudGFnZVwiIHwgXCJmcmVlX3NoaXBwaW5nXCIgfCBcImJ1eV9nZXRcIlxudHlwZSBDb3Vwb25UeXBlID1cbiAgfCBcImFtb3VudF9vZmZfcHJvZHVjdHNcIlxuICB8IFwiYW1vdW50X29mZl9vcmRlclwiXG4gIHwgXCJwZXJjZW50YWdlX29mZl9wcm9kdWN0XCJcbiAgfCBcInBlcmNlbnRhZ2Vfb2ZmX29yZGVyXCJcbiAgfCBcImJ1eV94X2dldF95XCJcbiAgfCBcImZyZWVfc2hpcHBpbmdcIlxudHlwZSBDb2RlU3RyYXRlZ3kgPSBcInVuaXF1ZV9jb2RlXCIgfCBcInNoYXJlZF9jb2RlXCJcbnR5cGUgTWlycm9yTW9kZSA9IFwibm9uZVwiIHwgXCJtYW51YWxcIiB8IFwiYXV0b1wiXG50eXBlIFByb21vdGlvblN0YXR1cyA9IFwiZHJhZnRcIiB8IFwiYWN0aXZlXCIgfCBcImluYWN0aXZlXCJcbnR5cGUgQ2FtcGFpZ25Nb2RlID0gXCJub25lXCIgfCBcImV4aXN0aW5nXCIgfCBcIm5ld1wiXG50eXBlIEV4cGlyYXRpb25Qb2xpY3lUeXBlID0gXCJub25lXCIgfCBcImR1cmF0aW9uXCIgfCBcImZpeGVkXCJcbnR5cGUgQ291cG9uQWxsb2NhdGlvbiA9IFwiZWFjaFwiIHwgXCJvbmNlXCJcbnR5cGUgV2l6YXJkU3RlcCA9IFwiZGV0YWlsc1wiIHwgXCJvcmdhbml6ZVwiIHwgXCJjYW1wYWlnblwiIHwgXCJwcmljZXNcIlxudHlwZSBQdXJjaGFzZUNvbmRpdGlvbkF0dHJpYnV0ZSA9XG4gIHwgXCJjdXN0b21lci5ncm91cHMuaWRcIlxuICB8IFwicmVnaW9uLmlkXCJcbiAgfCBcInNoaXBwaW5nX2FkZHJlc3MuY291bnRyeV9jb2RlXCJcbiAgfCBcInNhbGVzX2NoYW5uZWxfaWRcIlxuICB8IFwiY3VycmVuY3lfY29kZVwiXG50eXBlIFB1cmNoYXNlQ29uZGl0aW9uT3BlcmF0b3IgPSBcImluXCIgfCBcImVxXCIgfCBcIm5lXCJcblxudHlwZSBQdXJjaGFzZUNvbmRpdGlvbkZvcm0gPSB7XG4gIGtleTogc3RyaW5nXG4gIGF0dHJpYnV0ZTogUHVyY2hhc2VDb25kaXRpb25BdHRyaWJ1dGUgfCBcIlwiXG4gIG9wZXJhdG9yOiBQdXJjaGFzZUNvbmRpdGlvbk9wZXJhdG9yIHwgXCJcIlxuICB2YWx1ZXM6IHN0cmluZ1tdXG59XG5cbnR5cGUgT3B0aW9uUmVjb3JkID0ge1xuICBpZDogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIHRpdGxlPzogc3RyaW5nIHwgbnVsbFxuICB2YWx1ZT86IHN0cmluZyB8IG51bGxcbiAgaGFuZGxlPzogc3RyaW5nIHwgbnVsbFxuICBjYW1wYWlnbl9pZGVudGlmaWVyPzogc3RyaW5nIHwgbnVsbFxuICBkaXNwbGF5X25hbWU/OiBzdHJpbmcgfCBudWxsXG4gIGlzb18yPzogc3RyaW5nIHwgbnVsbFxufVxuXG50eXBlIEN1cnJlbmN5T3B0aW9uID0ge1xuICBjb2RlOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHN5bWJvbDogc3RyaW5nXG4gIHN5bWJvbF9uYXRpdmU6IHN0cmluZ1xuICBpc19kZWZhdWx0OiBib29sZWFuXG4gIGlzX3RheF9pbmNsdXNpdmU/OiBib29sZWFuXG59XG5cbnR5cGUgT3B0aW9uc1BheWxvYWQgPSB7XG4gIGN1cnJlbmNpZXM/OiBDdXJyZW5jeU9wdGlvbltdXG4gIHByb2R1Y3RfdHlwZXM/OiBPcHRpb25SZWNvcmRbXVxuICBwcm9kdWN0X2NvbGxlY3Rpb25zPzogT3B0aW9uUmVjb3JkW11cbiAgcHJvZHVjdF9jYXRlZ29yaWVzPzogT3B0aW9uUmVjb3JkW11cbiAgcHJvZHVjdF90YWdzPzogT3B0aW9uUmVjb3JkW11cbiAgc2FsZXNfY2hhbm5lbHM/OiBPcHRpb25SZWNvcmRbXVxuICBzaGlwcGluZ19wcm9maWxlcz86IE9wdGlvblJlY29yZFtdXG4gIGNhbXBhaWducz86IE9wdGlvblJlY29yZFtdXG4gIHNlbGxlcnM/OiBPcHRpb25SZWNvcmRbXVxuICBjdXN0b21lcl9ncm91cHM/OiBPcHRpb25SZWNvcmRbXVxuICByZWdpb25zPzogT3B0aW9uUmVjb3JkW11cbiAgY291bnRyaWVzPzogT3B0aW9uUmVjb3JkW11cbn1cblxudHlwZSBDb3Vwb25Qcm9kdWN0Q29uZmlnID0ge1xuICBpZDogc3RyaW5nXG4gIGVuYWJsZWQ6IGJvb2xlYW5cbiAgcHJvZHVjdF9pZDogc3RyaW5nXG4gIGJlbmVmaXRfdHlwZTogQmVuZWZpdFR5cGVcbiAgcHVyY2hhc2VfY29uZGl0aW9ucz86IEFycmF5PHtcbiAgICBhdHRyaWJ1dGU6IFB1cmNoYXNlQ29uZGl0aW9uQXR0cmlidXRlXG4gICAgb3BlcmF0b3I6IFB1cmNoYXNlQ29uZGl0aW9uT3BlcmF0b3JcbiAgICB2YWx1ZXM6IHN0cmluZ1tdXG4gIH0+IHwgbnVsbFxuICBhbW91bnRzPzogeyBjdXJyZW5jeV9jb2RlOiBzdHJpbmc7IGFtb3VudDogbnVtYmVyIH1bXSB8IG51bGxcbiAgYW1vdW50OiBudW1iZXIgfCBudWxsXG4gIHBlcmNlbnRhZ2U6IG51bWJlciB8IG51bGxcbiAgY3VycmVuY3lfY29kZTogc3RyaW5nIHwgbnVsbFxuICBjb2RlX3N0cmF0ZWd5OiBDb2RlU3RyYXRlZ3lcbiAgY29kZV9wcmVmaXg6IHN0cmluZyB8IG51bGxcbiAgc2hhcmVkX2NvZGU6IHN0cmluZyB8IG51bGxcbiAgZXhwaXJhdGlvbl9wb2xpY3k6XG4gIHwgeyB0eXBlOiBcIm5vbmVcIiB9XG4gIHwge1xuICAgIHR5cGU6IFwiZHVyYXRpb25cIlxuICAgIGR1cmF0aW9uX2RheXM6IG51bWJlclxuICAgIGNhcF9ieV9jYW1wYWlnbj86IGJvb2xlYW5cbiAgICBjYXBfYXQ/OiBzdHJpbmcgfCBudWxsXG4gIH1cbiAgfCB7XG4gICAgdHlwZTogXCJmaXhlZFwiXG4gICAgZXhwaXJlc19hdDogc3RyaW5nXG4gICAgY2FwX2J5X2NhbXBhaWduPzogYm9vbGVhblxuICAgIGNhcF9hdD86IHN0cmluZyB8IG51bGxcbiAgfVxuICBtYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW06IG51bWJlclxuICBwcm9tb3Rpb25fbWlycm9yX21vZGU6IE1pcnJvck1vZGVcbiAgcHJvbW90aW9uX3N0YXR1cz86IFByb21vdGlvblN0YXR1cyB8IG51bGxcbiAgcHJvbW90aW9uX3RlbXBsYXRlPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGxcbiAgY2FtcGFpZ25faWQ/OiBzdHJpbmcgfCBudWxsXG4gIGNhbXBhaWduX3NuYXBzaG90PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsXG59XG5cbnR5cGUgUHJvZHVjdFJlY29yZCA9IHtcbiAgaWQ6IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nIHwgbnVsbFxuICBzdWJ0aXRsZT86IHN0cmluZyB8IG51bGxcbiAgaGFuZGxlOiBzdHJpbmcgfCBudWxsXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVsbFxuICBzdGF0dXM6IHN0cmluZyB8IG51bGxcbiAgdGh1bWJuYWlsOiBzdHJpbmcgfCBudWxsXG4gIHRodW1ibmFpbF9hc3NldF9pZD86IHN0cmluZyB8IG51bGxcbiAgaW1hZ2VzPzogeyBpZD86IHN0cmluZzsgdXJsPzogc3RyaW5nIHwgbnVsbDsgYXNzZXRfaWQ/OiBzdHJpbmcgfCBudWxsIH1bXVxuICBkaXNjb3VudGFibGU/OiBib29sZWFuXG4gIHR5cGVfaWQ/OiBzdHJpbmcgfCBudWxsXG4gIGNvbGxlY3Rpb25faWQ/OiBzdHJpbmcgfCBudWxsXG4gIHNoaXBwaW5nX3Byb2ZpbGVfaWQ/OiBzdHJpbmcgfCBudWxsXG4gIHZhcmlhbnRzPzoge1xuICAgIGlkOiBzdHJpbmdcbiAgICBza3U/OiBzdHJpbmcgfCBudWxsXG4gICAgcHJpY2VzPzogeyBjdXJyZW5jeV9jb2RlPzogc3RyaW5nOyBhbW91bnQ/OiBudW1iZXIgfVtdXG4gIH1bXVxuICBjYXRlZ29yaWVzPzogeyBpZDogc3RyaW5nIH1bXVxuICB0YWdzPzogeyBpZDogc3RyaW5nIH1bXVxuICBzYWxlc19jaGFubmVscz86IHsgaWQ6IHN0cmluZzsgbmFtZT86IHN0cmluZyB8IG51bGwgfVtdXG59XG5cbnR5cGUgUHJvZHVjdE1lZGlhID0ge1xuICB1cmw6IHN0cmluZ1xuICBhc3NldF9pZD86IHN0cmluZ1xufVxuXG50eXBlIENvdXBvblByb2R1Y3RSb3cgPSB7XG4gIGlkOiBzdHJpbmdcbiAgcHJvZHVjdDogUHJvZHVjdFJlY29yZFxuICBjb3Vwb25fcHJvZHVjdF9jb25maWc6IENvdXBvblByb2R1Y3RDb25maWdcbiAgZW50aXRsZW1lbnRzX2NvdW50OiBudW1iZXJcbn1cblxudHlwZSBQcm9kdWN0Rm9ybVN0YXRlID0ge1xuICB0aXRsZTogc3RyaW5nXG4gIHN1YnRpdGxlOiBzdHJpbmdcbiAgaGFuZGxlOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xuICBtZWRpYTogUHJvZHVjdE1lZGlhW11cbiAgc2t1OiBzdHJpbmdcbiAgcHJpY2VfYW1vdW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICBzdGF0dXM6IHN0cmluZ1xuICBkaXNjb3VudGFibGU6IGJvb2xlYW5cbiAgc2VsbGVyX2lkOiBzdHJpbmdcbiAgdHlwZV9pZDogc3RyaW5nXG4gIGNvbGxlY3Rpb25faWQ6IHN0cmluZ1xuICBjYXRlZ29yeV9pZDogc3RyaW5nXG4gIHRhZ19pZDogc3RyaW5nXG59XG5cbnR5cGUgQ291cG9uRm9ybVN0YXRlID0ge1xuICBlbmFibGVkOiBib29sZWFuXG4gIHR5cGU6IENvdXBvblR5cGVcbiAgcHVyY2hhc2VfY29uZGl0aW9uczogUHVyY2hhc2VDb25kaXRpb25Gb3JtW11cbiAgYW1vdW50czogQ291cG9uQW1vdW50Rm9ybVJvd1tdXG4gIHBlcmNlbnRhZ2U6IHN0cmluZ1xuICBhbGxvY2F0aW9uOiBDb3Vwb25BbGxvY2F0aW9uXG4gIGNvZGVfc3RyYXRlZ3k6IENvZGVTdHJhdGVneVxuICBjb2RlX3ByZWZpeDogc3RyaW5nXG4gIHNoYXJlZF9jb2RlOiBzdHJpbmdcbiAgZXhwaXJhdGlvbl90eXBlOiBFeHBpcmF0aW9uUG9saWN5VHlwZVxuICBleHBpcmF0aW9uX2RheXM6IHN0cmluZ1xuICBleHBpcmF0aW9uX2RhdGU6IHN0cmluZ1xuICBleHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbjogYm9vbGVhblxuICBleHBpcmF0aW9uX2NhcF9hdDogc3RyaW5nXG4gIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTogc3RyaW5nXG4gIHByb21vdGlvbl9taXJyb3JfbW9kZTogTWlycm9yTW9kZVxuICBwcm9tb3Rpb25fc3RhdHVzOiBQcm9tb3Rpb25TdGF0dXNcbn1cblxudHlwZSBDb3Vwb25BbW91bnRGb3JtUm93ID0ge1xuICBrZXk6IHN0cmluZ1xuICBjdXJyZW5jeV9jb2RlOiBzdHJpbmdcbiAgYW1vdW50OiBzdHJpbmdcbn1cblxudHlwZSBDYW1wYWlnbkZvcm1TdGF0ZSA9IHtcbiAgbW9kZTogQ2FtcGFpZ25Nb2RlXG4gIGNhbXBhaWduX2lkOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIGNhbXBhaWduX2lkZW50aWZpZXI6IHN0cmluZ1xuICBzdGFydHNfYXQ6IHN0cmluZ1xuICBlbmRzX2F0OiBzdHJpbmdcbn1cblxuY29uc3QgTk9ORSA9IFwiX19ub25lX19cIlxuY29uc3QgYWxsU3RlcHM6IFdpemFyZFN0ZXBbXSA9IFtcImRldGFpbHNcIiwgXCJvcmdhbml6ZVwiLCBcImNhbXBhaWduXCIsIFwicHJpY2VzXCJdXG5cbmNvbnN0IGNvbmRpdGlvbkF0dHJpYnV0ZXM6IEFycmF5PHtcbiAgdmFsdWU6IFB1cmNoYXNlQ29uZGl0aW9uQXR0cmlidXRlXG4gIGxhYmVsOiBzdHJpbmdcbn0+ID0gW1xuICB7IHZhbHVlOiBcImN1c3RvbWVyLmdyb3Vwcy5pZFwiLCBsYWJlbDogXCJDdXN0b21lciBHcm91cFwiIH0sXG4gIHsgdmFsdWU6IFwicmVnaW9uLmlkXCIsIGxhYmVsOiBcIlJlZ2lvblwiIH0sXG4gIHsgdmFsdWU6IFwic2hpcHBpbmdfYWRkcmVzcy5jb3VudHJ5X2NvZGVcIiwgbGFiZWw6IFwiQ291bnRyeVwiIH0sXG4gIHsgdmFsdWU6IFwic2FsZXNfY2hhbm5lbF9pZFwiLCBsYWJlbDogXCJTYWxlcyBDaGFubmVsXCIgfSxcbiAgeyB2YWx1ZTogXCJjdXJyZW5jeV9jb2RlXCIsIGxhYmVsOiBcIkN1cnJlbmN5IENvZGVcIiB9LFxuXVxuXG5jb25zdCBjb25kaXRpb25PcGVyYXRvcnM6IEFycmF5PHtcbiAgdmFsdWU6IFB1cmNoYXNlQ29uZGl0aW9uT3BlcmF0b3JcbiAgbGFiZWw6IHN0cmluZ1xufT4gPSBbXG4gIHsgdmFsdWU6IFwiaW5cIiwgbGFiZWw6IFwiSW5cIiB9LFxuICB7IHZhbHVlOiBcImVxXCIsIGxhYmVsOiBcIkVxdWFsc1wiIH0sXG4gIHsgdmFsdWU6IFwibmVcIiwgbGFiZWw6IFwiTm90IEluXCIgfSxcbl1cblxuZXhwb3J0IGNvbnN0IHR5cGVDaG9pY2VzOiB7XG4gIHZhbHVlOiBDb3Vwb25UeXBlXG4gIGxhYmVsOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xufVtdID0gW1xuICAgIHtcbiAgICAgIHZhbHVlOiBcImFtb3VudF9vZmZfcHJvZHVjdHNcIixcbiAgICAgIGxhYmVsOiBcIkFtb3VudCBvZmYgcHJvZHVjdHNcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkRpc2NvdW50IHNwZWNpZmljIHByb2R1Y3RzIG9yIGEgY29sbGVjdGlvbiBvZiBwcm9kdWN0c1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6IFwiYW1vdW50X29mZl9vcmRlclwiLFxuICAgICAgbGFiZWw6IFwiQW1vdW50IG9mZiBvcmRlclwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiRGlzY291bnQgdGhlIHRvdGFsIG9yZGVyIGFtb3VudFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6IFwicGVyY2VudGFnZV9vZmZfcHJvZHVjdFwiLFxuICAgICAgbGFiZWw6IFwiUGVyY2VudGFnZSBvZmYgcHJvZHVjdFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiRGlzY291bnQgYSBwZXJjZW50YWdlIG9mZiBzZWxlY3RlZCBwcm9kdWN0c1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6IFwicGVyY2VudGFnZV9vZmZfb3JkZXJcIixcbiAgICAgIGxhYmVsOiBcIlBlcmNlbnRhZ2Ugb2ZmIG9yZGVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJEaXNjb3VudCBhIHBlcmNlbnRhZ2Ugb2ZmIHRoZSB0b3RhbCBvcmRlciBhbW91bnRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiBcImJ1eV94X2dldF95XCIsXG4gICAgICBsYWJlbDogXCJCdXkgWCBHZXQgWVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiSXNzdWUgYSBCdXkgWCBHZXQgWSBjb3Vwb24gZW50aXRsZW1lbnRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiBcImZyZWVfc2hpcHBpbmdcIixcbiAgICAgIGxhYmVsOiBcIkZyZWUgc2hpcHBpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFwcGx5IGEgMTAwJSBkaXNjb3VudCB0byBzaGlwcGluZyBmZWVzXCIsXG4gICAgfSxcbiAgXVxuXG5jb25zdCBzdGF0dXNDaG9pY2VzOiB7XG4gIHZhbHVlOiBQcm9tb3Rpb25TdGF0dXNcbiAgbGFiZWw6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG59W10gPSBbXG4gICAge1xuICAgICAgdmFsdWU6IFwiZHJhZnRcIixcbiAgICAgIGxhYmVsOiBcIkRyYWZ0XCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJDdXN0b21lcnMgd2lsbCBub3QgYmUgYWJsZSB0byB1c2UgdGhlIGNvZGUgeWV0XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogXCJhY3RpdmVcIixcbiAgICAgIGxhYmVsOiBcIkFjdGl2ZVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQ3VzdG9tZXJzIHdpbGwgYmUgYWJsZSB0byB1c2UgdGhlIGNvZGVcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiBcImluYWN0aXZlXCIsXG4gICAgICBsYWJlbDogXCJJbmFjdGl2ZVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiS2VlcCB0aGUgcHJvbW90aW9uIHVuYXZhaWxhYmxlIHVudGlsIHJlYWN0aXZhdGVkXCIsXG4gICAgfSxcbiAgXVxuXG5mdW5jdGlvbiBiYWNrZW5kVXJsKCkge1xuICByZXR1cm4gdHlwZW9mIF9fQkFDS0VORF9VUkxfXyA9PT0gXCJzdHJpbmdcIlxuICAgID8gX19CQUNLRU5EX1VSTF9fLnJlcGxhY2UoL1xcLyQvLCBcIlwiKVxuICAgIDogXCJcIlxufVxuXG5mdW5jdGlvbiBhcGlFcnJvck1lc3NhZ2UocGF5bG9hZDogYW55LCBmYWxsYmFjazogc3RyaW5nKSB7XG4gIHJldHVybiAoXG4gICAgW3BheWxvYWQ/Lm1lc3NhZ2UsIHBheWxvYWQ/LmVycm9yPy5tZXNzYWdlLCBwYXlsb2FkPy5lcnJvcl0uZmluZChcbiAgICAgIChjYW5kaWRhdGUpID0+IHR5cGVvZiBjYW5kaWRhdGUgPT09IFwic3RyaW5nXCIgJiYgY2FuZGlkYXRlLnRyaW0oKSxcbiAgICApIHx8XG4gICAgZmFsbGJhY2sgfHxcbiAgICBcIlJlcXVlc3QgZmFpbGVkXCJcbiAgKVxufVxuXG5hc3luYyBmdW5jdGlvbiBhcGlGZXRjaDxUPihcbiAgcGF0aDogc3RyaW5nLFxuICBvcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHt9LFxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YmFja2VuZFVybCgpfSR7cGF0aH1gLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uKG9wdGlvbnMuYm9keSA/IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSA6IHt9KSxcbiAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICB9LFxuICB9KVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+IG51bGwpXG4gICAgdGhyb3cgbmV3IEVycm9yKGFwaUVycm9yTWVzc2FnZShwYXlsb2FkLCByZXNwb25zZS5zdGF0dXNUZXh0KSlcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZS5qc29uKClcbn1cblxuZnVuY3Rpb24gb3B0aW9uTGFiZWwob3B0aW9uOiBPcHRpb25SZWNvcmQpIHtcbiAgcmV0dXJuIChcbiAgICBvcHRpb24ubmFtZSB8fCBvcHRpb24udGl0bGUgfHwgb3B0aW9uLnZhbHVlIHx8IG9wdGlvbi5oYW5kbGUgfHwgb3B0aW9uLmlkXG4gIClcbn1cblxuZnVuY3Rpb24gbnVtYmVyT3JOdWxsKHZhbHVlOiBzdHJpbmcpIHtcbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlKVxuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgJiYgcGFyc2VkID4gMCA/IHBhcnNlZCA6IG51bGxcbn1cblxuZnVuY3Rpb24gbm9uTmVnYXRpdmVOdW1iZXJPck51bGwodmFsdWU6IHN0cmluZykge1xuICBpZiAoIXZhbHVlLnRyaW0oKSkgcmV0dXJuIG51bGxcbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlKVxuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgJiYgcGFyc2VkID49IDAgPyBwYXJzZWQgOiBudWxsXG59XG5cbmZ1bmN0aW9uIHRvRGF0ZVRpbWVMb2NhbCh2YWx1ZT86IHN0cmluZyB8IG51bGwpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiXCJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKVxuICBpZiAoTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgcmV0dXJuIFwiXCJcbiAgY29uc3QgbG9jYWxEYXRlID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MF8wMDApXG4gIHJldHVybiBsb2NhbERhdGUudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxNilcbn1cblxuZnVuY3Rpb24gY3VycmVuY3lEZWNpbWFsRGlnaXRzKGNvZGU6IHN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXCJlblwiLCB7XG4gICAgICBzdHlsZTogXCJjdXJyZW5jeVwiLFxuICAgICAgY3VycmVuY3k6IGNvZGUudG9VcHBlckNhc2UoKSxcbiAgICB9KS5yZXNvbHZlZE9wdGlvbnMoKS5tYXhpbXVtRnJhY3Rpb25EaWdpdHNcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIDJcbiAgfVxufVxuXG5mdW5jdGlvbiBjdXJyZW5jeVN5bWJvbChjb2RlOiBzdHJpbmcpIHtcbiAgaWYgKCFjb2RlKSByZXR1cm4gXCJcIlxuICB0cnkge1xuICAgIHJldHVybiAoXG4gICAgICBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXCJlblwiLCB7XG4gICAgICAgIHN0eWxlOiBcImN1cnJlbmN5XCIsXG4gICAgICAgIGN1cnJlbmN5OiBjb2RlLnRvVXBwZXJDYXNlKCksXG4gICAgICAgIGN1cnJlbmN5RGlzcGxheTogXCJuYXJyb3dTeW1ib2xcIixcbiAgICAgIH0pXG4gICAgICAgIC5mb3JtYXRUb1BhcnRzKDApXG4gICAgICAgIC5maW5kKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09IFwiY3VycmVuY3lcIik/LnZhbHVlIHx8IGNvZGUudG9VcHBlckNhc2UoKVxuICAgIClcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGNvZGUudG9VcHBlckNhc2UoKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3Vwb25UeXBlRnJvbUNvbmZpZyhjb25maWc6IENvdXBvblByb2R1Y3RDb25maWcpOiBDb3Vwb25UeXBlIHtcbiAgaWYgKGNvbmZpZy5iZW5lZml0X3R5cGUgPT09IFwicGVyY2VudGFnZVwiKSB7XG4gICAgcmV0dXJuIGNvbmZpZy5wcm9tb3Rpb25fdGVtcGxhdGU/LmFwcGxpY2F0aW9uX21ldGhvZD8udGFyZ2V0X3R5cGUgPT09IFwib3JkZXJcIlxuICAgICAgPyBcInBlcmNlbnRhZ2Vfb2ZmX29yZGVyXCJcbiAgICAgIDogXCJwZXJjZW50YWdlX29mZl9wcm9kdWN0XCJcbiAgfVxuICBpZiAoY29uZmlnLmJlbmVmaXRfdHlwZSA9PT0gXCJidXlfZ2V0XCIpIHJldHVybiBcImJ1eV94X2dldF95XCJcbiAgaWYgKGNvbmZpZy5iZW5lZml0X3R5cGUgPT09IFwiZnJlZV9zaGlwcGluZ1wiKSByZXR1cm4gXCJmcmVlX3NoaXBwaW5nXCJcblxuICByZXR1cm4gY29uZmlnLnByb21vdGlvbl90ZW1wbGF0ZT8uYXBwbGljYXRpb25fbWV0aG9kPy50YXJnZXRfdHlwZSA9PT0gXCJvcmRlclwiXG4gICAgPyBcImFtb3VudF9vZmZfb3JkZXJcIlxuICAgIDogXCJhbW91bnRfb2ZmX3Byb2R1Y3RzXCJcbn1cblxuZnVuY3Rpb24gYmVuZWZpdFR5cGVGcm9tQ291cG9uVHlwZSh0eXBlOiBDb3Vwb25UeXBlKTogQmVuZWZpdFR5cGUge1xuICBpZiAoXG4gICAgdHlwZSA9PT0gXCJwZXJjZW50YWdlX29mZl9wcm9kdWN0XCIgfHxcbiAgICB0eXBlID09PSBcInBlcmNlbnRhZ2Vfb2ZmX29yZGVyXCJcbiAgKSByZXR1cm4gXCJwZXJjZW50YWdlXCJcbiAgaWYgKHR5cGUgPT09IFwiYnV5X3hfZ2V0X3lcIikgcmV0dXJuIFwiYnV5X2dldFwiXG4gIGlmICh0eXBlID09PSBcImZyZWVfc2hpcHBpbmdcIikgcmV0dXJuIFwiZnJlZV9zaGlwcGluZ1wiXG4gIHJldHVybiBcImZpeGVkX2Ftb3VudFwiXG59XG5cbmZ1bmN0aW9uIGNvdXBvblR5cGVMYWJlbChjb25maWc6IENvdXBvblByb2R1Y3RDb25maWcpIHtcbiAgcmV0dXJuIHR5cGVDaG9pY2VzLmZpbmQoXG4gICAgKGNob2ljZSkgPT4gY2hvaWNlLnZhbHVlID09PSBjb3Vwb25UeXBlRnJvbUNvbmZpZyhjb25maWcpLFxuICApPy5sYWJlbFxufVxuXG5mdW5jdGlvbiBjb3Vwb25TdGF0dXNDb2xvcihzdGF0dXM/OiBQcm9tb3Rpb25TdGF0dXMgfCBudWxsKSB7XG4gIGlmIChzdGF0dXMgPT09IFwiYWN0aXZlXCIpIHJldHVybiBcImdyZWVuXCIgYXMgY29uc3RcbiAgaWYgKHN0YXR1cyA9PT0gXCJpbmFjdGl2ZVwiKSByZXR1cm4gXCJvcmFuZ2VcIiBhcyBjb25zdFxuICByZXR1cm4gXCJncmV5XCIgYXMgY29uc3Rcbn1cblxuZnVuY3Rpb24gcHJvZHVjdFN0YXR1c0Zyb21Db3Vwb25TdGF0dXMoc3RhdHVzOiBQcm9tb3Rpb25TdGF0dXMpIHtcbiAgcmV0dXJuIHN0YXR1cyA9PT0gXCJhY3RpdmVcIiA/IFwicHVibGlzaGVkXCIgOiBcImRyYWZ0XCJcbn1cblxuZnVuY3Rpb24gY2FtcGFpZ25MYWJlbChjb25maWc6IENvdXBvblByb2R1Y3RDb25maWcpIHtcbiAgY29uc3QgbmFtZSA9IGNvbmZpZy5jYW1wYWlnbl9zbmFwc2hvdD8ubmFtZVxuICByZXR1cm4gdHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIgJiYgbmFtZSA/IG5hbWUgOiBjb25maWcuY2FtcGFpZ25faWQgfHwgXCJOb25lXCJcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEN1cnJlbmN5KG9wdGlvbnM6IE9wdGlvbnNQYXlsb2FkKSB7XG4gIHJldHVybiAoXG4gICAgb3B0aW9ucy5jdXJyZW5jaWVzPy5maW5kKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuaXNfZGVmYXVsdCk/LmNvZGUgfHxcbiAgICBvcHRpb25zLmN1cnJlbmNpZXM/LlswXT8uY29kZSB8fFxuICAgIFwiXCJcbiAgKVxufVxuXG5mdW5jdGlvbiBjb25kaXRpb25LZXkocHJlZml4ID0gXCJjb25kaXRpb25cIikge1xuICByZXR1cm4gYCR7cHJlZml4fS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgOCl9YFxufVxuXG5mdW5jdGlvbiBpc0Ftb3VudENvdXBvblR5cGUodHlwZTogQ291cG9uVHlwZSkge1xuICByZXR1cm4gdHlwZSA9PT0gXCJhbW91bnRfb2ZmX3Byb2R1Y3RzXCIgfHwgdHlwZSA9PT0gXCJhbW91bnRfb2ZmX29yZGVyXCJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVmZmVjdGl2ZUNvdXBvbkN1cnJlbmNpZXMoXG4gIGNvbmRpdGlvbnM6IFB1cmNoYXNlQ29uZGl0aW9uRm9ybVtdLFxuICBjdXJyZW5jaWVzOiBDdXJyZW5jeU9wdGlvbltdLFxuKSB7XG4gIGNvbnN0IGNvbmRpdGlvbiA9IGNvbmRpdGlvbnMuZmluZChcbiAgICAoaXRlbSkgPT4gaXRlbS5hdHRyaWJ1dGUgPT09IFwiY3VycmVuY3lfY29kZVwiLFxuICApXG4gIGlmICghY29uZGl0aW9uIHx8ICFjb25kaXRpb24ub3BlcmF0b3IpIHJldHVybiBbXVxuICBjb25zdCBzZWxlY3RlZCA9IG5ldyBTZXQoY29uZGl0aW9uLnZhbHVlcylcbiAgY29uc3Qgc3VwcG9ydGVkID0gY3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiBjdXJyZW5jeS5jb2RlKVxuXG4gIHJldHVybiBjb25kaXRpb24ub3BlcmF0b3IgPT09IFwibmVcIlxuICAgID8gc3VwcG9ydGVkLmZpbHRlcigoY29kZSkgPT4gIXNlbGVjdGVkLmhhcyhjb2RlKSlcbiAgICA6IHN1cHBvcnRlZC5maWx0ZXIoKGNvZGUpID0+IHNlbGVjdGVkLmhhcyhjb2RlKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY29uY2lsZUNvdXBvbkFtb3VudHMoXG4gIGN1cnJlbnQ6IENvdXBvbkFtb3VudEZvcm1Sb3dbXSxcbiAgY3VycmVuY3lDb2Rlczogc3RyaW5nW10sXG4pIHtcbiAgY29uc3QgYnlDdXJyZW5jeSA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBjdXJyZW50Lm1hcCgocm93KSA9PiBbcm93LmN1cnJlbmN5X2NvZGUsIHJvd10pLFxuICApXG4gIHJldHVybiBjdXJyZW5jeUNvZGVzLm1hcCgoY3VycmVuY3lDb2RlKSA9PiAoe1xuICAgIGtleTogYnlDdXJyZW5jeVtjdXJyZW5jeUNvZGVdPy5rZXkgfHwgY29uZGl0aW9uS2V5KFwiY291cG9uLXZhbHVlXCIpLFxuICAgIGN1cnJlbmN5X2NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICBhbW91bnQ6IGJ5Q3VycmVuY3lbY3VycmVuY3lDb2RlXT8uYW1vdW50IHx8IFwiXCIsXG4gIH0pKVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHVyY2hhc2VDb25kaXRpb25zKG9wdGlvbnM6IE9wdGlvbnNQYXlsb2FkKSB7XG4gIGNvbnN0IGN1cnJlbmN5Q29kZSA9IGRlZmF1bHRDdXJyZW5jeShvcHRpb25zKVxuICByZXR1cm4gY3VycmVuY3lDb2RlXG4gICAgPyBbXG4gICAgICB7XG4gICAgICAgIGtleTogY29uZGl0aW9uS2V5KFwiY3VycmVuY3lcIiksXG4gICAgICAgIGF0dHJpYnV0ZTogXCJjdXJyZW5jeV9jb2RlXCIgYXMgY29uc3QsXG4gICAgICAgIG9wZXJhdG9yOiBcImVxXCIgYXMgY29uc3QsXG4gICAgICAgIHZhbHVlczogW2N1cnJlbmN5Q29kZV0sXG4gICAgICB9LFxuICAgIF1cbiAgICA6IFtdXG59XG5cbmZ1bmN0aW9uIGVtcHR5UHJvZHVjdChvcHRpb25zOiBPcHRpb25zUGF5bG9hZCk6IFByb2R1Y3RGb3JtU3RhdGUge1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiBcIlwiLFxuICAgIHN1YnRpdGxlOiBcIlwiLFxuICAgIGhhbmRsZTogXCJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICBtZWRpYTogW10sXG4gICAgc2t1OiBcIlwiLFxuICAgIHByaWNlX2Ftb3VudHM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIChvcHRpb25zLmN1cnJlbmNpZXMgfHwgW10pLm1hcCgoY3VycmVuY3kpID0+IFtjdXJyZW5jeS5jb2RlLCBcIlwiXSksXG4gICAgKSxcbiAgICBzdGF0dXM6IFwiZHJhZnRcIixcbiAgICBkaXNjb3VudGFibGU6IGZhbHNlLFxuICAgIHNlbGxlcl9pZDogXCJcIixcbiAgICB0eXBlX2lkOiBcIlwiLFxuICAgIGNvbGxlY3Rpb25faWQ6IFwiXCIsXG4gICAgY2F0ZWdvcnlfaWQ6IFwiXCIsXG4gICAgdGFnX2lkOiBcIlwiLFxuICB9XG59XG5cbmZ1bmN0aW9uIGVtcHR5Q291cG9uKG9wdGlvbnM6IE9wdGlvbnNQYXlsb2FkKTogQ291cG9uRm9ybVN0YXRlIHtcbiAgY29uc3QgY3VycmVuY3lDb2RlID0gZGVmYXVsdEN1cnJlbmN5KG9wdGlvbnMpXG4gIGNvbnN0IHB1cmNoYXNlQ29uZGl0aW9ucyA9IGRlZmF1bHRQdXJjaGFzZUNvbmRpdGlvbnMob3B0aW9ucylcbiAgcmV0dXJuIHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIHR5cGU6IFwiYW1vdW50X29mZl9wcm9kdWN0c1wiLFxuICAgIHB1cmNoYXNlX2NvbmRpdGlvbnM6IHB1cmNoYXNlQ29uZGl0aW9ucyxcbiAgICBhbW91bnRzOiBjdXJyZW5jeUNvZGVcbiAgICAgID8gW1xuICAgICAgICB7XG4gICAgICAgICAga2V5OiBcImNvdXBvbi12YWx1ZS1kZWZhdWx0XCIsXG4gICAgICAgICAgY3VycmVuY3lfY29kZTogY3VycmVuY3lDb2RlLFxuICAgICAgICAgIGFtb3VudDogXCJcIixcbiAgICAgICAgfSxcbiAgICAgIF1cbiAgICAgIDogW10sXG4gICAgcGVyY2VudGFnZTogXCJcIixcbiAgICBhbGxvY2F0aW9uOiBcImVhY2hcIixcbiAgICBjb2RlX3N0cmF0ZWd5OiBcInVuaXF1ZV9jb2RlXCIsXG4gICAgY29kZV9wcmVmaXg6IFwiQ09VUE9OXCIsXG4gICAgc2hhcmVkX2NvZGU6IFwiXCIsXG4gICAgZXhwaXJhdGlvbl90eXBlOiBcImR1cmF0aW9uXCIsXG4gICAgZXhwaXJhdGlvbl9kYXlzOiBcIjMwXCIsXG4gICAgZXhwaXJhdGlvbl9kYXRlOiBcIlwiLFxuICAgIGV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduOiB0cnVlLFxuICAgIGV4cGlyYXRpb25fY2FwX2F0OiBcIlwiLFxuICAgIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTogXCIxXCIsXG4gICAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiBcIm5vbmVcIixcbiAgICBwcm9tb3Rpb25fc3RhdHVzOiBcImRyYWZ0XCIsXG4gIH1cbn1cblxuY29uc3QgZW1wdHlDYW1wYWlnbjogQ2FtcGFpZ25Gb3JtU3RhdGUgPSB7XG4gIG1vZGU6IFwibm9uZVwiLFxuICBjYW1wYWlnbl9pZDogXCJcIixcbiAgbmFtZTogXCJcIixcbiAgY2FtcGFpZ25faWRlbnRpZmllcjogXCJcIixcbiAgc3RhcnRzX2F0OiBcIlwiLFxuICBlbmRzX2F0OiBcIlwiLFxufVxuXG5mdW5jdGlvbiBmb3Jtc0Zyb21Sb3coXG4gIHJvdzogQ291cG9uUHJvZHVjdFJvdyxcbiAgb3B0aW9uczogT3B0aW9uc1BheWxvYWQsXG4pOiB7XG4gIHByb2R1Y3Q6IFByb2R1Y3RGb3JtU3RhdGVcbiAgY291cG9uOiBDb3Vwb25Gb3JtU3RhdGVcbiAgY2FtcGFpZ246IENhbXBhaWduRm9ybVN0YXRlXG59IHtcbiAgY29uc3QgcHJvZHVjdCA9IHJvdy5wcm9kdWN0XG4gIGNvbnN0IGNvbmZpZyA9IHJvdy5jb3Vwb25fcHJvZHVjdF9jb25maWdcbiAgY29uc3QgdmFyaWFudCA9IHByb2R1Y3QudmFyaWFudHM/LlswXVxuICBjb25zdCBwcmljZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgKHZhcmlhbnQ/LnByaWNlcyB8fCBbXSlcbiAgICAgIC5maWx0ZXIoKHByaWNlKSA9PiBwcmljZS5jdXJyZW5jeV9jb2RlKVxuICAgICAgLm1hcCgocHJpY2UpID0+IFtcbiAgICAgICAgU3RyaW5nKHByaWNlLmN1cnJlbmN5X2NvZGUpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHByaWNlLmFtb3VudCA9PSBudWxsID8gXCJcIiA6IFN0cmluZyhwcmljZS5hbW91bnQpLFxuICAgICAgXSksXG4gIClcbiAgY29uc3QgbWVkaWEgPSBBcnJheS5mcm9tKFxuICAgIG5ldyBNYXAoXG4gICAgICBbXG4gICAgICAgIC4uLihwcm9kdWN0LnRodW1ibmFpbFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdXJsOiBwcm9kdWN0LnRodW1ibmFpbCxcbiAgICAgICAgICAgICAgICBhc3NldF9pZDogcHJvZHVjdC50aHVtYm5haWxfYXNzZXRfaWQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW10pLFxuICAgICAgICAuLi4ocHJvZHVjdC5pbWFnZXMgfHwgW10pXG4gICAgICAgICAgLmZpbHRlcigoaW1hZ2UpID0+IGltYWdlLnVybClcbiAgICAgICAgICAubWFwKChpbWFnZSkgPT4gKHtcbiAgICAgICAgICAgIHVybDogU3RyaW5nKGltYWdlLnVybCksXG4gICAgICAgICAgICBhc3NldF9pZDogaW1hZ2UuYXNzZXRfaWQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIH0pKSxcbiAgICAgIF0ubWFwKChpdGVtKSA9PiBbaXRlbS51cmwsIGl0ZW1dKSxcbiAgICApLnZhbHVlcygpLFxuICApXG4gIGNvbnN0IGNvbmZpZ3VyZWRBbW91bnRzID1cbiAgICBBcnJheS5pc0FycmF5KGNvbmZpZy5hbW91bnRzKSAmJiBjb25maWcuYW1vdW50cy5sZW5ndGhcbiAgICAgID8gY29uZmlnLmFtb3VudHNcbiAgICAgIDogY29uZmlnLmFtb3VudCAhPSBudWxsICYmIGNvbmZpZy5jdXJyZW5jeV9jb2RlXG4gICAgICAgID8gW3sgYW1vdW50OiBjb25maWcuYW1vdW50LCBjdXJyZW5jeV9jb2RlOiBjb25maWcuY3VycmVuY3lfY29kZSB9XVxuICAgICAgICA6IFtdXG4gIGNvbnN0IGNvbmZpZ3VyZWRDb25kaXRpb25zID0gKGNvbmZpZy5wdXJjaGFzZV9jb25kaXRpb25zIHx8IFtdKS5tYXAoXG4gICAgKGNvbmRpdGlvbiwgaW5kZXgpID0+ICh7XG4gICAgICBrZXk6IGBjb25kaXRpb24tJHtpbmRleH1gLFxuICAgICAgYXR0cmlidXRlOiBjb25kaXRpb24uYXR0cmlidXRlLFxuICAgICAgb3BlcmF0b3I6IGNvbmRpdGlvbi5vcGVyYXRvcixcbiAgICAgIHZhbHVlczogY29uZGl0aW9uLnZhbHVlcy5tYXAoKHZhbHVlKSA9PlxuICAgICAgICBjb25kaXRpb24uYXR0cmlidXRlID09PSBcImN1cnJlbmN5X2NvZGVcIiB8fFxuICAgICAgICAgIGNvbmRpdGlvbi5hdHRyaWJ1dGUgPT09IFwic2hpcHBpbmdfYWRkcmVzcy5jb3VudHJ5X2NvZGVcIlxuICAgICAgICAgID8gdmFsdWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIDogdmFsdWUsXG4gICAgICApLFxuICAgIH0pLFxuICApXG4gIGlmIChcbiAgICAhY29uZmlndXJlZENvbmRpdGlvbnMuc29tZShcbiAgICAgIChjb25kaXRpb24pID0+IGNvbmRpdGlvbi5hdHRyaWJ1dGUgPT09IFwiY3VycmVuY3lfY29kZVwiLFxuICAgICkgJiZcbiAgICBjb25maWcuYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiICYmXG4gICAgY29uZmlndXJlZEFtb3VudHMubGVuZ3RoXG4gICkge1xuICAgIGNvbmZpZ3VyZWRDb25kaXRpb25zLnB1c2goe1xuICAgICAga2V5OiBcImNvbmRpdGlvbi1sZWdhY3ktY3VycmVuY3lcIixcbiAgICAgIGF0dHJpYnV0ZTogXCJjdXJyZW5jeV9jb2RlXCIsXG4gICAgICBvcGVyYXRvcjogY29uZmlndXJlZEFtb3VudHMubGVuZ3RoID09PSAxID8gXCJlcVwiIDogXCJpblwiLFxuICAgICAgdmFsdWVzOiBjb25maWd1cmVkQW1vdW50cy5tYXAoKGFtb3VudCkgPT5cbiAgICAgICAgYW1vdW50LmN1cnJlbmN5X2NvZGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICksXG4gICAgfSlcbiAgfVxuICBpZiAoXG4gICAgIWNvbmZpZ3VyZWRDb25kaXRpb25zLnNvbWUoXG4gICAgICAoY29uZGl0aW9uKSA9PiBjb25kaXRpb24uYXR0cmlidXRlID09PSBcInNhbGVzX2NoYW5uZWxfaWRcIixcbiAgICApICYmXG4gICAgcHJvZHVjdC5zYWxlc19jaGFubmVscz8ubGVuZ3RoXG4gICkge1xuICAgIGNvbmZpZ3VyZWRDb25kaXRpb25zLnB1c2goe1xuICAgICAga2V5OiBcImNvbmRpdGlvbi1sZWdhY3ktc2FsZXMtY2hhbm5lbFwiLFxuICAgICAgYXR0cmlidXRlOiBcInNhbGVzX2NoYW5uZWxfaWRcIixcbiAgICAgIG9wZXJhdG9yOiBwcm9kdWN0LnNhbGVzX2NoYW5uZWxzLmxlbmd0aCA9PT0gMSA/IFwiZXFcIiA6IFwiaW5cIixcbiAgICAgIHZhbHVlczogcHJvZHVjdC5zYWxlc19jaGFubmVscy5tYXAoKGNoYW5uZWwpID0+IGNoYW5uZWwuaWQpLFxuICAgIH0pXG4gIH1cbiAgY29uc3QgZXhwaXJhdGlvblBvbGljeSA9IGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeVxuICBjb25zdCBjb25maWd1cmVkQW1vdW50Um93cyA9IGNvbmZpZ3VyZWRBbW91bnRzLm1hcCgocm93LCBpbmRleCkgPT4gKHtcbiAgICBrZXk6IGBjb3Vwb24tdmFsdWUtJHtpbmRleH1gLFxuICAgIGFtb3VudDogU3RyaW5nKHJvdy5hbW91bnQpLFxuICAgIGN1cnJlbmN5X2NvZGU6IHJvdy5jdXJyZW5jeV9jb2RlLnRvTG93ZXJDYXNlKCksXG4gIH0pKVxuICBjb25zdCBhbW91bnRSb3dzID1cbiAgICBjb25maWcuYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiXG4gICAgICA/IHJlY29uY2lsZUNvdXBvbkFtb3VudHMoXG4gICAgICAgIGNvbmZpZ3VyZWRBbW91bnRSb3dzLFxuICAgICAgICBlZmZlY3RpdmVDb3Vwb25DdXJyZW5jaWVzKGNvbmZpZ3VyZWRDb25kaXRpb25zLCBvcHRpb25zLmN1cnJlbmNpZXMgfHwgW10pLFxuICAgICAgKVxuICAgICAgOiBjb25maWd1cmVkQW1vdW50Um93c1xuXG4gIHJldHVybiB7XG4gICAgcHJvZHVjdDoge1xuICAgICAgLi4uZW1wdHlQcm9kdWN0KG9wdGlvbnMpLFxuICAgICAgdGl0bGU6IHByb2R1Y3QudGl0bGUgfHwgXCJcIixcbiAgICAgIHN1YnRpdGxlOiBwcm9kdWN0LnN1YnRpdGxlIHx8IFwiXCIsXG4gICAgICBoYW5kbGU6IHByb2R1Y3QuaGFuZGxlIHx8IFwiXCIsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvZHVjdC5kZXNjcmlwdGlvbiB8fCBcIlwiLFxuICAgICAgbWVkaWEsXG4gICAgICBza3U6IHZhcmlhbnQ/LnNrdSB8fCBcIlwiLFxuICAgICAgcHJpY2VfYW1vdW50czoge1xuICAgICAgICAuLi5lbXB0eVByb2R1Y3Qob3B0aW9ucykucHJpY2VfYW1vdW50cyxcbiAgICAgICAgLi4ucHJpY2VzLFxuICAgICAgfSxcbiAgICAgIHN0YXR1czogcHJvZHVjdC5zdGF0dXMgfHwgXCJkcmFmdFwiLFxuICAgICAgZGlzY291bnRhYmxlOiBCb29sZWFuKHByb2R1Y3QuZGlzY291bnRhYmxlKSxcbiAgICAgIHR5cGVfaWQ6IHByb2R1Y3QudHlwZV9pZCB8fCBcIlwiLFxuICAgICAgY29sbGVjdGlvbl9pZDogcHJvZHVjdC5jb2xsZWN0aW9uX2lkIHx8IFwiXCIsXG4gICAgICBjYXRlZ29yeV9pZDogcHJvZHVjdC5jYXRlZ29yaWVzPy5bMF0/LmlkIHx8IFwiXCIsXG4gICAgICB0YWdfaWQ6IHByb2R1Y3QudGFncz8uWzBdPy5pZCB8fCBcIlwiLFxuICAgIH0sXG4gICAgY291cG9uOiB7XG4gICAgICAuLi5lbXB0eUNvdXBvbihvcHRpb25zKSxcbiAgICAgIGVuYWJsZWQ6IGNvbmZpZy5lbmFibGVkLFxuICAgICAgdHlwZTogY291cG9uVHlwZUZyb21Db25maWcoY29uZmlnKSxcbiAgICAgIHB1cmNoYXNlX2NvbmRpdGlvbnM6IGNvbmZpZ3VyZWRDb25kaXRpb25zLFxuICAgICAgYW1vdW50czpcbiAgICAgICAgY29uZmlnLmJlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIlxuICAgICAgICAgID8gYW1vdW50Um93c1xuICAgICAgICAgIDogYW1vdW50Um93cy5sZW5ndGhcbiAgICAgICAgICAgID8gYW1vdW50Um93c1xuICAgICAgICAgICAgOiBlbXB0eUNvdXBvbihvcHRpb25zKS5hbW91bnRzLFxuICAgICAgcGVyY2VudGFnZTogY29uZmlnLnBlcmNlbnRhZ2UgPT0gbnVsbCA/IFwiXCIgOiBTdHJpbmcoY29uZmlnLnBlcmNlbnRhZ2UpLFxuICAgICAgYWxsb2NhdGlvbjpcbiAgICAgICAgY29uZmlnLnByb21vdGlvbl90ZW1wbGF0ZT8uYXBwbGljYXRpb25fbWV0aG9kPy5hbGxvY2F0aW9uID09PSBcIm9uY2VcIlxuICAgICAgICAgID8gKFwib25jZVwiIGFzIGNvbnN0KVxuICAgICAgICAgIDogKFwiZWFjaFwiIGFzIGNvbnN0KSxcbiAgICAgIGNvZGVfc3RyYXRlZ3k6IGNvbmZpZy5jb2RlX3N0cmF0ZWd5LFxuICAgICAgY29kZV9wcmVmaXg6IGNvbmZpZy5jb2RlX3ByZWZpeCB8fCBcIlwiLFxuICAgICAgc2hhcmVkX2NvZGU6IGNvbmZpZy5zaGFyZWRfY29kZSB8fCBcIlwiLFxuICAgICAgZXhwaXJhdGlvbl90eXBlOiBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3k/LnR5cGUgfHwgXCJkdXJhdGlvblwiLFxuICAgICAgZXhwaXJhdGlvbl9kYXlzOlxuICAgICAgICBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3k/LnR5cGUgPT09IFwiZHVyYXRpb25cIlxuICAgICAgICAgID8gU3RyaW5nKGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeS5kdXJhdGlvbl9kYXlzKVxuICAgICAgICAgIDogXCIzMFwiLFxuICAgICAgZXhwaXJhdGlvbl9kYXRlOlxuICAgICAgICBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3k/LnR5cGUgPT09IFwiZml4ZWRcIlxuICAgICAgICAgID8gdG9EYXRlVGltZUxvY2FsKGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeS5leHBpcmVzX2F0KVxuICAgICAgICAgIDogXCJcIixcbiAgICAgIGV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduOlxuICAgICAgICBleHBpcmF0aW9uUG9saWN5LnR5cGUgPT09IFwibm9uZVwiIHx8XG4gICAgICAgIGV4cGlyYXRpb25Qb2xpY3kuY2FwX2J5X2NhbXBhaWduICE9PSBmYWxzZSxcbiAgICAgIGV4cGlyYXRpb25fY2FwX2F0OlxuICAgICAgICBleHBpcmF0aW9uUG9saWN5LnR5cGUgPT09IFwibm9uZVwiXG4gICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgOiB0b0RhdGVUaW1lTG9jYWwoZXhwaXJhdGlvblBvbGljeS5jYXBfYXQpLFxuICAgICAgbWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtOiBTdHJpbmcoXG4gICAgICAgIGNvbmZpZy5tYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW0gfHwgMSxcbiAgICAgICksXG4gICAgICBwcm9tb3Rpb25fbWlycm9yX21vZGU6IGNvbmZpZy5wcm9tb3Rpb25fbWlycm9yX21vZGUgfHwgXCJub25lXCIsXG4gICAgICBwcm9tb3Rpb25fc3RhdHVzOiBjb25maWcucHJvbW90aW9uX3N0YXR1cyB8fCBcImRyYWZ0XCIsXG4gICAgfSxcbiAgICBjYW1wYWlnbjoge1xuICAgICAgLi4uZW1wdHlDYW1wYWlnbixcbiAgICAgIG1vZGU6IGNvbmZpZy5jYW1wYWlnbl9pZCA/IChcImV4aXN0aW5nXCIgYXMgY29uc3QpIDogKFwibm9uZVwiIGFzIGNvbnN0KSxcbiAgICAgIGNhbXBhaWduX2lkOiBjb25maWcuY2FtcGFpZ25faWQgfHwgXCJcIixcbiAgICB9LFxuICB9XG59XG5cbmNvbnN0IG1vZGFsQ29udGVudFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImZsZXhcIixcbiAgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIixcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG59XG5cbmNvbnN0IG1vZGFsV2l6YXJkU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6IFwiZmxleFwiLFxuICBmbGV4OiBcIjEgMSBhdXRvXCIsXG4gIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gIG1pbkhlaWdodDogMCxcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG59XG5cbmNvbnN0IHZpc3VhbGx5SGlkZGVuU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGNsaXA6IFwicmVjdCgwIDAgMCAwKVwiLFxuICBjbGlwUGF0aDogXCJpbnNldCg1MCUpXCIsXG4gIGhlaWdodDogMSxcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gIHdoaXRlU3BhY2U6IFwibm93cmFwXCIsXG4gIHdpZHRoOiAxLFxufVxuXG5jb25zdCBtb2RhbEJvZHlTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZmxleDogXCIxIDEgYXV0b1wiLFxuICBtaW5IZWlnaHQ6IDAsXG4gIHBhZGRpbmc6IDAsXG59XG5cbmNvbnN0IG1vZGFsU2Nyb2xsU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIG92ZXJmbG93WTogXCJhdXRvXCIsXG4gIHBhZGRpbmc6IFwiNjRweCAyNHB4IDExMnB4XCIsXG4gIHdpZHRoOiBcIjEwMCVcIixcbn1cblxuY29uc3QgbW9kYWxGb3JtU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIG1hcmdpbjogXCIwIGF1dG9cIixcbiAgbWF4V2lkdGg6IDcyMCxcbiAgd2lkdGg6IFwibWluKDcyMHB4LCAxMDAlKVwiLFxufVxuXG5jb25zdCBzdGFja1N0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImZsZXhcIixcbiAgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIixcbiAgZ2FwOiAyNCxcbn1cblxuY29uc3QgdHdvQ29sdW1uR3JpZFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImdyaWRcIixcbiAgZ2FwOiAxNixcbiAgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCJyZXBlYXQoYXV0by1maXQsIG1pbm1heCgyNjBweCwgMWZyKSlcIixcbn1cblxuY29uc3QgdGhyZWVDb2x1bW5HcmlkU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6IFwiZ3JpZFwiLFxuICBnYXA6IDE2LFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiBcInJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDE4MHB4LCAxZnIpKVwiLFxufVxuXG5jb25zdCBwYW5lbFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBib3JkZXI6IFwiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1iYXNlKVwiLFxuICBib3JkZXJSYWRpdXM6IDgsXG4gIHBhZGRpbmc6IDE2LFxufVxuXG5mdW5jdGlvbiBGaWVsZCh7XG4gIGNoaWxkcmVuLFxuICBsYWJlbCxcbiAgb3B0aW9uYWwsXG4gIHRvb2x0aXAsXG59OiB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgbGFiZWw6IHN0cmluZ1xuICBvcHRpb25hbD86IGJvb2xlYW5cbiAgdG9vbHRpcD86IHN0cmluZ1xufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAteS0xXCIgc3R5bGU9e3sgbWluV2lkdGg6IDAgfX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC14LTFcIj5cbiAgICAgICAgPExhYmVsPntsYWJlbH08L0xhYmVsPlxuICAgICAgICB7dG9vbHRpcCAmJiAoXG4gICAgICAgICAgPFRvb2x0aXAgY29udGVudD17dG9vbHRpcH0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtgJHtsYWJlbH0gaW5mb3JtYXRpb25gfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEluZm9ybWF0aW9uQ2lyY2xlIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICl9XG4gICAgICAgIHtvcHRpb25hbCAmJiAoXG4gICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPlxuICAgICAgICAgICAgKE9wdGlvbmFsKVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApXG59XG5cbmZ1bmN0aW9uIFNlY3Rpb24oe1xuICBjaGlsZHJlbixcbiAgZGVzY3JpcHRpb24sXG4gIHRpdGxlLFxufToge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTRcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxIZWFkaW5nIGxldmVsPVwiaDJcIj57dGl0bGV9PC9IZWFkaW5nPlxuICAgICAgICB7ZGVzY3JpcHRpb24gJiYgKFxuICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L3NlY3Rpb24+XG4gIClcbn1cblxuZnVuY3Rpb24gT3B0aW9uU2VsZWN0KHtcbiAgb25DaGFuZ2UsXG4gIG9wdGlvbnMsXG4gIHZhbHVlLFxufToge1xuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgb3B0aW9uczogT3B0aW9uUmVjb3JkW11cbiAgdmFsdWU6IHN0cmluZ1xufSkge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RcbiAgICAgIHZhbHVlPXt2YWx1ZSB8fCBOT05FfVxuICAgICAgb25WYWx1ZUNoYW5nZT17KG5leHQpID0+IG9uQ2hhbmdlKG5leHQgPT09IE5PTkUgPyBcIlwiIDogbmV4dCl9XG4gICAgPlxuICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9e05PTkV9Pk5vbmU8L1NlbGVjdC5JdGVtPlxuICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgIDxTZWxlY3QuSXRlbSBrZXk9e29wdGlvbi5pZH0gdmFsdWU9e29wdGlvbi5pZH0+XG4gICAgICAgICAgICB7b3B0aW9uTGFiZWwob3B0aW9uKX1cbiAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICApKX1cbiAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgPC9TZWxlY3Q+XG4gIClcbn1cblxuZnVuY3Rpb24gQ3VycmVuY3lTZWxlY3Qoe1xuICBjdXJyZW5jaWVzLFxuICBvbkNoYW5nZSxcbiAgdmFsdWUsXG59OiB7XG4gIGN1cnJlbmNpZXM6IEN1cnJlbmN5T3B0aW9uW11cbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIHZhbHVlOiBzdHJpbmdcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0XG4gICAgICB2YWx1ZT17dmFsdWUgfHwgdW5kZWZpbmVkfVxuICAgICAgZGlzYWJsZWQ9eyFjdXJyZW5jaWVzLmxlbmd0aH1cbiAgICAgIG9uVmFsdWVDaGFuZ2U9e29uQ2hhbmdlfVxuICAgID5cbiAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgPFNlbGVjdC5WYWx1ZVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtcbiAgICAgICAgICAgIGN1cnJlbmNpZXMubGVuZ3RoID8gXCJTZWxlY3QgY3VycmVuY3lcIiA6IFwiTm8gY3VycmVuY2llcyBhdmFpbGFibGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgIHtjdXJyZW5jaWVzLm1hcCgoY3VycmVuY3kpID0+IChcbiAgICAgICAgICA8U2VsZWN0Lkl0ZW0ga2V5PXtjdXJyZW5jeS5jb2RlfSB2YWx1ZT17Y3VycmVuY3kuY29kZX0+XG4gICAgICAgICAgICB7Y3VycmVuY3kubmFtZX0gKHtjdXJyZW5jeS5jb2RlLnRvVXBwZXJDYXNlKCl9KVxuICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICkpfVxuICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICA8L1NlbGVjdD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDdXJyZW5jeUFtb3VudEZpZWxkKHtcbiAgY3VycmVuY2llcyxcbiAgY3VycmVuY3lDb2RlLFxuICBvbkNoYW5nZSxcbiAgdmFsdWUsXG59OiB7XG4gIGN1cnJlbmNpZXM6IEN1cnJlbmN5T3B0aW9uW11cbiAgY3VycmVuY3lDb2RlOiBzdHJpbmdcbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIHZhbHVlOiBzdHJpbmdcbn0pIHtcbiAgY29uc3QgY3VycmVuY3kgPSBjdXJyZW5jaWVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uY29kZSA9PT0gY3VycmVuY3lDb2RlKVxuICBjb25zdCBjb2RlID0gY3VycmVuY3lDb2RlLnRvVXBwZXJDYXNlKClcbiAgY29uc3QgZGVjaW1hbHMgPSBjdXJyZW5jeURlY2ltYWxEaWdpdHMoY29kZSB8fCBcIlVTRFwiKVxuICByZXR1cm4gKFxuICAgIDxDdXJyZW5jeUlucHV0XG4gICAgICBjb2RlPXtjb2RlIHx8IFwiVVNEXCJ9XG4gICAgICBzeW1ib2w9e1xuICAgICAgICBjdXJyZW5jeT8uc3ltYm9sX25hdGl2ZSB8fFxuICAgICAgICBjdXJyZW5jeT8uc3ltYm9sIHx8XG4gICAgICAgIGN1cnJlbmN5U3ltYm9sKGNvZGUgfHwgXCJVU0RcIilcbiAgICAgIH1cbiAgICAgIG1pbj17MH1cbiAgICAgIGRlY2ltYWxTY2FsZT17ZGVjaW1hbHN9XG4gICAgICBkZWNpbWFsc0xpbWl0PXtkZWNpbWFsc31cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIGRpc2FibGVkPXshY3VycmVuY3lDb2RlfVxuICAgICAgb25WYWx1ZUNoYW5nZT17KG5leHRWYWx1ZSkgPT4gb25DaGFuZ2UobmV4dFZhbHVlIHx8IFwiXCIpfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gUGVyY2VudGFnZUlucHV0KHtcbiAgb25DaGFuZ2UsXG4gIHZhbHVlLFxufToge1xuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgdmFsdWU6IHN0cmluZ1xufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtc3RyZXRjaFwiIHN0eWxlPXt7IHdpZHRoOiBcIjEwMCVcIiB9fT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiYmctdWktYmctZmllbGQgdGV4dC11aS1mZy1tdXRlZCBmbGV4IGl0ZW1zLWNlbnRlciBib3JkZXJcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGJvcmRlckNvbG9yOiBcInZhcigtLWJvcmRlci1iYXNlKVwiLFxuICAgICAgICAgIGJvcmRlclJhZGl1czogXCI2cHggMCAwIDZweFwiLFxuICAgICAgICAgIGJvcmRlclJpZ2h0OiAwLFxuICAgICAgICAgIHBhZGRpbmc6IFwiMCAxMnB4XCIsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgICVcbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJtaW4tdy0wIGZsZXgtMVwiXG4gICAgICAgIHN0eWxlPXt7IGZsZXg6IFwiMSAxIDAlXCIsIG1pbldpZHRoOiAwIH19XG4gICAgICA+XG4gICAgICAgIDxJbnB1dFxuICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbFwiXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgbWluPXsxfVxuICAgICAgICAgIG1heD17MTAwfVxuICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjAgNnB4IDZweCAwXCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiBvbkNoYW5nZShldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZnVuY3Rpb24gSGFuZGxlSW5wdXQoe1xuICBvbkNoYW5nZSxcbiAgdmFsdWUsXG59OiB7XG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuICB2YWx1ZTogc3RyaW5nXG59KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkIHBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgaW5zZXQteS0wIGxlZnQtMCB6LTEwIGZsZXggbWluLXctOCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLXIgcHgtMi41XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInR4dC1jb21wYWN0LXNtYWxsIGZvbnQtbWVkaXVtXCI+Lzwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPElucHV0XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ3aW50ZXItamFja2V0XCJcbiAgICAgICAgc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IDM0IH19XG4gICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+IG9uQ2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSl9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmZ1bmN0aW9uIE1lZGlhVXBsb2FkKHtcbiAgaXNVcGxvYWRpbmcsXG4gIG1lZGlhLFxuICBvblJlbW92ZSxcbiAgb25VcGxvYWQsXG59OiB7XG4gIGlzVXBsb2FkaW5nOiBib29sZWFuXG4gIG1lZGlhOiBQcm9kdWN0TWVkaWFbXVxuICBvblJlbW92ZTogKG1lZGlhOiBQcm9kdWN0TWVkaWEpID0+IHZvaWRcbiAgb25VcGxvYWQ6IChmaWxlczogRmlsZVtdKSA9PiB2b2lkXG59KSB7XG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGFjY2VwdCA9XG4gICAgXCJpbWFnZS9qcGVnLGltYWdlL3BuZyxpbWFnZS9naWYsaW1hZ2Uvd2VicCxpbWFnZS9oZWljLGltYWdlL3N2Zyt4bWxcIlxuXG4gIGNvbnN0IGhhbmRsZUZpbGVzID0gKGZpbGVzOiBGaWxlTGlzdCB8IG51bGwpID0+IHtcbiAgICBpZiAoIWZpbGVzPy5sZW5ndGgpIHJldHVyblxuICAgIG9uVXBsb2FkKEFycmF5LmZyb20oZmlsZXMpKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJvcCA9IChldmVudDogRHJhZ0V2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICBoYW5kbGVGaWxlcyhldmVudC5kYXRhVHJhbnNmZXIuZmlsZXMpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAteS0zXCI+XG4gICAgICB7bWVkaWEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJncmlkIGdhcC0zXCJcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCJyZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTIwcHgsIDFmcikpXCIsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHttZWRpYS5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGtleT17aXRlbS5hc3NldF9pZCB8fCBpdGVtLnVybH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbWQgYm9yZGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz17aXRlbS51cmx9XG4gICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTMyIHctZnVsbCBvYmplY3QtY292ZXJcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogMTI4IH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQteC0wIGJvdHRvbS0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBiZy1ibGFjay82MCBweC0yIHB5LTFcIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwieHNtYWxsXCIgc3R5bGU9e3sgY29sb3I6IFwid2hpdGVcIiB9fT5cbiAgICAgICAgICAgICAgICAgIHtpbmRleCA9PT0gMCA/IFwiVGh1bWJuYWlsXCIgOiBgSW1hZ2UgJHtpbmRleCArIDF9YH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVtb3ZlIGltYWdlXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiBcIndoaXRlXCIgfX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uUmVtb3ZlKGl0ZW0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxYTWFya01pbmkgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPGlucHV0XG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgaGlkZGVuXG4gICAgICAgIG11bHRpcGxlXG4gICAgICAgIGFjY2VwdD17YWNjZXB0fVxuICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgaGFuZGxlRmlsZXMoZXZlbnQudGFyZ2V0LmZpbGVzKVxuICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IFwiXCJcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBkaXNhYmxlZD17aXNVcGxvYWRpbmd9XG4gICAgICAgIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWQgZmxleCB3LWZ1bGwgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC15LTIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWRhc2hlZCBwLThcIlxuICAgICAgICBzdHlsZT17eyBtaW5IZWlnaHQ6IDE0OCB9fVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBpbnB1dFJlZi5jdXJyZW50Py5jbGljaygpfVxuICAgICAgICBvbkRyYWdPdmVyPXsoZXZlbnQpID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCl9XG4gICAgICAgIG9uRHJvcD17aGFuZGxlRHJvcH1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC11aS1mZy1iYXNlIGZsZXggaXRlbXMtY2VudGVyIGdhcC14LTJcIj5cbiAgICAgICAgICA8QXJyb3dVcFRyYXkgLz5cbiAgICAgICAgICB7aXNVcGxvYWRpbmcgPyBcIlVwbG9hZGluZyBpbWFnZXMuLi5cIiA6IFwiVXBsb2FkIGltYWdlc1wifVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICBEcmFnIGFuZCBkcm9wIGltYWdlcyBoZXJlIG9yIGNsaWNrIHRvIHVwbG9hZC5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIClcbn1cblxudHlwZSBDb25kaXRpb25WYWx1ZU9wdGlvbiA9IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9XG5cbmZ1bmN0aW9uIGNvbmRpdGlvblZhbHVlT3B0aW9ucyhcbiAgYXR0cmlidXRlOiBQdXJjaGFzZUNvbmRpdGlvbkF0dHJpYnV0ZSB8IFwiXCIsXG4gIG9wdGlvbnM6IE9wdGlvbnNQYXlsb2FkLFxuKTogQ29uZGl0aW9uVmFsdWVPcHRpb25bXSB7XG4gIGlmIChhdHRyaWJ1dGUgPT09IFwiY3VycmVuY3lfY29kZVwiKSB7XG4gICAgcmV0dXJuIChvcHRpb25zLmN1cnJlbmNpZXMgfHwgW10pLm1hcCgoY3VycmVuY3kpID0+ICh7XG4gICAgICB2YWx1ZTogY3VycmVuY3kuY29kZSxcbiAgICAgIGxhYmVsOiBgJHtjdXJyZW5jeS5uYW1lfSAoJHtjdXJyZW5jeS5jb2RlLnRvVXBwZXJDYXNlKCl9KWAsXG4gICAgfSkpXG4gIH1cbiAgaWYgKGF0dHJpYnV0ZSA9PT0gXCJzaGlwcGluZ19hZGRyZXNzLmNvdW50cnlfY29kZVwiKSB7XG4gICAgcmV0dXJuIChvcHRpb25zLmNvdW50cmllcyB8fCBbXSkubWFwKChjb3VudHJ5KSA9PiAoe1xuICAgICAgdmFsdWU6IFN0cmluZyhjb3VudHJ5Lmlzb18yIHx8IGNvdW50cnkuaWQpLnRvTG93ZXJDYXNlKCksXG4gICAgICBsYWJlbDogY291bnRyeS5kaXNwbGF5X25hbWUgfHwgY291bnRyeS5uYW1lIHx8IGNvdW50cnkuaWQsXG4gICAgfSkpXG4gIH1cblxuICBjb25zdCByZWNvcmRzID1cbiAgICBhdHRyaWJ1dGUgPT09IFwiY3VzdG9tZXIuZ3JvdXBzLmlkXCJcbiAgICAgID8gb3B0aW9ucy5jdXN0b21lcl9ncm91cHNcbiAgICAgIDogYXR0cmlidXRlID09PSBcInJlZ2lvbi5pZFwiXG4gICAgICAgID8gb3B0aW9ucy5yZWdpb25zXG4gICAgICAgIDogYXR0cmlidXRlID09PSBcInNhbGVzX2NoYW5uZWxfaWRcIlxuICAgICAgICAgID8gb3B0aW9ucy5zYWxlc19jaGFubmVsc1xuICAgICAgICAgIDogW11cbiAgcmV0dXJuIChyZWNvcmRzIHx8IFtdKS5tYXAoKHJlY29yZCkgPT4gKHtcbiAgICB2YWx1ZTogcmVjb3JkLmlkLFxuICAgIGxhYmVsOiBvcHRpb25MYWJlbChyZWNvcmQpLFxuICB9KSlcbn1cblxuZnVuY3Rpb24gTXVsdGlDb25kaXRpb25WYWx1ZXMoe1xuICBhdHRyaWJ1dGUsXG4gIG9uQ2hhbmdlLFxuICBvcHRpb25zLFxuICB2YWx1ZSxcbn06IHtcbiAgYXR0cmlidXRlOiBQdXJjaGFzZUNvbmRpdGlvbkF0dHJpYnV0ZVxuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmdbXSkgPT4gdm9pZFxuICBvcHRpb25zOiBDb25kaXRpb25WYWx1ZU9wdGlvbltdXG4gIHZhbHVlOiBzdHJpbmdbXVxufSkge1xuICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2RyYWZ0LCBzZXREcmFmdF0gPSB1c2VTdGF0ZSh2YWx1ZSlcbiAgY29uc3QgW3NlYXJjaCwgc2V0U2VhcmNoXSA9IHVzZVN0YXRlKFwiXCIpXG4gIGNvbnN0IGxhYmVscyA9IE9iamVjdC5mcm9tRW50cmllcyhvcHRpb25zLm1hcCgob3B0aW9uKSA9PiBbb3B0aW9uLnZhbHVlLCBvcHRpb24ubGFiZWxdKSlcbiAgY29uc3QgZmlsdGVyZWQgPSBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PlxuICAgIG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50cmltKCkudG9Mb3dlckNhc2UoKSksXG4gIClcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnRcIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgc2V0RHJhZnQodmFsdWUpXG4gICAgICAgICAgc2V0U2VhcmNoKFwiXCIpXG4gICAgICAgICAgc2V0T3Blbih0cnVlKVxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dmFsdWUubGVuZ3RoXG4gICAgICAgICAgPyB2YWx1ZS5sZW5ndGggPT09IDFcbiAgICAgICAgICAgID8gbGFiZWxzW3ZhbHVlWzBdXSB8fCB2YWx1ZVswXVxuICAgICAgICAgICAgOiBgJHt2YWx1ZS5sZW5ndGh9IHZhbHVlcyBzZWxlY3RlZGBcbiAgICAgICAgICA6IFwiU2VsZWN0IHZhbHVlc1wifVxuICAgICAgPC9CdXR0b24+XG4gICAgICB7dmFsdWUubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmbGV4IGZsZXgtd3JhcCBnYXAtMVwiPlxuICAgICAgICAgIHt2YWx1ZS5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGtleT17aXRlbX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctdWktYmctY29tcG9uZW50IHRleHQtdWktZmctc3VidGxlIGZsZXggaXRlbXMtY2VudGVyIGdhcC14LTEgcm91bmRlZC1tZCBib3JkZXIgcHgtMiBweS0xIHRleHQteHNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bGFiZWxzW2l0ZW1dIHx8IGl0ZW19XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtgUmVtb3ZlICR7bGFiZWxzW2l0ZW1dIHx8IGl0ZW19YH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh2YWx1ZS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeSAhPT0gaXRlbSkpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFhNYXJrTWluaSAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPERyYXdlciBvcGVuPXtvcGVufSBvbk9wZW5DaGFuZ2U9e3NldE9wZW59PlxuICAgICAgICA8RHJhd2VyLkNvbnRlbnQ+XG4gICAgICAgICAgPERyYXdlci5IZWFkZXI+XG4gICAgICAgICAgICA8RHJhd2VyLlRpdGxlPlxuICAgICAgICAgICAgICBTZWxlY3Qge2NvbmRpdGlvbkF0dHJpYnV0ZXMuZmluZCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gYXR0cmlidXRlKT8ubGFiZWx9XG4gICAgICAgICAgICA8L0RyYXdlci5UaXRsZT5cbiAgICAgICAgICA8L0RyYXdlci5IZWFkZXI+XG4gICAgICAgICAgPERyYXdlci5Cb2R5IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktMyBvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICB2YWx1ZT17c2VhcmNofVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCB2YWx1ZXNcIlxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiBzZXRTZWFyY2goZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7ZmlsdGVyZWQubGVuZ3RoID8gKFxuICAgICAgICAgICAgICBmaWx0ZXJlZC5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAga2V5PXtvcHRpb24udmFsdWV9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBnYXAteC0zIHJvdW5kZWQtbWQgYm9yZGVyIHAtM1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2RyYWZ0LmluY2x1ZGVzKG9wdGlvbi52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RHJhZnQoKGN1cnJlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi5jdXJyZW50LCBvcHRpb24udmFsdWVdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50LmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSBvcHRpb24udmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxUZXh0PntvcHRpb24ubGFiZWx9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VGV4dCBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+Tm8gbWF0Y2hpbmcgdmFsdWVzLjwvVGV4dD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9EcmF3ZXIuQm9keT5cbiAgICAgICAgICA8RHJhd2VyLkZvb3Rlcj5cbiAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKSA9PiBzZXRPcGVuKGZhbHNlKX0+XG4gICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBkaXNhYmxlZD17IWRyYWZ0Lmxlbmd0aH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIG9uQ2hhbmdlKGRyYWZ0KVxuICAgICAgICAgICAgICAgIHNldE9wZW4oZmFsc2UpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEFwcGx5XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L0RyYXdlci5Gb290ZXI+XG4gICAgICAgIDwvRHJhd2VyLkNvbnRlbnQ+XG4gICAgICA8L0RyYXdlcj5cbiAgICA8Lz5cbiAgKVxufVxuXG5mdW5jdGlvbiBQdXJjaGFzZUNvbmRpdGlvbnNGaWVsZCh7XG4gIGZpeGVkQW1vdW50LFxuICBvbkNoYW5nZSxcbiAgb3B0aW9ucyxcbiAgdmFsdWUsXG59OiB7XG4gIGZpeGVkQW1vdW50OiBib29sZWFuXG4gIG9uQ2hhbmdlOiAoY29uZGl0aW9uczogUHVyY2hhc2VDb25kaXRpb25Gb3JtW10pID0+IHZvaWRcbiAgb3B0aW9uczogT3B0aW9uc1BheWxvYWRcbiAgdmFsdWU6IFB1cmNoYXNlQ29uZGl0aW9uRm9ybVtdXG59KSB7XG4gIGNvbnN0IHNlbGVjdGVkQXR0cmlidXRlcyA9IG5ldyBTZXQoXG4gICAgdmFsdWUubWFwKChjb25kaXRpb24pID0+IGNvbmRpdGlvbi5hdHRyaWJ1dGUpLmZpbHRlcihCb29sZWFuKSxcbiAgKVxuXG4gIGNvbnN0IHJlcGxhY2UgPSAoa2V5OiBzdHJpbmcsIHVwZGF0ZTogUGFydGlhbDxQdXJjaGFzZUNvbmRpdGlvbkZvcm0+KSA9PlxuICAgIG9uQ2hhbmdlKFxuICAgICAgdmFsdWUubWFwKChjb25kaXRpb24pID0+XG4gICAgICAgIGNvbmRpdGlvbi5rZXkgPT09IGtleSA/IHsgLi4uY29uZGl0aW9uLCAuLi51cGRhdGUgfSA6IGNvbmRpdGlvbixcbiAgICAgICksXG4gICAgKVxuXG4gIHJldHVybiAoXG4gICAgPFNlY3Rpb25cbiAgICAgIHRpdGxlPVwiV2hvIGNhbiBwdXJjaGFzZSB0aGlzIGNvdXBvbj9cIlxuICAgICAgZGVzY3JpcHRpb249XCJDb3Vwb24gcHJvZHVjdHMgY2FuIGJlIHB1cmNoYXNlZCBieSBhbGwgY3VzdG9tZXJzIHdoZW4gbm8gY29uZGl0aW9ucyBhcmUgY29uZmlndXJlZC4gQ29uZGl0aW9ucyBhcmUgY29tYmluZWQgd2l0aCBBTkQuXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktM1wiPlxuICAgICAgICB7dmFsdWUubWFwKChjb25kaXRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gY29uZGl0aW9uVmFsdWVPcHRpb25zKGNvbmRpdGlvbi5hdHRyaWJ1dGUsIG9wdGlvbnMpXG4gICAgICAgICAgY29uc3QgY3VycmVuY3lSZXF1aXJlZCA9XG4gICAgICAgICAgICBmaXhlZEFtb3VudCAmJiBjb25kaXRpb24uYXR0cmlidXRlID09PSBcImN1cnJlbmN5X2NvZGVcIlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGtleT17Y29uZGl0aW9uLmtleX0+XG4gICAgICAgICAgICAgIHtpbmRleCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZCBmbGV4IGgtOCBpdGVtcy1jZW50ZXIgdGV4dC14cyBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgQU5EXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3BhbmVsU3R5bGV9IGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXggZmxleC1jb2wgZ2FwLXktM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1zdGFydCBnYXAteC0yXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvbmRpdGlvbi5hdHRyaWJ1dGUgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjdXJyZW5jeVJlcXVpcmVkfVxuICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyhhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlKGNvbmRpdGlvbi5rZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlOiBhdHRyaWJ1dGUgYXMgUHVyY2hhc2VDb25kaXRpb25BdHRyaWJ1dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGF0dHJpYnV0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29uZGl0aW9uQXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUudmFsdWUgPT09IGNvbmRpdGlvbi5hdHRyaWJ1dGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZEF0dHJpYnV0ZXMuaGFzKGF0dHJpYnV0ZS52YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoYXR0cmlidXRlKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIGtleT17YXR0cmlidXRlLnZhbHVlfSB2YWx1ZT17YXR0cmlidXRlLnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHthdHRyaWJ1dGUubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjdXJyZW5jeVJlcXVpcmVkfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVtb3ZlIGNvbmRpdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2UodmFsdWUuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtleSAhPT0gY29uZGl0aW9uLmtleSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFhNYXJrTWluaSAvPlxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvbmRpdGlvbi5vcGVyYXRvciB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY29uZGl0aW9uLmF0dHJpYnV0ZX1cbiAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KG9wZXJhdG9yKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2UoY29uZGl0aW9uLmtleSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yIGFzIFB1cmNoYXNlQ29uZGl0aW9uT3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSBcImVxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNvbmRpdGlvbi52YWx1ZXMuc2xpY2UoMCwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbmRpdGlvbi52YWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSBwbGFjZWhvbGRlcj1cIlNlbGVjdCBvcGVyYXRvclwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICB7Y29uZGl0aW9uT3BlcmF0b3JzLm1hcCgob3BlcmF0b3IpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSBrZXk9e29wZXJhdG9yLnZhbHVlfSB2YWx1ZT17b3BlcmF0b3IudmFsdWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7b3BlcmF0b3IubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICB7Y29uZGl0aW9uLmF0dHJpYnV0ZSAmJiBjb25kaXRpb24ub3BlcmF0b3IgPT09IFwiZXFcIiA/IChcbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb25kaXRpb24udmFsdWVzWzBdIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsoc2VsZWN0ZWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlKGNvbmRpdGlvbi5rZXksIHsgdmFsdWVzOiBbc2VsZWN0ZWRdIH0pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSBwbGFjZWhvbGRlcj1cIlNlbGVjdCB2YWx1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFsdWVzLm1hcCgob3B0aW9uKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSBrZXk9e29wdGlvbi52YWx1ZX0gdmFsdWU9e29wdGlvbi52YWx1ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgKSA6IGNvbmRpdGlvbi5hdHRyaWJ1dGUgJiYgY29uZGl0aW9uLm9wZXJhdG9yID8gKFxuICAgICAgICAgICAgICAgICAgICA8TXVsdGlDb25kaXRpb25WYWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGU9e2NvbmRpdGlvbi5hdHRyaWJ1dGV9XG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17dmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb25kaXRpb24udmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsodmFsdWVzKSA9PiByZXBsYWNlKGNvbmRpdGlvbi5rZXksIHsgdmFsdWVzIH0pfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cInNlY29uZGFyeVwiIGRpc2FibGVkIGNsYXNzTmFtZT1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLXgtMlwiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRBdHRyaWJ1dGVzLnNpemUgPj0gY29uZGl0aW9uQXR0cmlidXRlcy5sZW5ndGh9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICBvbkNoYW5nZShbXG4gICAgICAgICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgICAgICAgeyBrZXk6IGNvbmRpdGlvbktleSgpLCBhdHRyaWJ1dGU6IFwiXCIsIG9wZXJhdG9yOiBcIlwiLCB2YWx1ZXM6IFtdIH0sXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFBsdXMgLz4gQWRkIGNvbmRpdGlvblxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdmFyaWFudD1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgIG9uQ2hhbmdlKGZpeGVkQW1vdW50ID8gZGVmYXVsdFB1cmNoYXNlQ29uZGl0aW9ucyhvcHRpb25zKSA6IFtdKVxuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIENsZWFyIGFsbFxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvU2VjdGlvbj5cbiAgKVxufVxuXG5mdW5jdGlvbiBQcm9kdWN0UHJpY2VzVGFibGUoe1xuICBjdXJyZW5jaWVzLFxuICBjb3Vwb25WYWx1ZSxcbiAgb25DaGFuZ2UsXG4gIHByaWNlcyxcbn06IHtcbiAgY3VycmVuY2llczogQ3VycmVuY3lPcHRpb25bXVxuICBjb3Vwb25WYWx1ZTogc3RyaW5nXG4gIG9uQ2hhbmdlOiAoY3VycmVuY3lDb2RlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgcHJpY2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG59KSB7XG4gIGNvbnN0IFt2aXNpYmxlQ3VycmVuY2llcywgc2V0VmlzaWJsZUN1cnJlbmNpZXNdID0gdXNlU3RhdGU8c3RyaW5nW10+KCgpID0+XG4gICAgY3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiBjdXJyZW5jeS5jb2RlKSxcbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0VmlzaWJsZUN1cnJlbmNpZXMoKGN1cnJlbnQpID0+IHtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZSA9IG5ldyBTZXQoY3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiBjdXJyZW5jeS5jb2RlKSlcbiAgICAgIGNvbnN0IHJldGFpbmVkID0gY3VycmVudC5maWx0ZXIoKGNvZGUpID0+IGF2YWlsYWJsZS5oYXMoY29kZSkpXG4gICAgICBjb25zdCBhZGRlZCA9IGN1cnJlbmNpZXNcbiAgICAgICAgLm1hcCgoY3VycmVuY3kpID0+IGN1cnJlbmN5LmNvZGUpXG4gICAgICAgIC5maWx0ZXIoKGNvZGUpID0+ICFjdXJyZW50LmluY2x1ZGVzKGNvZGUpKVxuICAgICAgcmV0dXJuIFsuLi5yZXRhaW5lZCwgLi4uYWRkZWRdXG4gICAgfSlcbiAgfSwgW2N1cnJlbmNpZXNdKVxuXG4gIGNvbnN0IHNob3duQ3VycmVuY2llcyA9IGN1cnJlbmNpZXMuZmlsdGVyKChjdXJyZW5jeSkgPT5cbiAgICB2aXNpYmxlQ3VycmVuY2llcy5pbmNsdWRlcyhjdXJyZW5jeS5jb2RlKSxcbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHNpemUtZnVsbCBmbGV4LWNvbCBkaXZpZGUteSBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctdWktYmctc3VidGxlIGZsZXggc2l6ZS1mdWxsIGZsZXgtY29sXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctdWktYmctYmFzZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gYm9yZGVyLWIgcC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0yXCI+XG4gICAgICAgICAgICA8RHJvcGRvd25NZW51PlxuICAgICAgICAgICAgICA8RHJvcGRvd25NZW51LlRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBzaXplPVwic21hbGxcIiB2YXJpYW50PVwic2Vjb25kYXJ5XCI+XG4gICAgICAgICAgICAgICAgICA8QWRqdXN0bWVudHMgLz5cbiAgICAgICAgICAgICAgICAgIFZpZXdcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9Ecm9wZG93bk1lbnUuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgPERyb3Bkb3duTWVudS5Db250ZW50IGFsaWduPVwic3RhcnRcIj5cbiAgICAgICAgICAgICAgICB7Y3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8RHJvcGRvd25NZW51LkNoZWNrYm94SXRlbVxuICAgICAgICAgICAgICAgICAgICBrZXk9e2N1cnJlbmN5LmNvZGV9XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Zpc2libGVDdXJyZW5jaWVzLmluY2x1ZGVzKGN1cnJlbmN5LmNvZGUpfVxuICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldFZpc2libGVDdXJyZW5jaWVzKChjdXJyZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IEFycmF5LmZyb20obmV3IFNldChbLi4uY3VycmVudCwgY3VycmVuY3kuY29kZV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuZmlsdGVyKChjb2RlKSA9PiBjb2RlICE9PSBjdXJyZW5jeS5jb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgUHJpY2Uge2N1cnJlbmN5LmNvZGUudG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51LkNoZWNrYm94SXRlbT5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9Ecm9wZG93bk1lbnUuQ29udGVudD5cbiAgICAgICAgICAgIDwvRHJvcGRvd25NZW51PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLXgtMlwiIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2l6ZS1mdWxsIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICA8VGFibGVcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGJvcmRlckNvbGxhcHNlOiBcImNvbGxhcHNlXCIsXG4gICAgICAgICAgICAgIHRhYmxlTGF5b3V0OiBcImZpeGVkXCIsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIm1heC1jb250ZW50XCJcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRhYmxlLkhlYWRlciBzdHlsZT17eyBib3JkZXJUb3A6IFwibm9uZVwiIH19PlxuICAgICAgICAgICAgICA8VGFibGUuUm93IHN0eWxlPXt7IGhlaWdodDogNDAgfX0+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGxcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IFwidmFyKC0tYmctYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tOiBcIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1iYXNlKVwiLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogMjAwLFxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogMjAwLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjAgMTZweFwiLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJzdGlja3lcIixcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgekluZGV4OiAxLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDb3Vwb24gVmFsdWVcbiAgICAgICAgICAgICAgICA8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAge3Nob3duQ3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbFxuICAgICAgICAgICAgICAgICAgICBrZXk9e2N1cnJlbmN5LmNvZGV9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogXCJ2YXIoLS1iZy1iYXNlKVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgdmFyKC0tYm9yZGVyLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1iYXNlKVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogMjAwLFxuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMCAxNnB4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidHJ1bmNhdGVcIiB0aXRsZT17YFByaWNlICR7Y3VycmVuY3kuY29kZS50b1VwcGVyQ2FzZSgpfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJpY2Uge2N1cnJlbmN5LmNvZGUudG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAge2N1cnJlbmN5LmlzX3RheF9pbmNsdXNpdmUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGF4SW5jbHVzaXZlIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWQgc2hyaW5rLTBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGF4RXhjbHVzaXZlIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWQgc2hyaW5rLTBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgIDwvVGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgICAgICAgIDxUYWJsZS5Sb3cgY2xhc3NOYW1lPVwiYmctdWktYmctc3VidGxlXCIgc3R5bGU9e3sgaGVpZ2h0OiA0MCB9fT5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbFxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogXCJ2YXIoLS1iZy1zdWJ0bGUpXCIsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgdmFyKC0tYm9yZGVyLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIwIDE2cHhcIixcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFwic3RpY2t5XCIsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIHpJbmRleDogMSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmxvY2sgdHJ1bmNhdGVcIj57Y291cG9uVmFsdWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICB7c2hvd25DdXJyZW5jaWVzLm1hcCgoY3VycmVuY3kpID0+IChcbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsXG4gICAgICAgICAgICAgICAgICAgIGtleT17Y3VycmVuY3kuY29kZX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBcInZhcigtLWJnLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tOiBcIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSaWdodDogXCIxcHggc29saWQgdmFyKC0tYm9yZGVyLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogMjAwLFxuICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjAwLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8VGFibGVQcmljZUlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3k9e2N1cnJlbmN5fVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcmljZXNbY3VycmVuY3kuY29kZV0gfHwgXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PiBvbkNoYW5nZShjdXJyZW5jeS5jb2RlLCB2YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgIDwvVGFibGU+XG5cbiAgICAgICAgICB7IWN1cnJlbmNpZXMubGVuZ3RoICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC00XCI+XG4gICAgICAgICAgICAgIDxUZXh0IGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICBBZGQgYSBzdXBwb3J0ZWQgY3VycmVuY3kgdG8gdGhlIHN0b3JlIGJlZm9yZSBzZXR0aW5nIHByaWNlcy5cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Q291cG9uVmFsdWUoXG4gIGNvdXBvbjogUGljazxDb3Vwb25Gb3JtU3RhdGUsIFwiYW1vdW50c1wiIHwgXCJwZXJjZW50YWdlXCIgfCBcInR5cGVcIj4sXG4gIGN1cnJlbmNpZXM6IFBpY2s8Q3VycmVuY3lPcHRpb24sIFwiY29kZVwiIHwgXCJpc19kZWZhdWx0XCI+W10sXG4pIHtcbiAgaWYgKFxuICAgIGNvdXBvbi50eXBlID09PSBcImFtb3VudF9vZmZfcHJvZHVjdHNcIiB8fFxuICAgIGNvdXBvbi50eXBlID09PSBcImFtb3VudF9vZmZfb3JkZXJcIlxuICApIHtcbiAgICBjb25zdCBkZWZhdWx0Q29kZSA9XG4gICAgICBjdXJyZW5jaWVzLmZpbmQoKGN1cnJlbmN5KSA9PiBjdXJyZW5jeS5pc19kZWZhdWx0KT8uY29kZSB8fFxuICAgICAgY3VycmVuY2llc1swXT8uY29kZVxuICAgIGNvbnN0IHByaW1hcnkgPVxuICAgICAgY291cG9uLmFtb3VudHMuZmluZCgocm93KSA9PiByb3cuY3VycmVuY3lfY29kZSA9PT0gZGVmYXVsdENvZGUpIHx8XG4gICAgICBjb3Vwb24uYW1vdW50c1swXVxuICAgIGNvbnN0IGFtb3VudCA9IG51bWJlck9yTnVsbChwcmltYXJ5Py5hbW91bnQpXG4gICAgaWYgKGFtb3VudCA9PSBudWxsKSByZXR1cm4gXCJcdTIwMTRcIlxuICAgIGNvbnN0IGFkZGl0aW9uYWwgPSBNYXRoLm1heCgwLCBjb3Vwb24uYW1vdW50cy5sZW5ndGggLSAxKVxuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGAke2Ftb3VudH0ke3ByaW1hcnkuY3VycmVuY3lfY29kZS50b1VwcGVyQ2FzZSgpfWBcbiAgICByZXR1cm4gYWRkaXRpb25hbCA/IGAke2Zvcm1hdHRlZH0gKyR7YWRkaXRpb25hbH1gIDogZm9ybWF0dGVkXG4gIH1cblxuICBpZiAoXG4gICAgY291cG9uLnR5cGUgPT09IFwicGVyY2VudGFnZV9vZmZfcHJvZHVjdFwiIHx8XG4gICAgY291cG9uLnR5cGUgPT09IFwicGVyY2VudGFnZV9vZmZfb3JkZXJcIlxuICApIHtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gbnVtYmVyT3JOdWxsKGNvdXBvbi5wZXJjZW50YWdlKVxuICAgIGlmIChwZXJjZW50YWdlID09IG51bGwpIHJldHVybiBcIlx1MjAxNFwiXG4gICAgcmV0dXJuIGNvdXBvbi50eXBlID09PSBcInBlcmNlbnRhZ2Vfb2ZmX29yZGVyXCJcbiAgICAgID8gYCR7cGVyY2VudGFnZX0lIG9mZiBvcmRlcmBcbiAgICAgIDogYCR7cGVyY2VudGFnZX0lIG9mZiBwcm9kdWN0c2BcbiAgfVxuXG4gIHJldHVybiBjb3Vwb24udHlwZSA9PT0gXCJmcmVlX3NoaXBwaW5nXCIgPyBcIkZyZWUgc2hpcHBpbmdcIiA6IFwiQnV5IFggR2V0IFlcIlxufVxuXG5mdW5jdGlvbiBUYWJsZVByaWNlSW5wdXQoe1xuICBjdXJyZW5jeSxcbiAgb25DaGFuZ2UsXG4gIHZhbHVlLFxufToge1xuICBjdXJyZW5jeTogQ3VycmVuY3lPcHRpb25cbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIHZhbHVlOiBzdHJpbmdcbn0pIHtcbiAgY29uc3Qgc3ltYm9sID1cbiAgICBjdXJyZW5jeS5zeW1ib2xfbmF0aXZlIHx8XG4gICAgY3VycmVuY3kuc3ltYm9sIHx8XG4gICAgY3VycmVuY3lTeW1ib2woY3VycmVuY3kuY29kZSB8fCBcIlVTRFwiKVxuXG4gIHJldHVybiAoXG4gICAgPGxhYmVsXG4gICAgICBjbGFzc05hbWU9XCJiZy11aS1iZy1iYXNlIGhvdmVyOmJnLXVpLWJnLXN1YnRsZSBmb2N1cy13aXRoaW46c2hhZG93LWJvcmRlcnMtaW50ZXJhY3RpdmUtd2l0aC1hY3RpdmUgdGV4dC11aS1mZy1iYXNlXCJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgIG1hcmdpbjogMCxcbiAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICBzdHlsZT17eyBmbGV4OiBcIjAgMCA0MHB4XCIsIHBhZGRpbmdMZWZ0OiAxNiB9fVxuICAgICAgPlxuICAgICAgICB7c3ltYm9sfVxuICAgICAgPC9zcGFuPlxuICAgICAgPGlucHV0XG4gICAgICAgIGFyaWEtbGFiZWw9e2BQcmljZSAke2N1cnJlbmN5LmNvZGUudG9VcHBlckNhc2UoKX1gfVxuICAgICAgICBpbnB1dE1vZGU9XCJkZWNpbWFsXCJcbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiBvbkNoYW5nZShldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGFwcGVhcmFuY2U6IFwibm9uZVwiLFxuICAgICAgICAgIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgICAgICBib3JkZXI6IDAsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgICAgICAgIGZsZXg6IFwiMSAxIGF1dG9cIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgICAgIG1hcmdpbjogMCxcbiAgICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgICBvdXRsaW5lOiBcIm5vbmVcIixcbiAgICAgICAgICBwYWRkaW5nOiBcIjAgMTZweCAwIDBcIixcbiAgICAgICAgICB0ZXh0QWxpZ246IFwicmlnaHRcIixcbiAgICAgICAgfX1cbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgLz5cbiAgICA8L2xhYmVsPlxuICApXG59XG5cbmZ1bmN0aW9uIENvdXBvblByb2R1Y3RNb2RhbCh7XG4gIGFsbG93UHJvbW90aW9uTWlycm9yLFxuICBhcGlCYXNlLFxuICBvbk9wZW5DaGFuZ2UsXG4gIG9uU2F2ZWQsXG4gIG9wZW4sXG4gIG9wdGlvbnMsXG4gIHJvdyxcbn06IHtcbiAgYWxsb3dQcm9tb3Rpb25NaXJyb3I6IGJvb2xlYW5cbiAgYXBpQmFzZTogQXBpQmFzZVxuICBvbk9wZW5DaGFuZ2U6IChvcGVuOiBib29sZWFuKSA9PiB2b2lkXG4gIG9uU2F2ZWQ6ICgpID0+IFByb21pc2U8dm9pZD5cbiAgb3BlbjogYm9vbGVhblxuICBvcHRpb25zOiBPcHRpb25zUGF5bG9hZFxuICByb3c6IENvdXBvblByb2R1Y3RSb3cgfCBudWxsXG59KSB7XG4gIGNvbnN0IFthY3RpdmVTdGVwLCBzZXRBY3RpdmVTdGVwXSA9IHVzZVN0YXRlPFdpemFyZFN0ZXA+KFwiZGV0YWlsc1wiKVxuICBjb25zdCBbcHJvZHVjdCwgc2V0UHJvZHVjdF0gPSB1c2VTdGF0ZTxQcm9kdWN0Rm9ybVN0YXRlPigoKSA9PlxuICAgIGVtcHR5UHJvZHVjdChvcHRpb25zKSxcbiAgKVxuICBjb25zdCBbY291cG9uLCBzZXRDb3Vwb25dID0gdXNlU3RhdGU8Q291cG9uRm9ybVN0YXRlPigoKSA9PlxuICAgIGVtcHR5Q291cG9uKG9wdGlvbnMpLFxuICApXG4gIGNvbnN0IFtjYW1wYWlnbiwgc2V0Q2FtcGFpZ25dID0gdXNlU3RhdGU8Q2FtcGFpZ25Gb3JtU3RhdGU+KGVtcHR5Q2FtcGFpZ24pXG4gIGNvbnN0IFtzYXZpbmcsIHNldFNhdmluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3VwbG9hZGluZywgc2V0VXBsb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZnVydGhlc3RTdGVwSW5kZXgsIHNldEZ1cnRoZXN0U3RlcEluZGV4XSA9IHVzZVN0YXRlKDApXG5cbiAgY29uc3QgdmlzaWJsZVN0ZXBzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYWxsb3dQcm9tb3Rpb25NaXJyb3JcbiAgICAgICAgPyBhbGxTdGVwc1xuICAgICAgICA6IGFsbFN0ZXBzLmZpbHRlcigoc3RlcCkgPT4gc3RlcCAhPT0gXCJjYW1wYWlnblwiKSxcbiAgICBbYWxsb3dQcm9tb3Rpb25NaXJyb3JdLFxuICApXG4gIGNvbnN0IGN1cnJlbnRTdGVwSW5kZXggPSB2aXNpYmxlU3RlcHMuaW5kZXhPZihhY3RpdmVTdGVwKVxuICBjb25zdCBjdXJyZW5jaWVzID0gb3B0aW9ucy5jdXJyZW5jaWVzIHx8IFtdXG4gIGNvbnN0IHN1cHBvcnRlZEN1cnJlbmN5Q29kZXMgPSB1c2VNZW1vKFxuICAgICgpID0+IG5ldyBTZXQoY3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiBjdXJyZW5jeS5jb2RlKSksXG4gICAgW2N1cnJlbmNpZXNdLFxuICApXG4gIGNvbnN0IGlzQW1vdW50VHlwZSA9XG4gICAgY291cG9uLnR5cGUgPT09IFwiYW1vdW50X29mZl9wcm9kdWN0c1wiIHx8IGNvdXBvbi50eXBlID09PSBcImFtb3VudF9vZmZfb3JkZXJcIlxuICBjb25zdCBpc1BlcmNlbnRhZ2VUeXBlID1cbiAgICBjb3Vwb24udHlwZSA9PT0gXCJwZXJjZW50YWdlX29mZl9wcm9kdWN0XCIgfHxcbiAgICBjb3Vwb24udHlwZSA9PT0gXCJwZXJjZW50YWdlX29mZl9vcmRlclwiXG4gIGNvbnN0IGlzSXRlbVNjb3BlZERpc2NvdW50ID1cbiAgICBjb3Vwb24udHlwZSA9PT0gXCJhbW91bnRfb2ZmX3Byb2R1Y3RzXCIgfHxcbiAgICBjb3Vwb24udHlwZSA9PT0gXCJwZXJjZW50YWdlX29mZl9wcm9kdWN0XCJcbiAgY29uc3QgZWZmZWN0aXZlQ3VycmVuY2llcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZWZmZWN0aXZlQ291cG9uQ3VycmVuY2llcyhjb3Vwb24ucHVyY2hhc2VfY29uZGl0aW9ucywgY3VycmVuY2llcyksXG4gICAgW2NvdXBvbi5wdXJjaGFzZV9jb25kaXRpb25zLCBjdXJyZW5jaWVzXSxcbiAgKVxuICBjb25zdCBwcm9kdWN0UHJpY2VzID0gY3VycmVuY2llcy5mbGF0TWFwKChjdXJyZW5jeSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gcHJvZHVjdC5wcmljZV9hbW91bnRzW2N1cnJlbmN5LmNvZGVdIHx8IFwiXCJcbiAgICBjb25zdCBhbW91bnQgPSBub25OZWdhdGl2ZU51bWJlck9yTnVsbCh2YWx1ZSlcbiAgICByZXR1cm4gYW1vdW50ID09IG51bGwgPyBbXSA6IFt7IGN1cnJlbmN5X2NvZGU6IGN1cnJlbmN5LmNvZGUsIGFtb3VudCB9XVxuICB9KVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSByZXR1cm5cbiAgICBjb25zdCBmb3JtcyA9IHJvd1xuICAgICAgPyBmb3Jtc0Zyb21Sb3cocm93LCBvcHRpb25zKVxuICAgICAgOiB7XG4gICAgICAgIHByb2R1Y3Q6IGVtcHR5UHJvZHVjdChvcHRpb25zKSxcbiAgICAgICAgY291cG9uOiBlbXB0eUNvdXBvbihvcHRpb25zKSxcbiAgICAgICAgY2FtcGFpZ246IGVtcHR5Q2FtcGFpZ24sXG4gICAgICB9XG4gICAgc2V0UHJvZHVjdChmb3Jtcy5wcm9kdWN0KVxuICAgIHNldENvdXBvbihmb3Jtcy5jb3Vwb24pXG4gICAgc2V0Q2FtcGFpZ24oZm9ybXMuY2FtcGFpZ24pXG4gICAgc2V0QWN0aXZlU3RlcChcImRldGFpbHNcIilcbiAgICBzZXRGdXJ0aGVzdFN0ZXBJbmRleCgwKVxuICB9LCBbb3Blbiwgcm93LCBvcHRpb25zXSlcblxuICBjb25zdCB1cGRhdGVQdXJjaGFzZUNvbmRpdGlvbnMgPSAoXG4gICAgcHVyY2hhc2VDb25kaXRpb25zOiBQdXJjaGFzZUNvbmRpdGlvbkZvcm1bXSxcbiAgKSA9PiB7XG4gICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIHB1cmNoYXNlX2NvbmRpdGlvbnM6IHB1cmNoYXNlQ29uZGl0aW9ucyxcbiAgICAgIGFtb3VudHM6IGlzQW1vdW50Q291cG9uVHlwZShjdXJyZW50LnR5cGUpXG4gICAgICAgID8gcmVjb25jaWxlQ291cG9uQW1vdW50cyhcbiAgICAgICAgICBjdXJyZW50LmFtb3VudHMsXG4gICAgICAgICAgZWZmZWN0aXZlQ291cG9uQ3VycmVuY2llcyhwdXJjaGFzZUNvbmRpdGlvbnMsIGN1cnJlbmNpZXMpLFxuICAgICAgICApXG4gICAgICAgIDogY3VycmVudC5hbW91bnRzLFxuICAgIH0pKVxuICB9XG5cbiAgY29uc3QgdXBkYXRlQ291cG9uVHlwZSA9ICh0eXBlOiBDb3Vwb25UeXBlKSA9PiB7XG4gICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiB7XG4gICAgICBsZXQgcHVyY2hhc2VDb25kaXRpb25zID0gY3VycmVudC5wdXJjaGFzZV9jb25kaXRpb25zXG4gICAgICBpZiAoXG4gICAgICAgIGlzQW1vdW50Q291cG9uVHlwZSh0eXBlKSAmJlxuICAgICAgICAhcHVyY2hhc2VDb25kaXRpb25zLnNvbWUoXG4gICAgICAgICAgKGNvbmRpdGlvbikgPT4gY29uZGl0aW9uLmF0dHJpYnV0ZSA9PT0gXCJjdXJyZW5jeV9jb2RlXCIsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBwdXJjaGFzZUNvbmRpdGlvbnMgPSBbXG4gICAgICAgICAgLi4ucHVyY2hhc2VDb25kaXRpb25zLFxuICAgICAgICAgIC4uLmRlZmF1bHRQdXJjaGFzZUNvbmRpdGlvbnMob3B0aW9ucyksXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHB1cmNoYXNlX2NvbmRpdGlvbnM6IHB1cmNoYXNlQ29uZGl0aW9ucyxcbiAgICAgICAgYW1vdW50czogaXNBbW91bnRDb3Vwb25UeXBlKHR5cGUpXG4gICAgICAgICAgPyByZWNvbmNpbGVDb3Vwb25BbW91bnRzKFxuICAgICAgICAgICAgY3VycmVudC5hbW91bnRzLFxuICAgICAgICAgICAgZWZmZWN0aXZlQ291cG9uQ3VycmVuY2llcyhwdXJjaGFzZUNvbmRpdGlvbnMsIGN1cnJlbmNpZXMpLFxuICAgICAgICAgIClcbiAgICAgICAgICA6IGN1cnJlbnQuYW1vdW50cyxcbiAgICAgICAgcHJvbW90aW9uX21pcnJvcl9tb2RlOlxuICAgICAgICAgIHR5cGUgPT09IFwiYnV5X3hfZ2V0X3lcIiA/IFwibm9uZVwiIDogY3VycmVudC5wcm9tb3Rpb25fbWlycm9yX21vZGUsXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHVwbG9hZE1lZGlhID0gYXN5bmMgKGZpbGVzOiBGaWxlW10pID0+IHtcbiAgICBpZiAoIWZpbGVzLmxlbmd0aCkgcmV0dXJuXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgIGZpbGVzLmZvckVhY2goKGZpbGUpID0+IGZvcm1EYXRhLmFwcGVuZChcImZpbGVzXCIsIGZpbGUpKVxuICAgIGlmIChhcGlCYXNlID09PSBcIi9hZG1pblwiICYmIHByb2R1Y3Quc2VsbGVyX2lkKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoXCJzZWxsZXJfaWRcIiwgcHJvZHVjdC5zZWxsZXJfaWQpXG4gICAgfVxuICAgIHNldFVwbG9hZGluZyh0cnVlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICBgJHtiYWNrZW5kVXJsKCl9JHthcGlCYXNlfS9jb3Vwb24tcHJvZHVjdHMvdXBsb2Fkc2AsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYXBpRXJyb3JNZXNzYWdlKHBheWxvYWQsIHJlc3BvbnNlLnN0YXR1c1RleHQpKVxuICAgICAgfVxuICAgICAgY29uc3QgcGF5bG9hZCA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHtcbiAgICAgICAgZmlsZXM/OiB7IGFzc2V0X2lkPzogc3RyaW5nOyB1cmw/OiBzdHJpbmcgfVtdXG4gICAgICB9XG4gICAgICBjb25zdCB1cGxvYWRlZCA9IChwYXlsb2FkLmZpbGVzIHx8IFtdKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChmaWxlKTogZmlsZSBpcyB7IGFzc2V0X2lkOiBzdHJpbmc7IHVybDogc3RyaW5nIH0gPT5cbiAgICAgICAgICAgIEJvb2xlYW4oZmlsZS5hc3NldF9pZCAmJiBmaWxlLnVybCksXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgoZmlsZSkgPT4gKHsgYXNzZXRfaWQ6IGZpbGUuYXNzZXRfaWQsIHVybDogZmlsZS51cmwgfSkpXG4gICAgICBpZiAoIXVwbG9hZGVkLmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHVwbG9hZCBkaWQgbm90IHJldHVybiBhbiBpbWFnZSBVUkxcIilcbiAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7XG4gICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgIG1lZGlhOiBBcnJheS5mcm9tKFxuICAgICAgICAgIG5ldyBNYXAoXG4gICAgICAgICAgICBbLi4uY3VycmVudC5tZWRpYSwgLi4udXBsb2FkZWRdLm1hcCgoaXRlbSkgPT4gW2l0ZW0udXJsLCBpdGVtXSksXG4gICAgICAgICAgKS52YWx1ZXMoKSxcbiAgICAgICAgKSxcbiAgICAgIH0pKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0b2FzdC5lcnJvcihcbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkltYWdlIHVwbG9hZCBmYWlsZWRcIixcbiAgICAgIClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0VXBsb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRldGFpbHNDb21wbGV0ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghcHJvZHVjdC50aXRsZS50cmltKCkpIHJldHVybiBmYWxzZVxuICAgIGlmICghY3VycmVuY2llcy5sZW5ndGgpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gICAgZm9yIChjb25zdCBjb25kaXRpb24gb2YgY291cG9uLnB1cmNoYXNlX2NvbmRpdGlvbnMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIWNvbmRpdGlvbi5hdHRyaWJ1dGUgfHxcbiAgICAgICAgIWNvbmRpdGlvbi5vcGVyYXRvciB8fFxuICAgICAgICAhY29uZGl0aW9uLnZhbHVlcy5sZW5ndGggfHxcbiAgICAgICAgKGNvbmRpdGlvbi5vcGVyYXRvciA9PT0gXCJlcVwiICYmIGNvbmRpdGlvbi52YWx1ZXMubGVuZ3RoICE9PSAxKSB8fFxuICAgICAgICBhdHRyaWJ1dGVzLmhhcyhjb25kaXRpb24uYXR0cmlidXRlKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgYXR0cmlidXRlcy5hZGQoY29uZGl0aW9uLmF0dHJpYnV0ZSlcbiAgICB9XG5cbiAgICBpZiAoaXNBbW91bnRUeXBlKSB7XG4gICAgICBpZiAoIWF0dHJpYnV0ZXMuaGFzKFwiY3VycmVuY3lfY29kZVwiKSkgcmV0dXJuIGZhbHNlXG4gICAgICBpZiAoIWNvdXBvbi5hbW91bnRzLmxlbmd0aCkgcmV0dXJuIGZhbHNlXG4gICAgICBpZiAoY291cG9uLmFtb3VudHMubGVuZ3RoICE9PSBlZmZlY3RpdmVDdXJyZW5jaWVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlXG4gICAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KClcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGNvdXBvbi5hbW91bnRzKSB7XG4gICAgICAgIGlmICghc3VwcG9ydGVkQ3VycmVuY3lDb2Rlcy5oYXMocm93LmN1cnJlbmN5X2NvZGUpKSByZXR1cm4gZmFsc2VcbiAgICAgICAgaWYgKHNlZW4uaGFzKHJvdy5jdXJyZW5jeV9jb2RlKSkgcmV0dXJuIGZhbHNlXG4gICAgICAgIGlmIChudW1iZXJPck51bGwocm93LmFtb3VudCkgPT0gbnVsbCkgcmV0dXJuIGZhbHNlXG4gICAgICAgIHNlZW4uYWRkKHJvdy5jdXJyZW5jeV9jb2RlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1BlcmNlbnRhZ2VUeXBlKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG51bWJlck9yTnVsbChjb3Vwb24ucGVyY2VudGFnZSlcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID4gMTAwKSByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoY291cG9uLmNvZGVfc3RyYXRlZ3kgPT09IFwic2hhcmVkX2NvZGVcIiAmJiAhY291cG9uLnNoYXJlZF9jb2RlLnRyaW0oKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGNvdXBvbi5leHBpcmF0aW9uX3R5cGUgPT09IFwiZHVyYXRpb25cIikge1xuICAgICAgY29uc3QgZGF5cyA9IE51bWJlcihjb3Vwb24uZXhwaXJhdGlvbl9kYXlzKVxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGRheXMpIHx8IGRheXMgPCAxKSByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2UgaWYgKGNvdXBvbi5leHBpcmF0aW9uX3R5cGUgPT09IFwiZml4ZWRcIikge1xuICAgICAgY29uc3QgZXhwaXJhdGlvbiA9IG5ldyBEYXRlKGNvdXBvbi5leHBpcmF0aW9uX2RhdGUpXG4gICAgICBpZiAoIWNvdXBvbi5leHBpcmF0aW9uX2RhdGUgfHwgTnVtYmVyLmlzTmFOKGV4cGlyYXRpb24uZ2V0VGltZSgpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY291cG9uLmV4cGlyYXRpb25fdHlwZSAhPT0gXCJub25lXCIgJiYgY291cG9uLmV4cGlyYXRpb25fY2FwX2F0KSB7XG4gICAgICBjb25zdCBjYXAgPSBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXQpXG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKGNhcC5nZXRUaW1lKCkpKSByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBtYXhJc3N1YW5jZSA9IE51bWJlcihjb3Vwb24ubWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtKVxuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKG1heElzc3VhbmNlKSAmJiBtYXhJc3N1YW5jZSA+IDBcbiAgfSwgW1xuICAgIGNvdXBvbixcbiAgICBjdXJyZW5jaWVzLmxlbmd0aCxcbiAgICBlZmZlY3RpdmVDdXJyZW5jaWVzLmxlbmd0aCxcbiAgICBpc0Ftb3VudFR5cGUsXG4gICAgaXNQZXJjZW50YWdlVHlwZSxcbiAgICBwcm9kdWN0LnRpdGxlLFxuICAgIHN1cHBvcnRlZEN1cnJlbmN5Q29kZXMsXG4gIF0pXG5cbiAgY29uc3QgY2FtcGFpZ25Db21wbGV0ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghYWxsb3dQcm9tb3Rpb25NaXJyb3IgfHwgY2FtcGFpZ24ubW9kZSA9PT0gXCJub25lXCIpIHJldHVybiB0cnVlXG4gICAgaWYgKGNhbXBhaWduLm1vZGUgPT09IFwiZXhpc3RpbmdcIikgcmV0dXJuIEJvb2xlYW4oY2FtcGFpZ24uY2FtcGFpZ25faWQpXG4gICAgaWYgKCFjYW1wYWlnbi5uYW1lLnRyaW0oKSB8fCAhY2FtcGFpZ24uY2FtcGFpZ25faWRlbnRpZmllci50cmltKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiBbY2FtcGFpZ24uc3RhcnRzX2F0LCBjYW1wYWlnbi5lbmRzX2F0XS5ldmVyeSgodmFsdWUpID0+IHtcbiAgICAgIGlmICghdmFsdWUpIHJldHVybiB0cnVlXG4gICAgICByZXR1cm4gIU51bWJlci5pc05hTihuZXcgRGF0ZSh2YWx1ZSkuZ2V0VGltZSgpKVxuICAgIH0pXG4gIH0sIFthbGxvd1Byb21vdGlvbk1pcnJvciwgY2FtcGFpZ25dKVxuXG4gIGNvbnN0IHByaWNlc0NvbXBsZXRlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjdXJyZW5jaWVzLmxlbmd0aCB8fCAhcHJvZHVjdFByaWNlcy5sZW5ndGgpIHJldHVybiBmYWxzZVxuICAgIHJldHVybiBjdXJyZW5jaWVzLmV2ZXJ5KChjdXJyZW5jeSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBwcm9kdWN0LnByaWNlX2Ftb3VudHNbY3VycmVuY3kuY29kZV0gfHwgXCJcIlxuICAgICAgcmV0dXJuICF2YWx1ZS50cmltKCkgfHwgbm9uTmVnYXRpdmVOdW1iZXJPck51bGwodmFsdWUpICE9IG51bGxcbiAgICB9KVxuICB9LCBbY3VycmVuY2llcywgcHJvZHVjdC5wcmljZV9hbW91bnRzLCBwcm9kdWN0UHJpY2VzLmxlbmd0aF0pXG5cbiAgY29uc3Qgc3RlcFZhbGlkaXR5ID0gdXNlTWVtbzxSZWNvcmQ8V2l6YXJkU3RlcCwgYm9vbGVhbj4+KFxuICAgICgpID0+ICh7XG4gICAgICBkZXRhaWxzOiBkZXRhaWxzQ29tcGxldGUsXG4gICAgICBvcmdhbml6ZTogdHJ1ZSxcbiAgICAgIGNhbXBhaWduOiBjYW1wYWlnbkNvbXBsZXRlLFxuICAgICAgcHJpY2VzOiBwcmljZXNDb21wbGV0ZSxcbiAgICB9KSxcbiAgICBbY2FtcGFpZ25Db21wbGV0ZSwgZGV0YWlsc0NvbXBsZXRlLCBwcmljZXNDb21wbGV0ZV0sXG4gIClcblxuICBjb25zdCBhY3RpdmVTdGVwQ29tcGxldGUgPSBzdGVwVmFsaWRpdHlbYWN0aXZlU3RlcF1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3BlbiB8fCAhYWN0aXZlU3RlcENvbXBsZXRlKSByZXR1cm5cbiAgICBzZXRGdXJ0aGVzdFN0ZXBJbmRleCgoY3VycmVudCkgPT5cbiAgICAgIE1hdGgubWF4KFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICBNYXRoLm1pbihjdXJyZW50U3RlcEluZGV4ICsgMSwgdmlzaWJsZVN0ZXBzLmxlbmd0aCAtIDEpLFxuICAgICAgKSxcbiAgICApXG4gIH0sIFthY3RpdmVTdGVwQ29tcGxldGUsIGN1cnJlbnRTdGVwSW5kZXgsIG9wZW4sIHZpc2libGVTdGVwcy5sZW5ndGhdKVxuXG4gIGNvbnN0IGlzU3RlcERpc2FibGVkID0gKGluZGV4OiBudW1iZXIpID0+XG4gICAgaW5kZXggPiBmdXJ0aGVzdFN0ZXBJbmRleCB8fFxuICAgIHZpc2libGVTdGVwcy5zbGljZSgwLCBpbmRleCkuc29tZSgocHJldmlvdXMpID0+ICFzdGVwVmFsaWRpdHlbcHJldmlvdXNdKVxuXG4gIGNvbnN0IHZhbGlkYXRlID0gKCkgPT4ge1xuICAgIGlmICghcHJvZHVjdC50aXRsZS50cmltKCkpIHRocm93IG5ldyBFcnJvcihcIlByb2R1Y3QgdGl0bGUgaXMgcmVxdWlyZWRcIilcbiAgICBpZiAoIWN1cnJlbmNpZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZGQgYSBzdXBwb3J0ZWQgY3VycmVuY3kgdG8gdGhlIHN0b3JlIGJlZm9yZSBjb250aW51aW5nXCIpXG4gICAgfVxuICAgIGNvbnN0IGludmFsaWRQcmljZSA9IGN1cnJlbmNpZXMuc29tZSgoY3VycmVuY3kpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcHJvZHVjdC5wcmljZV9hbW91bnRzW2N1cnJlbmN5LmNvZGVdIHx8IFwiXCJcbiAgICAgIHJldHVybiB2YWx1ZS50cmltKCkgJiYgbm9uTmVnYXRpdmVOdW1iZXJPck51bGwodmFsdWUpID09IG51bGxcbiAgICB9KVxuICAgIGlmIChpbnZhbGlkUHJpY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb2R1Y3QgcHJpY2VzIG11c3QgYmUgMCBvciBtb3JlXCIpXG4gICAgfVxuICAgIGlmICghcHJvZHVjdFByaWNlcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFkZCBhdCBsZWFzdCBvbmUgcHJvZHVjdCBwcmljZVwiKVxuICAgIH1cbiAgICBpZiAoaXNBbW91bnRUeXBlKSB7XG4gICAgICBpZiAoIWNvdXBvbi5hbW91bnRzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZGQgYXQgbGVhc3Qgb25lIGNvdXBvbiB2YWx1ZVwiKVxuICAgICAgfVxuICAgICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gICAgICBjb25zdCBjdXJyZW5jeUNvbmRpdGlvbiA9IGNvdXBvbi5wdXJjaGFzZV9jb25kaXRpb25zLmZpbmQoXG4gICAgICAgIChjb25kaXRpb24pID0+IGNvbmRpdGlvbi5hdHRyaWJ1dGUgPT09IFwiY3VycmVuY3lfY29kZVwiLFxuICAgICAgKVxuICAgICAgaWYgKCFjdXJyZW5jeUNvbmRpdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZGQgYSBDdXJyZW5jeSBDb2RlIHB1cmNoYXNlIGNvbmRpdGlvblwiKVxuICAgICAgfVxuICAgICAgaWYgKGNvdXBvbi5hbW91bnRzLmxlbmd0aCAhPT0gZWZmZWN0aXZlQ3VycmVuY2llcy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ291cG9uIHZhbHVlcyBtdXN0IG1hdGNoIGV2ZXJ5IGVmZmVjdGl2ZSBjdXJyZW5jeSBjb25kaXRpb24gdmFsdWVcIixcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCByb3cgb2YgY291cG9uLmFtb3VudHMpIHtcbiAgICAgICAgaWYgKCFzdXBwb3J0ZWRDdXJyZW5jeUNvZGVzLmhhcyhyb3cuY3VycmVuY3lfY29kZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWxlY3QgYW4gYXZhaWxhYmxlIGNvdXBvbiBjdXJyZW5jeVwiKVxuICAgICAgICB9XG4gICAgICAgIGlmIChzZWVuLmhhcyhyb3cuY3VycmVuY3lfY29kZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3Vwb24gdmFsdWUgY3VycmVuY2llcyBjYW5ub3QgYmUgZHVwbGljYXRlZFwiKVxuICAgICAgICB9XG4gICAgICAgIGlmIChudW1iZXJPck51bGwocm93LmFtb3VudCkgPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdXBvbiB2YWx1ZXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKVxuICAgICAgICB9XG4gICAgICAgIHNlZW4uYWRkKHJvdy5jdXJyZW5jeV9jb2RlKVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzZWVuQXR0cmlidXRlcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gICAgZm9yIChjb25zdCBjb25kaXRpb24gb2YgY291cG9uLnB1cmNoYXNlX2NvbmRpdGlvbnMpIHtcbiAgICAgIGlmICghY29uZGl0aW9uLmF0dHJpYnV0ZSB8fCAhY29uZGl0aW9uLm9wZXJhdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbXBsZXRlIGV2ZXJ5IHB1cmNoYXNlIGNvbmRpdGlvblwiKVxuICAgICAgfVxuICAgICAgaWYgKCFjb25kaXRpb24udmFsdWVzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWxlY3QgYXQgbGVhc3Qgb25lIHZhbHVlIGZvciBldmVyeSBwdXJjaGFzZSBjb25kaXRpb25cIilcbiAgICAgIH1cbiAgICAgIGlmIChjb25kaXRpb24ub3BlcmF0b3IgPT09IFwiZXFcIiAmJiBjb25kaXRpb24udmFsdWVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcXVhbHMgY29uZGl0aW9ucyByZXF1aXJlIGV4YWN0bHkgb25lIHZhbHVlXCIpXG4gICAgICB9XG4gICAgICBpZiAoc2VlbkF0dHJpYnV0ZXMuaGFzKGNvbmRpdGlvbi5hdHRyaWJ1dGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlB1cmNoYXNlIGNvbmRpdGlvbiBhdHRyaWJ1dGVzIGNhbm5vdCBiZSBkdXBsaWNhdGVkXCIpXG4gICAgICB9XG4gICAgICBzZWVuQXR0cmlidXRlcy5hZGQoY29uZGl0aW9uLmF0dHJpYnV0ZSlcbiAgICB9XG4gICAgaWYgKGlzUGVyY2VudGFnZVR5cGUpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gbnVtYmVyT3JOdWxsKGNvdXBvbi5wZXJjZW50YWdlKVxuICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPiAxMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291cG9uIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMDAgcGVyY2VudFwiKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY291cG9uLmNvZGVfc3RyYXRlZ3kgPT09IFwic2hhcmVkX2NvZGVcIiAmJiAhY291cG9uLnNoYXJlZF9jb2RlLnRyaW0oKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBzaGFyZWQgY291cG9uIGNvZGUgaXMgcmVxdWlyZWRcIilcbiAgICB9XG4gICAgaWYgKGNvdXBvbi5leHBpcmF0aW9uX3R5cGUgPT09IFwiZml4ZWRcIikge1xuICAgICAgY29uc3QgZXhwaXJhdGlvbiA9IG5ldyBEYXRlKGNvdXBvbi5leHBpcmF0aW9uX2RhdGUpXG4gICAgICBpZiAoIWNvdXBvbi5leHBpcmF0aW9uX2RhdGUgfHwgTnVtYmVyLmlzTmFOKGV4cGlyYXRpb24uZ2V0VGltZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHZhbGlkIGZpeGVkIGV4cGlyYXRpb24gZGF0ZSBpcyByZXF1aXJlZFwiKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY291cG9uLmV4cGlyYXRpb25fdHlwZSAhPT0gXCJub25lXCIgJiYgY291cG9uLmV4cGlyYXRpb25fY2FwX2F0KSB7XG4gICAgICBjb25zdCBjYXAgPSBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXQpXG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKGNhcC5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgdmFsaWQgZXhwaXJhdGlvbiBjYXAgZGF0ZSBpcyByZXF1aXJlZFwiKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2FtcGFpZ24ubW9kZSA9PT0gXCJleGlzdGluZ1wiICYmICFjYW1wYWlnbi5jYW1wYWlnbl9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0IGFuIGV4aXN0aW5nIGNhbXBhaWduXCIpXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNhbXBhaWduLm1vZGUgPT09IFwibmV3XCIgJiZcbiAgICAgICghY2FtcGFpZ24ubmFtZS50cmltKCkgfHwgIWNhbXBhaWduLmNhbXBhaWduX2lkZW50aWZpZXIudHJpbSgpKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FtcGFpZ24gbmFtZSBhbmQgaWRlbnRpZmllciBhcmUgcmVxdWlyZWRcIilcbiAgICB9XG4gIH1cblxuICBjb25zdCBzYXZlID0gYXN5bmMgKCkgPT4ge1xuICAgIHNldFNhdmluZyh0cnVlKVxuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZSgpXG4gICAgICBjb25zdCBiZW5lZml0VHlwZSA9IGJlbmVmaXRUeXBlRnJvbUNvdXBvblR5cGUoY291cG9uLnR5cGUpXG4gICAgICBjb25zdCB0YXJnZXRUeXBlID1cbiAgICAgICAgY291cG9uLnR5cGUgPT09IFwiYW1vdW50X29mZl9vcmRlclwiIHx8XG4gICAgICAgIGNvdXBvbi50eXBlID09PSBcInBlcmNlbnRhZ2Vfb2ZmX29yZGVyXCJcbiAgICAgICAgICA/IFwib3JkZXJcIlxuICAgICAgICAgIDogXCJpdGVtc1wiXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBwcm9kdWN0OiB7XG4gICAgICAgICAgdGl0bGU6IHByb2R1Y3QudGl0bGUudHJpbSgpLFxuICAgICAgICAgIHN1YnRpdGxlOiBwcm9kdWN0LnN1YnRpdGxlLnRyaW0oKSB8fCBudWxsLFxuICAgICAgICAgIGhhbmRsZTogcHJvZHVjdC5oYW5kbGUudHJpbSgpIHx8IG51bGwsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHByb2R1Y3QuZGVzY3JpcHRpb24udHJpbSgpIHx8IG51bGwsXG4gICAgICAgICAgc3RhdHVzOiBwcm9kdWN0U3RhdHVzRnJvbUNvdXBvblN0YXR1cyhjb3Vwb24ucHJvbW90aW9uX3N0YXR1cyksXG4gICAgICAgICAgdGh1bWJuYWlsOiBwcm9kdWN0Lm1lZGlhWzBdPy51cmwgfHwgbnVsbCxcbiAgICAgICAgICB0aHVtYm5haWxfYXNzZXRfaWQ6IHByb2R1Y3QubWVkaWFbMF0/LmFzc2V0X2lkIHx8IG51bGwsXG4gICAgICAgICAgaW1hZ2VzOiBwcm9kdWN0Lm1lZGlhLnNsaWNlKDEpLm1hcCgobWVkaWEpID0+ICh7XG4gICAgICAgICAgICB1cmw6IG1lZGlhLnVybCxcbiAgICAgICAgICAgIC4uLihtZWRpYS5hc3NldF9pZCA/IHsgYXNzZXRfaWQ6IG1lZGlhLmFzc2V0X2lkIH0gOiB7fSksXG4gICAgICAgICAgfSkpLFxuICAgICAgICAgIGRpc2NvdW50YWJsZTogcHJvZHVjdC5kaXNjb3VudGFibGUsXG4gICAgICAgICAgdHlwZV9pZDogcHJvZHVjdC50eXBlX2lkIHx8IG51bGwsXG4gICAgICAgICAgY29sbGVjdGlvbl9pZDogcHJvZHVjdC5jb2xsZWN0aW9uX2lkIHx8IG51bGwsXG4gICAgICAgICAgY2F0ZWdvcmllczogcHJvZHVjdC5jYXRlZ29yeV9pZCA/IFt7IGlkOiBwcm9kdWN0LmNhdGVnb3J5X2lkIH1dIDogW10sXG4gICAgICAgICAgdGFnczogcHJvZHVjdC50YWdfaWQgPyBbeyBpZDogcHJvZHVjdC50YWdfaWQgfV0gOiBbXSxcbiAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aXRsZTogXCJEZWZhdWx0XCIsXG4gICAgICAgICAgICAgIHNrdTogcHJvZHVjdC5za3UudHJpbSgpIHx8IG51bGwsXG4gICAgICAgICAgICAgIG1hbmFnZV9pbnZlbnRvcnk6IGZhbHNlLFxuICAgICAgICAgICAgICBhbGxvd19iYWNrb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgIHByaWNlczogcHJvZHVjdFByaWNlcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgY291cG9uOiB7XG4gICAgICAgICAgZW5hYmxlZDogY291cG9uLmVuYWJsZWQsXG4gICAgICAgICAgYmVuZWZpdF90eXBlOiBiZW5lZml0VHlwZSxcbiAgICAgICAgICBwdXJjaGFzZV9jb25kaXRpb25zOiBjb3Vwb24ucHVyY2hhc2VfY29uZGl0aW9ucy5tYXAoKGNvbmRpdGlvbikgPT4gKHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTogY29uZGl0aW9uLmF0dHJpYnV0ZSxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBjb25kaXRpb24ub3BlcmF0b3IsXG4gICAgICAgICAgICB2YWx1ZXM6IGNvbmRpdGlvbi52YWx1ZXMsXG4gICAgICAgICAgfSkpLFxuICAgICAgICAgIGFtb3VudHM6IGlzQW1vdW50VHlwZVxuICAgICAgICAgICAgPyBjb3Vwb24uYW1vdW50cy5tYXAoKHJvdykgPT4gKHtcbiAgICAgICAgICAgICAgYW1vdW50OiBudW1iZXJPck51bGwocm93LmFtb3VudCksXG4gICAgICAgICAgICAgIGN1cnJlbmN5X2NvZGU6IHJvdy5jdXJyZW5jeV9jb2RlLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgYW1vdW50OiBudWxsLFxuICAgICAgICAgIHBlcmNlbnRhZ2U6IGlzUGVyY2VudGFnZVR5cGUgPyBudW1iZXJPck51bGwoY291cG9uLnBlcmNlbnRhZ2UpIDogbnVsbCxcbiAgICAgICAgICBjdXJyZW5jeV9jb2RlOiBudWxsLFxuICAgICAgICAgIGNvZGVfc3RyYXRlZ3k6IGNvdXBvbi5jb2RlX3N0cmF0ZWd5LFxuICAgICAgICAgIGNvZGVfcHJlZml4OlxuICAgICAgICAgICAgY291cG9uLmNvZGVfc3RyYXRlZ3kgPT09IFwidW5pcXVlX2NvZGVcIlxuICAgICAgICAgICAgICA/IGNvdXBvbi5jb2RlX3ByZWZpeC50cmltKCkgfHwgXCJDT1VQT05cIlxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgc2hhcmVkX2NvZGU6XG4gICAgICAgICAgICBjb3Vwb24uY29kZV9zdHJhdGVneSA9PT0gXCJzaGFyZWRfY29kZVwiXG4gICAgICAgICAgICAgID8gY291cG9uLnNoYXJlZF9jb2RlLnRyaW0oKVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgZXhwaXJhdGlvbl9wb2xpY3k6XG4gICAgICAgICAgICBjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcIm5vbmVcIlxuICAgICAgICAgICAgICA/IHsgdHlwZTogXCJub25lXCIgfVxuICAgICAgICAgICAgICA6IGNvdXBvbi5leHBpcmF0aW9uX3R5cGUgPT09IFwiZml4ZWRcIlxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJmaXhlZFwiLFxuICAgICAgICAgICAgICAgICAgZXhwaXJlc19hdDogbmV3IERhdGUoY291cG9uLmV4cGlyYXRpb25fZGF0ZSkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgIGNhcF9ieV9jYW1wYWlnbjogY291cG9uLmV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduLFxuICAgICAgICAgICAgICAgICAgY2FwX2F0OiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXRcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXQpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX2RheXM6IE51bWJlcihjb3Vwb24uZXhwaXJhdGlvbl9kYXlzKSB8fCAzMCxcbiAgICAgICAgICAgICAgICAgIGNhcF9ieV9jYW1wYWlnbjogY291cG9uLmV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduLFxuICAgICAgICAgICAgICAgICAgY2FwX2F0OiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXRcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXQpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgbWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtOlxuICAgICAgICAgICAgTnVtYmVyKGNvdXBvbi5tYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW0pIHx8IDEsXG4gICAgICAgICAgcHJvbW90aW9uX3RlbXBsYXRlOlxuICAgICAgICAgICAgYmVuZWZpdFR5cGUgPT09IFwiZml4ZWRfYW1vdW50XCIgfHwgYmVuZWZpdFR5cGUgPT09IFwicGVyY2VudGFnZVwiXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uX21ldGhvZDoge1xuICAgICAgICAgICAgICAgICAgdGFyZ2V0X3R5cGU6IHRhcmdldFR5cGUsXG4gICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uOlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID09PSBcIm9yZGVyXCIgPyBcImFjcm9zc1wiIDogY291cG9uLmFsbG9jYXRpb24sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgcHJvbW90aW9uX3N0YXR1czogY291cG9uLnByb21vdGlvbl9zdGF0dXMsXG4gICAgICAgICAgLi4uKGFsbG93UHJvbW90aW9uTWlycm9yXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcHJvbW90aW9uX21pcnJvcl9tb2RlOlxuICAgICAgICAgICAgICAgIGJlbmVmaXRUeXBlID09PSBcImJ1eV9nZXRcIiB8fFxuICAgICAgICAgICAgICAgICAgKGJlbmVmaXRUeXBlID09PSBcImZpeGVkX2Ftb3VudFwiICYmIGNvdXBvbi5hbW91bnRzLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgICA/IFwibm9uZVwiXG4gICAgICAgICAgICAgICAgICA6IGNvdXBvbi5wcm9tb3Rpb25fbWlycm9yX21vZGUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgY2FtcGFpZ246IGFsbG93UHJvbW90aW9uTWlycm9yXG4gICAgICAgICAgPyBjYW1wYWlnbi5tb2RlID09PSBcImV4aXN0aW5nXCJcbiAgICAgICAgICAgID8geyBtb2RlOiBcImV4aXN0aW5nXCIsIGNhbXBhaWduX2lkOiBjYW1wYWlnbi5jYW1wYWlnbl9pZCB9XG4gICAgICAgICAgICA6IGNhbXBhaWduLm1vZGUgPT09IFwibmV3XCJcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgbW9kZTogXCJuZXdcIixcbiAgICAgICAgICAgICAgICBjYW1wYWlnbjoge1xuICAgICAgICAgICAgICAgICAgbmFtZTogY2FtcGFpZ24ubmFtZSxcbiAgICAgICAgICAgICAgICAgIGNhbXBhaWduX2lkZW50aWZpZXI6IGNhbXBhaWduLmNhbXBhaWduX2lkZW50aWZpZXIsXG4gICAgICAgICAgICAgICAgICBzdGFydHNfYXQ6IGNhbXBhaWduLnN0YXJ0c19hdFxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKGNhbXBhaWduLnN0YXJ0c19hdCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICBlbmRzX2F0OiBjYW1wYWlnbi5lbmRzX2F0XG4gICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoY2FtcGFpZ24uZW5kc19hdCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IHsgbW9kZTogXCJub25lXCIgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBzZWxsZXJfaWQ6IHByb2R1Y3Quc2VsbGVyX2lkIHx8IG51bGwsXG4gICAgICAgIHZhcmlhbnRfb3ZlcnJpZGVzOiBbXSxcbiAgICAgIH1cblxuICAgICAgYXdhaXQgYXBpRmV0Y2goXG4gICAgICAgIHJvd1xuICAgICAgICAgID8gYCR7YXBpQmFzZX0vY291cG9uLXByb2R1Y3RzLyR7cm93LnByb2R1Y3QuaWR9YFxuICAgICAgICAgIDogYCR7YXBpQmFzZX0vY291cG9uLXByb2R1Y3RzYCxcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogcm93ID8gXCJQQVRDSFwiIDogXCJQT1NUXCIsXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgICB0b2FzdC5zdWNjZXNzKHJvdyA/IFwiQ291cG9uIHByb2R1Y3QgdXBkYXRlZFwiIDogXCJDb3Vwb24gcHJvZHVjdCBjcmVhdGVkXCIpXG4gICAgICBvbk9wZW5DaGFuZ2UoZmFsc2UpXG4gICAgICBhd2FpdCBvblNhdmVkKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdG9hc3QuZXJyb3IoXG4gICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICA6IFwiRmFpbGVkIHRvIHNhdmUgY291cG9uIHByb2R1Y3RcIixcbiAgICAgIClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U2F2aW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0ZXBTdGF0dXMgPSAoc3RlcDogV2l6YXJkU3RlcCkgPT4ge1xuICAgIGNvbnN0IGluZGV4ID0gdmlzaWJsZVN0ZXBzLmluZGV4T2Yoc3RlcClcbiAgICBpZiAoaW5kZXggPCBjdXJyZW50U3RlcEluZGV4ICYmIHN0ZXBWYWxpZGl0eVtzdGVwXSkge1xuICAgICAgcmV0dXJuIFwiY29tcGxldGVkXCIgYXMgY29uc3RcbiAgICB9XG4gICAgaWYgKGluZGV4ID09PSBjdXJyZW50U3RlcEluZGV4KSByZXR1cm4gXCJpbi1wcm9ncmVzc1wiIGFzIGNvbnN0XG4gICAgcmV0dXJuIFwibm90LXN0YXJ0ZWRcIiBhcyBjb25zdFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Rm9jdXNNb2RhbCBvcGVuPXtvcGVufSBvbk9wZW5DaGFuZ2U9e29uT3BlbkNoYW5nZX0+XG4gICAgICA8Rm9jdXNNb2RhbC5Db250ZW50IHN0eWxlPXttb2RhbENvbnRlbnRTdHlsZX0+XG4gICAgICAgIDxGb2N1c01vZGFsLlRpdGxlIHN0eWxlPXt2aXN1YWxseUhpZGRlblN0eWxlfT5cbiAgICAgICAgICB7cm93ID8gXCJFZGl0IENvdXBvbiBQcm9kdWN0XCIgOiBcIkNyZWF0ZSBDb3Vwb24gUHJvZHVjdFwifVxuICAgICAgICA8L0ZvY3VzTW9kYWwuVGl0bGU+XG4gICAgICAgIDxQcm9ncmVzc1RhYnNcbiAgICAgICAgICB2YWx1ZT17YWN0aXZlU3RlcH1cbiAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSB2YWx1ZSBhcyBXaXphcmRTdGVwXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHZpc2libGVTdGVwcy5pbmRleE9mKHN0ZXApXG4gICAgICAgICAgICBpZiAoIWlzU3RlcERpc2FibGVkKGluZGV4KSkgc2V0QWN0aXZlU3RlcChzdGVwKVxuICAgICAgICAgIH19XG4gICAgICAgICAgc3R5bGU9e21vZGFsV2l6YXJkU3R5bGV9XG4gICAgICAgID5cbiAgICAgICAgICA8Rm9jdXNNb2RhbC5IZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1teS0yIHctZnVsbCBib3JkZXItbFwiPlxuICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkxpc3QgY2xhc3NOYW1lPVwianVzdGlmeS1zdGFydC1zdGFydCBmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICB7dmlzaWJsZVN0ZXBzLm1hcCgoc3RlcCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuVHJpZ2dlclxuICAgICAgICAgICAgICAgICAgICBrZXk9e3N0ZXB9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzdGVwfVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM9e3N0ZXBTdGF0dXMoc3RlcCl9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N0ZXBEaXNhYmxlZChpbmRleCl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1heC13LVsyMDBweF0gdHJ1bmNhdGVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7c3RlcFswXS50b1VwcGVyQ2FzZSgpICsgc3RlcC5zbGljZSgxKX1cbiAgICAgICAgICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzLlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzLkxpc3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0ZvY3VzTW9kYWwuSGVhZGVyPlxuXG4gICAgICAgICAgPEZvY3VzTW9kYWwuQm9keSBjbGFzc05hbWU9XCJvdmVyZmxvdy1oaWRkZW4gcC0wXCIgc3R5bGU9e21vZGFsQm9keVN0eWxlfT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICAgIGFjdGl2ZVN0ZXAgPT09IFwicHJpY2VzXCJcbiAgICAgICAgICAgICAgICAgID8geyBoZWlnaHQ6IFwiMTAwJVwiLCBvdmVyZmxvdzogXCJoaWRkZW5cIiwgd2lkdGg6IFwiMTAwJVwiIH1cbiAgICAgICAgICAgICAgICAgIDogbW9kYWxTY3JvbGxTdHlsZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgICAgICBhY3RpdmVTdGVwID09PSBcInByaWNlc1wiXG4gICAgICAgICAgICAgICAgICAgID8geyBoZWlnaHQ6IFwiMTAwJVwiLCB3aWR0aDogXCIxMDAlXCIgfVxuICAgICAgICAgICAgICAgICAgICA6IG1vZGFsRm9ybVN0eWxlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2FjdGl2ZVN0ZXAgPT09IFwiZGV0YWlsc1wiICYmIChcbiAgICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuQ29udGVudCB2YWx1ZT1cImRldGFpbHNcIiBzdHlsZT17c3RhY2tTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgIDxIZWFkaW5nIGxldmVsPVwiaDFcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7cm93ID8gXCJFZGl0IENvdXBvbiBQcm9kdWN0XCIgOiBcIkNyZWF0ZSBDb3Vwb24gUHJvZHVjdFwifVxuICAgICAgICAgICAgICAgICAgICA8L0hlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgIDxEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiR2VuZXJhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3RocmVlQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiV2ludGVyIGphY2tldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU3VidGl0bGVcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3Quc3VidGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXYXJtIGFuZCBjb3p5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJIYW5kbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwPVwiVGhlIFVSTC1mcmllbmRseSBpZGVudGlmaWVyIGZvciB0aGlzIHByb2R1Y3QuIElmIGxlZnQgZW1wdHksIE1lZHVzYSBnZW5lcmF0ZXMgaXQgZnJvbSB0aGUgdGl0bGUuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhbmRsZUlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3QuaGFuZGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoaGFuZGxlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgaGFuZGxlIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRGVzY3JpcHRpb25cIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdC5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBIHdhcm0gYW5kIGNvenkgamFja2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJNZWRpYVwiIG9wdGlvbmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1lZGlhVXBsb2FkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzVXBsb2FkaW5nPXt1cGxvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhPXtwcm9kdWN0Lm1lZGlhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblVwbG9hZD17KGZpbGVzKSA9PiB2b2lkIHVwbG9hZE1lZGlhKGZpbGVzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25SZW1vdmU9eyhtZWRpYSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhOiBjdXJyZW50Lm1lZGlhLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lZGlhLmFzc2V0X2lkICYmIGl0ZW0uYXNzZXRfaWQgIT09IG1lZGlhLmFzc2V0X2lkKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghbWVkaWEuYXNzZXRfaWQgJiYgaXRlbS51cmwgIT09IG1lZGlhLnVybCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU0tVXCIgb3B0aW9uYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3Quc2t1fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNPVVBPTi0wMDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8RGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgICA8UHVyY2hhc2VDb25kaXRpb25zRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICBmaXhlZEFtb3VudD17aXNBbW91bnRUeXBlfVxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5wdXJjaGFzZV9jb25kaXRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVQdXJjaGFzZUNvbmRpdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5Db250ZW50PlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICB7YWN0aXZlU3RlcCA9PT0gXCJvcmdhbml6ZVwiICYmIChcbiAgICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuQ29udGVudCB2YWx1ZT1cIm9yZ2FuaXplXCIgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIk9yZ2FuaXplXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cGFuZWxTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAteC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgd2VpZ2h0PVwicGx1c1wiPkRpc2NvdW50YWJsZTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvdyBwcm9tb3Rpb25zIHRvIGRpc2NvdW50IHRoaXMgcHJvZHVjdCdzIHNhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtwcm9kdWN0LmRpc2NvdW50YWJsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhkaXNjb3VudGFibGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNjb3VudGFibGU6IEJvb2xlYW4oZGlzY291bnRhYmxlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3R3b0NvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YWxsb3dQcm9tb3Rpb25NaXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJTZWxsZXJcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdC5zZWxsZXJfaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnNlbGxlcnMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHNlbGxlcl9pZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgc2VsbGVyX2lkIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiVHlwZVwiIG9wdGlvbmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3QudHlwZV9pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnByb2R1Y3RfdHlwZXMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh0eXBlX2lkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgdHlwZV9pZCB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ29sbGVjdGlvblwiIG9wdGlvbmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3QuY29sbGVjdGlvbl9pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnByb2R1Y3RfY29sbGVjdGlvbnMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhjb2xsZWN0aW9uX2lkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDYXRlZ29yeVwiIG9wdGlvbmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3QuY2F0ZWdvcnlfaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5wcm9kdWN0X2NhdGVnb3JpZXMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhjYXRlZ29yeV9pZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGNhdGVnb3J5X2lkIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJUYWdcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LnRhZ19pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnByb2R1Y3RfdGFncyB8fCBbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHRhZ19pZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIHRhZ19pZCB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5Db250ZW50PlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICB7YWN0aXZlU3RlcCA9PT0gXCJkZXRhaWxzXCIgJiYgKFxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyAuLi5zdGFja1N0eWxlLCBtYXJnaW5Ub3A6IDI0IH19PlxuICAgICAgICAgICAgICAgICAgICA8RGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgICA8U2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ291cG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1cIkNvbmZpZ3VyZSB0aGUgY291cG9uIGlzc3VlZCB3aGVuIHRoaXMgcHJvZHVjdCBpcyBwdXJjaGFzZWQuXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3BhbmVsU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLXgtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHdlaWdodD1cInBsdXNcIj5Db3Vwb24gaXNzdWFuY2U8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXNzdWUgY291cG9ucyB3aGVuIGN1c3RvbWVycyBwdXJjaGFzZSB0aGlzIHByb2R1Y3QuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NvdXBvbi5lbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGVuYWJsZWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiVHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhZGlvR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi50eXBlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodHlwZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDb3Vwb25UeXBlKHR5cGUgYXMgQ291cG9uVHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZUNob2ljZXMubWFwKChjaG9pY2UpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9Hcm91cC5DaG9pY2VCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17Y2hvaWNlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Nob2ljZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtjaG9pY2UubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17Y2hvaWNlLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9SYWRpb0dyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiU3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLnByb21vdGlvbl9zdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyhwcm9tb3Rpb25fc3RhdHVzKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25fc3RhdHVzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25fc3RhdHVzIGFzIFByb21vdGlvblN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhdHVzQ2hvaWNlcy5tYXAoKGNob2ljZSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSYWRpb0dyb3VwLkNob2ljZUJveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtjaG9pY2UudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2hvaWNlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e2Nob2ljZS5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtjaG9pY2UuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1JhZGlvR3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgeyhpc0Ftb3VudFR5cGUgfHwgaXNQZXJjZW50YWdlVHlwZSkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb24gdGl0bGU9e2lzQW1vdW50VHlwZSA/IFwiQ291cG9uIFZhbHVlc1wiIDogXCJWYWx1ZVwifT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2lzQW1vdW50VHlwZSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvdXBvbi5hbW91bnRzLm1hcCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW5jeSA9IGN1cnJlbmNpZXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5jb2RlID09PSByb3cuY3VycmVuY3lfY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtyb3cua2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic2hhZG93LWVsZXZhdGlvbi1jYXJkLXJlc3QgYmctdWktYmctY29tcG9uZW50IHJvdW5kZWQtbWQgcHgtNCBweS0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyb3cuY3VycmVuY3lfY29kZS50b1VwcGVyQ2FzZSgpfSBDb3Vwb24gVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW5jeT8ubmFtZSB8fCByb3cuY3VycmVuY3lfY29kZS50b1VwcGVyQ2FzZSgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEN1cnJlbmN5QW1vdW50RmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmNpZXM9e2N1cnJlbmNpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeUNvZGU9e3Jvdy5jdXJyZW5jeV9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Jvdy5hbW91bnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGFtb3VudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1vdW50czogY3VycmVudC5hbW91bnRzLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPT09IHJvd0luZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7IC4uLml0ZW0sIGFtb3VudCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyFjb3Vwb24uYW1vdW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IGF0IGxlYXN0IG9uZSBlZmZlY3RpdmUgQ3VycmVuY3kgQ29kZSBjb25kaXRpb24gdmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ291cG9uIFZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UGVyY2VudGFnZUlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24ucGVyY2VudGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhwZXJjZW50YWdlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgICAgICAgIHtpc0l0ZW1TY29wZWREaXNjb3VudCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiQWxsb2NhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSYWRpb0dyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLmFsbG9jYXRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsoYWxsb2NhdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbjogYWxsb2NhdGlvbiBhcyBDb3Vwb25BbGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt0d29Db2x1bW5HcmlkU3R5bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJhZGlvR3JvdXAuQ2hvaWNlQm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiZWFjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiRWFjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPVwiQXBwbGllcyB2YWx1ZSBvbiBlYWNoIGl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSYWRpb0dyb3VwLkNob2ljZUJveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIm9uY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIk9uY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1cIkxpbWl0IGRpc2NvdW50IHRvIG1heCBxdWFudGl0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUmFkaW9Hcm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkV4cGlyYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249XCJDb250cm9sIHdoZW4gaXNzdWVkIGNvdXBvbnMgZXhwaXJlLlwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhwaXJhdGlvbiBwb2xpY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLmV4cGlyYXRpb25fdHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyhleHBpcmF0aW9uX3R5cGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fdHlwZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fdHlwZSBhcyBFeHBpcmF0aW9uUG9saWN5VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJub25lXCI+Tm9uZTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImR1cmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVyYXRpb24gYWZ0ZXIgaXNzdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZml4ZWRcIj5GaXhlZCBkYXRlPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcImR1cmF0aW9uXCIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhwaXJhdGlvbiBkYXlzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj17MX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5leHBpcmF0aW9uX2RheXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fZGF5czogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcImZpeGVkXCIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhwaXJlcyBhdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24uZXhwaXJhdGlvbl9kYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX2RhdGU6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2NvdXBvbi5leHBpcmF0aW9uX3R5cGUgIT09IFwibm9uZVwiICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ2FwIGV4cGlyYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAteC00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyAuLi5wYW5lbFN0eWxlLCBwYWRkaW5nOiBcIjhweCAxMnB4XCIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbXBhaWduIGVuZCBvciBjYXAgZGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduOiBCb29sZWFuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhwaXJhdGlvbiBjYXAgZGF0ZVwiIG9wdGlvbmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY291cG9uLmV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWdufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbl9jYXBfYXQ6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPVwiQ2hvb3NlIHdoZXRoZXIgZXZlcnkgaXNzdWVkIGNvdXBvbiBpcyB1bmlxdWUgb3Igc2hhcmVzIG9uZSBjb2RlLlwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ29kZSBzdHJhdGVneVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24uY29kZV9zdHJhdGVneX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyhjb2RlX3N0cmF0ZWd5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX3N0cmF0ZWd5OiBjb2RlX3N0cmF0ZWd5IGFzIENvZGVTdHJhdGVneSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJ1bmlxdWVfY29kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXF1ZSBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cInNoYXJlZF9jb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhcmVkIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtjb3Vwb24uY29kZV9zdHJhdGVneSA9PT0gXCJ1bmlxdWVfY29kZVwiID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNvZGUgcHJlZml4XCIgb3B0aW9uYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5jb2RlX3ByZWZpeH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDT1VQT05cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX3ByZWZpeDogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU2hhcmVkIGNvZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLnNoYXJlZF9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNVTU1FUjE1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkX2NvZGU6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb24gdGl0bGU9XCJJc3N1YW5jZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiTWF4IGlzc3VhbmNlIHBlciBpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj17MX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24ubWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHthbGxvd1Byb21vdGlvbk1pcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Ftb3VudFR5cGUgJiYgY291cG9uLmFtb3VudHMubGVuZ3RoID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiUHJvbW90aW9uIG1pcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5wcm9tb3Rpb25fbWlycm9yX21vZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2NvdXBvbi50eXBlID09PSBcImJ1eV94X2dldF95XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHByb21vdGlvbl9taXJyb3JfbW9kZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uX21pcnJvcl9tb2RlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21vdGlvbl9taXJyb3JfbW9kZSBhcyBNaXJyb3JNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwibm9uZVwiPk5vbmU8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwibWFudWFsXCI+TWFudWFsPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImF1dG9cIj5BdXRvPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIHthbGxvd1Byb21vdGlvbk1pcnJvciAmJiBhY3RpdmVTdGVwID09PSBcImNhbXBhaWduXCIgJiYgKFxuICAgICAgICAgICAgICAgICAgPFByb2dyZXNzVGFicy5Db250ZW50IHZhbHVlPVwiY2FtcGFpZ25cIiBzdHlsZT17c3RhY2tTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiQ2FtcGFpZ25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt0d29Db2x1bW5HcmlkU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ2FtcGFpZ24gbW9kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduLm1vZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KG1vZGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDYW1wYWlnbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogbW9kZSBhcyBDYW1wYWlnbk1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJub25lXCI+Tm8gY2FtcGFpZ248L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZXhpc3RpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhpc3RpbmcgY2FtcGFpZ25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJuZXdcIj5OZXcgY2FtcGFpZ248L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYW1wYWlnbi5tb2RlID09PSBcImV4aXN0aW5nXCIgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJFeGlzdGluZyBjYW1wYWlnblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbi5jYW1wYWlnbl9pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnMuY2FtcGFpZ25zIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhjYW1wYWlnbl9pZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2FtcGFpZ24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1wYWlnbl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2FtcGFpZ24ubW9kZSA9PT0gXCJuZXdcIiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiTmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbi5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENhbXBhaWduKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIklkZW50aWZpZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2FtcGFpZ24uY2FtcGFpZ25faWRlbnRpZmllcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDYW1wYWlnbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1wYWlnbl9pZGVudGlmaWVyOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJTdGFydHMgYXRcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2FtcGFpZ24uc3RhcnRzX2F0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENhbXBhaWduKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0c19hdDogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRW5kcyBhdFwiIG9wdGlvbmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbi5lbmRzX2F0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENhbXBhaWduKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHNfYXQ6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIHthY3RpdmVTdGVwID09PSBcInByaWNlc1wiICYmIChcbiAgICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuQ29udGVudCB2YWx1ZT1cInByaWNlc1wiIHN0eWxlPXt7IGhlaWdodDogXCIxMDAlXCIgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxQcm9kdWN0UHJpY2VzVGFibGVcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jaWVzPXtjdXJyZW5jaWVzfVxuICAgICAgICAgICAgICAgICAgICAgIGNvdXBvblZhbHVlPXtmb3JtYXRDb3Vwb25WYWx1ZShjb3Vwb24sIGN1cnJlbmNpZXMpfVxuICAgICAgICAgICAgICAgICAgICAgIHByaWNlcz17cHJvZHVjdC5wcmljZV9hbW91bnRzfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoY3VycmVuY3lDb2RlLCB2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlX2Ftb3VudHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LnByaWNlX2Ftb3VudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbmN5Q29kZV06IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuQ29udGVudD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvRm9jdXNNb2RhbC5Cb2R5PlxuXG4gICAgICAgICAgPEZvY3VzTW9kYWwuRm9vdGVyIHN0eWxlPXt7IGZsZXhTaHJpbms6IDAgfX0+XG4gICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKSA9PiBvbk9wZW5DaGFuZ2UoZmFsc2UpfT5cbiAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIHtjdXJyZW50U3RlcEluZGV4ID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlU3RlcCh2aXNpYmxlU3RlcHNbY3VycmVudFN0ZXBJbmRleCAtIDFdKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEJhY2tcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2N1cnJlbnRTdGVwSW5kZXggPCB2aXNpYmxlU3RlcHMubGVuZ3RoIC0gMSA/IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshYWN0aXZlU3RlcENvbXBsZXRlfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IGN1cnJlbnRTdGVwSW5kZXggKyAxXG4gICAgICAgICAgICAgICAgICBzZXRGdXJ0aGVzdFN0ZXBJbmRleCgoY3VycmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoY3VycmVudCwgbmV4dEluZGV4KSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVN0ZXAodmlzaWJsZVN0ZXBzW25leHRJbmRleF0pXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENvbnRpbnVlXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshYWN0aXZlU3RlcENvbXBsZXRlfVxuICAgICAgICAgICAgICAgIGlzTG9hZGluZz17c2F2aW5nfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgc2F2ZSgpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgU2F2ZVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9Gb2N1c01vZGFsLkZvb3Rlcj5cbiAgICAgICAgPC9Qcm9ncmVzc1RhYnM+XG4gICAgICA8L0ZvY3VzTW9kYWwuQ29udGVudD5cbiAgICA8L0ZvY3VzTW9kYWw+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvdXBvblByb2R1Y3RzUGFnZSh7XG4gIGFsbG93UHJvbW90aW9uTWlycm9yID0gZmFsc2UsXG4gIGFwaUJhc2UsXG4gIHRpdGxlLFxufToge1xuICBhbGxvd1Byb21vdGlvbk1pcnJvcj86IGJvb2xlYW5cbiAgYXBpQmFzZTogQXBpQmFzZVxuICB0aXRsZTogc3RyaW5nXG59KSB7XG4gIGNvbnN0IFtwcm9kdWN0cywgc2V0UHJvZHVjdHNdID0gdXNlU3RhdGU8Q291cG9uUHJvZHVjdFJvd1tdPihbXSlcbiAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gdXNlU3RhdGU8T3B0aW9uc1BheWxvYWQ+KHt9KVxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKVxuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW21vZGFsT3Blbiwgc2V0TW9kYWxPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZWRpdGluZ1Jvdywgc2V0RWRpdGluZ1Jvd10gPSB1c2VTdGF0ZTxDb3Vwb25Qcm9kdWN0Um93IHwgbnVsbD4obnVsbClcbiAgY29uc3QgcHJvbXB0ID0gdXNlUHJvbXB0KClcbiAgY29uc3QgY291cG9uQmFzZSA9IGAke2FwaUJhc2V9L2NvdXBvbi1wcm9kdWN0c2BcblxuICBjb25zdCBsb2FkID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICBzZXRMb2FkRXJyb3IobnVsbClcbiAgICB0cnkge1xuICAgICAgY29uc3QgW3Byb2R1Y3RzUGF5bG9hZCwgb3B0aW9uc1BheWxvYWRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBhcGlGZXRjaDx7IGNvdXBvbl9wcm9kdWN0czogQ291cG9uUHJvZHVjdFJvd1tdIH0+KGNvdXBvbkJhc2UpLFxuICAgICAgICBhcGlGZXRjaDxPcHRpb25zUGF5bG9hZD4oYCR7Y291cG9uQmFzZX0vb3B0aW9uc2ApLFxuICAgICAgXSlcbiAgICAgIHNldFByb2R1Y3RzKHByb2R1Y3RzUGF5bG9hZC5jb3Vwb25fcHJvZHVjdHMgfHwgW10pXG4gICAgICBzZXRPcHRpb25zKG9wdGlvbnNQYXlsb2FkIHx8IHt9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgID8gZXJyb3IubWVzc2FnZVxuICAgICAgICAgIDogXCJGYWlsZWQgdG8gbG9hZCBjb3Vwb24gcHJvZHVjdHNcIlxuICAgICAgc2V0TG9hZEVycm9yKG1lc3NhZ2UpXG4gICAgICB0b2FzdC5lcnJvcihtZXNzYWdlKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfSwgW2NvdXBvbkJhc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdm9pZCBsb2FkKClcbiAgfSwgW2xvYWRdKVxuXG4gIGNvbnN0IHJlbW92ZSA9IGFzeW5jIChyb3c6IENvdXBvblByb2R1Y3RSb3cpID0+IHtcbiAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCBwcm9tcHQoe1xuICAgICAgdGl0bGU6IFwiUmVtb3ZlIGNvdXBvbiBwcm9kdWN0P1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBUaGlzIHJlbW92ZXMgY291cG9uIGlzc3VhbmNlIGZyb20gJHtyb3cucHJvZHVjdC50aXRsZSB8fCByb3cucHJvZHVjdC5pZFxuICAgICAgICB9LiBUaGUgdW5kZXJseWluZyBNZWR1c2EgcHJvZHVjdCB3aWxsIHJlbWFpbiBhdmFpbGFibGUuYCxcbiAgICAgIGNvbmZpcm1UZXh0OiBcIlJlbW92ZSBwcm9kdWN0XCIsXG4gICAgICBjYW5jZWxUZXh0OiBcIkNhbmNlbFwiLFxuICAgICAgdmFyaWFudDogXCJkYW5nZXJcIixcbiAgICB9KVxuICAgIGlmICghY29uZmlybWVkKSByZXR1cm5cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcGlGZXRjaChgJHtjb3Vwb25CYXNlfS8ke3Jvdy5wcm9kdWN0LmlkfWAsIHsgbWV0aG9kOiBcIkRFTEVURVwiIH0pXG4gICAgICB0b2FzdC5zdWNjZXNzKFwiQ291cG9uIGNvbmZpZ3VyYXRpb24gcmVtb3ZlZFwiKVxuICAgICAgYXdhaXQgbG9hZCgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRvYXN0LmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJEZWxldGUgZmFpbGVkXCIpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWlycm9yID0gYXN5bmMgKHJvdzogQ291cG9uUHJvZHVjdFJvdykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcGlGZXRjaChcbiAgICAgICAgYC9hZG1pbi9jb3Vwb24tcHJvZHVjdHMvJHtyb3cucHJvZHVjdC5pZH0vbWlycm9yLXByb21vdGlvbmAsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHt9KSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIHRvYXN0LnN1Y2Nlc3MoXCJQcm9tb3Rpb24gbWlycm9yIGNyZWF0ZWRcIilcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdG9hc3QuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIk1pcnJvciBmYWlsZWRcIilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb250YWluZXIgY2xhc3NOYW1lPVwiZGl2aWRlLXkgcC0wXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC02IHB5LTRcIj5cbiAgICAgICAgPEhlYWRpbmcgbGV2ZWw9XCJoMVwiPnt0aXRsZX08L0hlYWRpbmc+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLXgtMlwiPlxuICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cInNlY29uZGFyeVwiIG9uQ2xpY2s9eygpID0+IHZvaWQgbG9hZCgpfT5cbiAgICAgICAgICAgIDxBcnJvd1BhdGggLz4gUmVmcmVzaFxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIHNldEVkaXRpbmdSb3cobnVsbClcbiAgICAgICAgICAgICAgc2V0TW9kYWxPcGVuKHRydWUpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxQbHVzIC8+IENyZWF0ZVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgPENvdXBvbkVtcHR5U3RhdGUgdGl0bGU9XCJMb2FkaW5nIGNvdXBvbiBwcm9kdWN0c1wiIC8+XG4gICAgICApIDogbG9hZEVycm9yID8gKFxuICAgICAgICA8Q291cG9uRW1wdHlTdGF0ZSB0aXRsZT17bG9hZEVycm9yfSAvPlxuICAgICAgKSA6IHByb2R1Y3RzLmxlbmd0aCA/IChcbiAgICAgICAgPFRhYmxlPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5Qcm9kdWN0PC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5TdGF0dXM8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlR5cGU8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkNvZGU8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkNhbXBhaWduPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5Jc3N1ZWQ8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsIC8+XG4gICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICA8L1RhYmxlLkhlYWRlcj5cbiAgICAgICAgICA8VGFibGUuQm9keVxuICAgICAgICAgICAgc3R5bGU9e3sgYm9yZGVyQm90dG9tOiAnbm9uZScgfX0+XG4gICAgICAgICAgICB7cHJvZHVjdHMubWFwKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gcm93LmNvdXBvbl9wcm9kdWN0X2NvbmZpZ1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3cga2V5PXtyb3cuaWR9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBib3JkZXJCb3R0b206ICdub25lJywgYmFja2dyb3VuZDogJ25vbmUnIH19PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHdlaWdodD1cInBsdXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtyb3cucHJvZHVjdC50aXRsZSB8fCByb3cucHJvZHVjdC5pZH1cbiAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Jvdy5wcm9kdWN0LmhhbmRsZSB8fCByb3cucHJvZHVjdC5pZH1cbiAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxTdGF0dXNCYWRnZVxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtjb3Vwb25TdGF0dXNDb2xvcihjb25maWcucHJvbW90aW9uX3N0YXR1cyl9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7Y29uZmlnLnByb21vdGlvbl9zdGF0dXMgfHwgXCJkcmFmdFwifVxuICAgICAgICAgICAgICAgICAgICA8L1N0YXR1c0JhZGdlPlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2NvdXBvblR5cGVMYWJlbChjb25maWcpfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICB7Y29uZmlnLmNvZGVfc3RyYXRlZ3kgPT09IFwic2hhcmVkX2NvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgID8gY29uZmlnLnNoYXJlZF9jb2RlIHx8IFwiU2hhcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IGAke2NvbmZpZy5jb2RlX3ByZWZpeCB8fCBcIkNPVVBPTlwifS0qYH1cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntjYW1wYWlnbkxhYmVsKGNvbmZpZyl9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e3Jvdy5lbnRpdGxlbWVudHNfY291bnQgfHwgMH08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7YWxsb3dQcm9tb3Rpb25NaXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmZpZy5hbW91bnRzPy5sZW5ndGggfHwgMCkgPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICApICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCBtaXJyb3Iocm93KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFZGl0aW5nUm93KHJvdylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TW9kYWxPcGVuKHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQZW5jaWxTcXVhcmUgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIHJlbW92ZShyb3cpfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUcmFzaCAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICA8L1RhYmxlPlxuICAgICAgKSA6IChcbiAgICAgICAgPENvdXBvbkVtcHR5U3RhdGVcbiAgICAgICAgICB0aXRsZT1cIk5vIGNvdXBvbiBwcm9kdWN0cyBmb3VuZFwiXG4gICAgICAgICAgZGVzY3JpcHRpb249XCJDcmVhdGUgYSBuZXcgY291cG9uIHByb2R1Y3QgdG8gZ2V0IHN0YXJ0ZWQuXCJcbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIDxDb3Vwb25Qcm9kdWN0TW9kYWxcbiAgICAgICAgb3Blbj17bW9kYWxPcGVufVxuICAgICAgICByb3c9e2VkaXRpbmdSb3d9XG4gICAgICAgIGFwaUJhc2U9e2FwaUJhc2V9XG4gICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgIGFsbG93UHJvbW90aW9uTWlycm9yPXthbGxvd1Byb21vdGlvbk1pcnJvcn1cbiAgICAgICAgb25PcGVuQ2hhbmdlPXtzZXRNb2RhbE9wZW59XG4gICAgICAgIG9uU2F2ZWQ9e2xvYWR9XG4gICAgICAvPlxuICAgIDwvQ29udGFpbmVyPlxuICApXG59XG4iLCAiaW1wb3J0IHsgVGV4dCB9IGZyb20gXCJAbWVkdXNhanMvdWlcIlxuXG5leHBvcnQgZnVuY3Rpb24gQ291cG9uRW1wdHlTdGF0ZSh7XG4gIGRlc2NyaXB0aW9uLFxuICB0aXRsZSxcbn06IHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmdcbiAgdGl0bGU6IHN0cmluZ1xufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZmxleC0xIGZsZXgtY29sIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1pbi1oLVsyNTBweF0gdy1mdWxsIGZsZXgtMSBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtNiBweS00XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzaXplLWZ1bGwgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgPFRleHQgd2VpZ2h0PVwicGx1c1wiPnt0aXRsZX08L1RleHQ+XG4gICAgICAgICAge2Rlc2NyaXB0aW9uID8gPFRleHQ+e2Rlc2NyaXB0aW9ufTwvVGV4dD4gOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iLCAiaW1wb3J0IHsgQ291cG9uRGV0YWlsUGFnZVZpZXcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZGFzaGJvYXJkL2NvdXBvbnMvY291cG9uLW1hbmFnZXJcIlxuXG5jb25zdCBDb3Vwb25EZXRhaWxQYWdlID0gKCkgPT4ge1xuICByZXR1cm4gPENvdXBvbkRldGFpbFBhZ2VWaWV3IGFwaUJhc2U9XCIvYWRtaW5cIiAvPlxufVxuXG5leHBvcnQgZGVmYXVsdCBDb3Vwb25EZXRhaWxQYWdlXG4iLCAiaW1wb3J0IHsgZGVmaW5lUm91dGVDb25maWcgfSBmcm9tIFwiQG1lZHVzYWpzL2FkbWluLXNka1wiXG5pbXBvcnQgeyBSZWNlaXB0UGVyY2VudCB9IGZyb20gXCJAbWVkdXNhanMvaWNvbnNcIlxuaW1wb3J0IHsgQ291cG9uUHJvZHVjdHNQYWdlVmlldyB9IGZyb20gXCIuLi8uLi8uLi8uLi9kYXNoYm9hcmQvY291cG9ucy9jb3Vwb24tbWFuYWdlclwiXG5cbmV4cG9ydCBjb25zdCBjb25maWcgPSBkZWZpbmVSb3V0ZUNvbmZpZyh7XG4gIGxhYmVsOiBcIkNvdXBvbiBQcm9kdWN0c1wiLFxuICBpY29uOiBSZWNlaXB0UGVyY2VudCxcbn0pXG5cbmNvbnN0IENvdXBvblByb2R1Y3RzUGFnZSA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Q291cG9uUHJvZHVjdHNQYWdlVmlld1xuICAgICAgYXBpQmFzZT1cIi9hZG1pblwiXG4gICAgICB0aXRsZT1cIkNvdXBvbiBQcm9kdWN0c1wiXG4gICAgICBhbGxvd1Byb21vdGlvbk1pcnJvclxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ291cG9uUHJvZHVjdHNQYWdlXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBO0FBQUEsRUFDRSxTQUFXO0FBQUEsSUFDVCxNQUFRO0FBQUEsSUFDUixjQUFnQjtBQUFBLEVBQ2xCO0FBQ0Y7OztBQ0hBLElBQU8sZUFBUTtBQUFBLEVBQ2IsSUFBSTtBQUFBLElBQ0YsYUFBYTtBQUFBLEVBQ2Y7QUFDRjs7O0FDSkEsU0FBUyxtQkFBbUJBLFNBQVE7QUFDbEMsU0FBTztBQUFBLElBQ0wsR0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUUgsVUFBVSxPQUFPLElBQUksWUFBWTtBQUFBLEVBQ25DO0FBQ0Y7QUFJQSxTQUFTLGtCQUFrQkMsU0FBUTtBQUNqQyxTQUFPLG1CQUFtQkEsT0FBTTtBQUNsQzs7O0FDbkJBLElBQUFDLGdCQUErQjs7O0FDRC9CLElBQUFDLGdCQVFPO0FBQ1AsSUFBQUMsZ0JBT087QUFDUCxJQUFBQyxhQW1CTzs7O0FDcENQ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QUNFLFdBQVdBO0FBQUEsTUFDWCxNQUFNO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFDRjtBQUVBLElBQU0saUJBQWlCO0FBQUEsRUFDckIsV0FBVztBQUFBLElBQ1Q7QUFBQSxNQUNFLE9BQU8sT0FBYztBQUFBLE1BQ3JCLE1BQU0sT0FBYztBQUFBLE1BQ3BCLE1BQU07QUFBQSxNQUNOLE1BQU0sT0FBYztBQUFBLE1BQ3BCLFFBQVEsT0FBYztBQUFBLE1BQ3RCLGVBQWUsT0FBYztBQUFBLElBQy9CO0FBQUEsSUFDQTtBQUFBLE1BQ0UsT0FBT0MsUUFBcUI7QUFBQSxNQUM1QixNQUFNQSxRQUFxQjtBQUFBLE1BQzNCLE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxNQUNSLGVBQWVBLFFBQXFCO0FBQUEsSUFDdEM7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxJQUFPLGdCQUFRO0FBQUEsRUFDYixjQUFjO0FBQUEsSUFDWixTQUFTLENBQUM7QUFBQSxFQUNaO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLFlBQVk7QUFBQSxJQUNWLGNBQWMsQ0FBQztBQUFBLEVBQ2pCO0FBQUEsRUFDQSxlQUFlO0FBQUEsSUFDYixVQUFVLENBQUM7QUFBQSxFQUNiO0FBQUEsRUFDQSxZQUFZO0FBQ2Q7IiwKICAibmFtZXMiOiBbImNvbmZpZyIsICJjb25maWciLCAiaW1wb3J0X2ljb25zIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfaWNvbnMiLCAiaW1wb3J0X3VpIiwgImltcG9ydF91aSIsICJpbXBvcnRfanN4X3J1bnRpbWUiLCAiY29uZmlnIiwgInJvdyIsICJ2YWx1ZSIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJyb3ciLCAiY29uZmlnIiwgImltcG9ydF9qc3hfcnVudGltZSIsICJiYWNrZW5kVXJsIiwgImFwaUVycm9yTWVzc2FnZSIsICJhcGlGZXRjaCIsICJhbW91bnQiLCAiY3VycmVuY3kiLCAiYXBpRmV0Y2giLCAiaW1wb3J0X2pzeF9ydW50aW1lIiwgImltcG9ydF9qc3hfcnVudGltZSIsICJwYWdlX2RlZmF1bHQiLCAiaW1wb3J0X2ljb25zIiwgImltcG9ydF9qc3hfcnVudGltZSIsICJjb25maWciLCAiQ291cG9uUHJvZHVjdHNQYWdlIiwgInBhZ2VfZGVmYXVsdCIsICJwYWdlX2RlZmF1bHQiLCAiY29uZmlnIl0KfQo=
3280
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2FkbWluL2luZGV4LnRzIiwgIi4uLy4uLy4uLy4uL3NyYy9hZG1pbi9pMThuL2VuLmpzb24iLCAiLi4vLi4vLi4vLi4vc3JjL2FkbWluL2kxOG4vaW5kZXgudHMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BtZWR1c2Fqcy9hZG1pbi1zZGsvZGlzdC9pbmRleC5tanMiLCAiLi4vLi4vLi4vLi4vc3JjL2FkbWluL3JvdXRlcy9jb3Vwb25zL3BhZ2UudHN4IiwgIi4uLy4uLy4uLy4uL3NyYy9kYXNoYm9hcmQvY291cG9ucy9jb3Vwb24tbWFuYWdlci50c3giLCAiLi4vLi4vLi4vLi4vc3JjL2Rhc2hib2FyZC9jb3Vwb25zL2NvdXBvbi1wcm9kdWN0cy1wYWdlLnRzeCIsICIuLi8uLi8uLi8uLi9zcmMvZGFzaGJvYXJkL2NvdXBvbnMvZW1wdHktc3RhdGUudHN4IiwgIi4uLy4uLy4uLy4uL3NyYy9hZG1pbi9yb3V0ZXMvY291cG9ucy9baWRdL3BhZ2UudHN4IiwgIi4uLy4uLy4uLy4uL3NyYy9hZG1pbi9yb3V0ZXMvY291cG9ucy9wcm9kdWN0cy9wYWdlLnRzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IGkxOG5SZXNvdXJjZXMgZnJvbSBcIi4vaTE4blwiXG5pbXBvcnQgQ291cG9uc1BhZ2UsIHsgY29uZmlnIGFzIGNvdXBvbnNDb25maWcgfSBmcm9tIFwiLi9yb3V0ZXMvY291cG9ucy9wYWdlXCJcbmltcG9ydCBDb3Vwb25EZXRhaWxQYWdlIGZyb20gXCIuL3JvdXRlcy9jb3Vwb25zL1tpZF0vcGFnZVwiXG5pbXBvcnQgQ291cG9uUHJvZHVjdHNQYWdlLCB7XG4gIGNvbmZpZyBhcyBjb3Vwb25Qcm9kdWN0c0NvbmZpZyxcbn0gZnJvbSBcIi4vcm91dGVzL2NvdXBvbnMvcHJvZHVjdHMvcGFnZVwiXG5cbmNvbnN0IHJvdXRlTW9kdWxlID0ge1xuICByb3V0ZXM6IFtcbiAgICB7XG4gICAgICBDb21wb25lbnQ6IENvdXBvbnNQYWdlLFxuICAgICAgcGF0aDogXCIvY291cG9uc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgQ29tcG9uZW50OiBDb3Vwb25Qcm9kdWN0c1BhZ2UsXG4gICAgICBwYXRoOiBcIi9jb3Vwb25zL3Byb2R1Y3RzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBDb21wb25lbnQ6IENvdXBvbkRldGFpbFBhZ2UsXG4gICAgICBwYXRoOiBcIi9jb3Vwb25zLzppZFwiLFxuICAgIH0sXG4gIF0sXG59XG5cbmNvbnN0IG1lbnVJdGVtTW9kdWxlID0ge1xuICBtZW51SXRlbXM6IFtcbiAgICB7XG4gICAgICBsYWJlbDogY291cG9uc0NvbmZpZy5sYWJlbCxcbiAgICAgIGljb246IGNvdXBvbnNDb25maWcuaWNvbixcbiAgICAgIHBhdGg6IFwiL2NvdXBvbnNcIixcbiAgICAgIHJhbms6IGNvdXBvbnNDb25maWcucmFuayxcbiAgICAgIG5lc3RlZDogY291cG9uc0NvbmZpZy5uZXN0ZWQsXG4gICAgICB0cmFuc2xhdGlvbk5zOiBjb3Vwb25zQ29uZmlnLnRyYW5zbGF0aW9uTnMsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogY291cG9uUHJvZHVjdHNDb25maWcubGFiZWwsXG4gICAgICBpY29uOiBjb3Vwb25Qcm9kdWN0c0NvbmZpZy5pY29uLFxuICAgICAgcGF0aDogXCIvY291cG9ucy9wcm9kdWN0c1wiLFxuICAgICAgcmFuazogMTEsXG4gICAgICBuZXN0ZWQ6IFwiL2NvdXBvbnNcIixcbiAgICAgIHRyYW5zbGF0aW9uTnM6IGNvdXBvblByb2R1Y3RzQ29uZmlnLnRyYW5zbGF0aW9uTnMsXG4gICAgfSxcbiAgXSxcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICB3aWRnZXRNb2R1bGU6IHtcbiAgICB3aWRnZXRzOiBbXSxcbiAgfSxcbiAgcm91dGVNb2R1bGUsXG4gIG1lbnVJdGVtTW9kdWxlLFxuICBmb3JtTW9kdWxlOiB7XG4gICAgY3VzdG9tRmllbGRzOiB7fSxcbiAgfSxcbiAgZGlzcGxheU1vZHVsZToge1xuICAgIGRpc3BsYXlzOiB7fSxcbiAgfSxcbiAgaTE4bk1vZHVsZTogaTE4blJlc291cmNlcyxcbn1cbiIsICJ7XG4gIFwiY291cG9uc1wiOiB7XG4gICAgXCJtZW51XCI6IFwiQ291cG9uc1wiLFxuICAgIFwicHJvZHVjdHNNZW51XCI6IFwiQ291cG9uIFByb2R1Y3RzXCJcbiAgfVxufVxuIiwgImltcG9ydCBlbiBmcm9tIFwiLi9lbi5qc29uXCJcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlbjoge1xuICAgIHRyYW5zbGF0aW9uOiBlbixcbiAgfSxcbn1cbiIsICIvLyBzcmMvY29uZmlnL3V0aWxzLnRzXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuZnVuY3Rpb24gY3JlYXRlQ29uZmlnSGVscGVyKGNvbmZpZykge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbmZpZyxcbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIHJlcXVpcmVkIHRvIGFsbG93IHRoZSBjb25maWcgdG8gYmUgZXhwb3J0ZWQsXG4gICAgICogd2hpbGUgc3RpbGwgYWxsb3dpbmcgSE1SIHRvIHdvcmsgY29ycmVjdGx5LlxuICAgICAqXG4gICAgICogSXQgdHJpY2tzIEZhc3QgUmVmcmVzaCBpbnRvIHRoaW5raW5nIHRoYXQgdGhlIGNvbmZpZyBpcyBhIFJlYWN0IGNvbXBvbmVudCxcbiAgICAgKiB3aGljaCBhbGxvd3MgaXQgdG8gYmUgdXBkYXRlZCB3aXRob3V0IGEgZnVsbCBwYWdlIHJlbG9hZC5cbiAgICAgKi9cbiAgICAkJHR5cGVvZjogU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIilcbiAgfTtcbn1cbmZ1bmN0aW9uIGRlZmluZVdpZGdldENvbmZpZyhjb25maWcpIHtcbiAgcmV0dXJuIGNyZWF0ZUNvbmZpZ0hlbHBlcihjb25maWcpO1xufVxuZnVuY3Rpb24gZGVmaW5lUm91dGVDb25maWcoY29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVDb25maWdIZWxwZXIoY29uZmlnKTtcbn1cbmV4cG9ydCB7XG4gIGRlZmluZVJvdXRlQ29uZmlnLFxuICBkZWZpbmVXaWRnZXRDb25maWdcbn07XG4iLCAiaW1wb3J0IHsgZGVmaW5lUm91dGVDb25maWcgfSBmcm9tIFwiQG1lZHVzYWpzL2FkbWluLXNka1wiXG5pbXBvcnQgeyBSZWNlaXB0UGVyY2VudCB9IGZyb20gXCJAbWVkdXNhanMvaWNvbnNcIlxuaW1wb3J0IHsgQ291cG9uc1BhZ2VWaWV3IH0gZnJvbSBcIi4uLy4uLy4uL2Rhc2hib2FyZC9jb3Vwb25zL2NvdXBvbi1tYW5hZ2VyXCJcblxuZXhwb3J0IGNvbnN0IGNvbmZpZyA9IGRlZmluZVJvdXRlQ29uZmlnKHtcbiAgbGFiZWw6IFwiQ291cG9uc1wiLFxuICBpY29uOiBSZWNlaXB0UGVyY2VudCxcbn0pXG5cbmNvbnN0IENvdXBvbnNQYWdlID0gKCkgPT4ge1xuICByZXR1cm4gPENvdXBvbnNQYWdlVmlldyBhcGlCYXNlPVwiL2FkbWluXCIgdGl0bGU9XCJDb3Vwb25zXCIgLz5cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ291cG9uc1BhZ2VcbiIsICJpbXBvcnQge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VTdGF0ZSxcbiAgdHlwZSBDaGFuZ2VFdmVudCxcbiAgdHlwZSBDU1NQcm9wZXJ0aWVzLFxuICB0eXBlIFJlYWN0Tm9kZSxcbn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7XG4gIEFycm93UGF0aCxcbiAgUGVuY2lsU3F1YXJlLFxuICBQbHVzLFxuICBTaG9wcGluZ0NhcnQsXG4gIFRyYXNoLFxuICBUcmlhbmdsZVJpZ2h0TWluaSxcbn0gZnJvbSBcIkBtZWR1c2Fqcy9pY29uc1wiXG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENvbnRhaW5lcixcbiAgQ29weSxcbiAgQ3VycmVuY3lJbnB1dCxcbiAgRm9jdXNNb2RhbCxcbiAgSGVhZGluZyxcbiAgSW5wdXQsXG4gIExhYmVsLFxuICBQcm9ncmVzc1RhYnMsXG4gIFNlbGVjdCxcbiAgU3RhdHVzQmFkZ2UsXG4gIFN3aXRjaCxcbiAgVGFibGUsXG4gIFRhYnMsXG4gIFRleHQsXG4gIFRleHRhcmVhLFxuICB0b2FzdCxcbiAgdXNlUHJvbXB0LFxufSBmcm9tIFwiQG1lZHVzYWpzL3VpXCJcbmltcG9ydCB7IENvdXBvblByb2R1Y3RzUGFnZSB9IGZyb20gXCIuL2NvdXBvbi1wcm9kdWN0cy1wYWdlXCJcbmltcG9ydCB7IENvdXBvbkVtcHR5U3RhdGUgfSBmcm9tIFwiLi9lbXB0eS1zdGF0ZVwiXG5cbmRlY2xhcmUgY29uc3QgX19CQUNLRU5EX1VSTF9fOiBzdHJpbmdcblxudHlwZSBBcGlCYXNlID0gXCIvYWRtaW5cIiB8IFwiL3ZlbmRvclwiXG50eXBlIEJlbmVmaXRUeXBlID0gXCJmaXhlZF9hbW91bnRcIiB8IFwicGVyY2VudGFnZVwiIHwgXCJmcmVlX3NoaXBwaW5nXCIgfCBcImJ1eV9nZXRcIlxudHlwZSBDb2RlU3RyYXRlZ3kgPSBcInVuaXF1ZV9jb2RlXCIgfCBcInNoYXJlZF9jb2RlXCJcbnR5cGUgTWlycm9yTW9kZSA9IFwibm9uZVwiIHwgXCJtYW51YWxcIiB8IFwiYXV0b1wiXG50eXBlIFByb21vdGlvblN0YXR1cyA9IFwiZHJhZnRcIiB8IFwiYWN0aXZlXCIgfCBcImluYWN0aXZlXCJcbnR5cGUgQ2FtcGFpZ25Nb2RlID0gXCJub25lXCIgfCBcImV4aXN0aW5nXCIgfCBcIm5ld1wiXG50eXBlIEV4cGlyYXRpb25Qb2xpY3lUeXBlID0gXCJub25lXCIgfCBcIm1vbnRoX2VuZFwiIHwgXCJkdXJhdGlvblwiIHwgXCJmaXhlZFwiXG50eXBlIEV4cGlyYXRpb25EdXJhdGlvblVuaXQgPSBcImRheXNcIiB8IFwibW9udGhzXCJcbnR5cGUgRXhwaXJhdGlvblRpbWVQb2xpY3kgPSBcImV4YWN0bHlcIiB8IFwiZGF5X2VuZFwiXG50eXBlIFdpemFyZFN0ZXAgPSBcImRldGFpbHNcIiB8IFwib3JnYW5pemVcIiB8IFwidmFyaWFudHNcIiB8IFwiY291cG9uXCIgfCBcImNhbXBhaWduXCJcblxudHlwZSBDb3Vwb25Qcm9kdWN0Q29uZmlnID0ge1xuICBpZDogc3RyaW5nXG4gIGVuYWJsZWQ6IGJvb2xlYW5cbiAgcHJvZHVjdF9pZDogc3RyaW5nXG4gIGJlbmVmaXRfdHlwZTogQmVuZWZpdFR5cGVcbiAgYW1vdW50OiBudW1iZXIgfCBudWxsXG4gIHBlcmNlbnRhZ2U6IG51bWJlciB8IG51bGxcbiAgY3VycmVuY3lfY29kZTogc3RyaW5nIHwgbnVsbFxuICBjb2RlX3N0cmF0ZWd5OiBDb2RlU3RyYXRlZ3lcbiAgY29kZV9wcmVmaXg6IHN0cmluZyB8IG51bGxcbiAgc2hhcmVkX2NvZGU6IHN0cmluZyB8IG51bGxcbiAgZXhwaXJhdGlvbl9wb2xpY3k6XG4gICAgfCB7IHR5cGU6IFwibm9uZVwiIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogXCJtb250aF9lbmRcIlxuICAgICAgICB0aW1lX3BvbGljeTogRXhwaXJhdGlvblRpbWVQb2xpY3lcbiAgICAgICAgY2FwX2J5X2NhbXBhaWduPzogYm9vbGVhblxuICAgICAgICBjYXBfYXQ/OiBzdHJpbmcgfCBudWxsXG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6IFwiZHVyYXRpb25cIlxuICAgICAgICBkdXJhdGlvbjogbnVtYmVyXG4gICAgICAgIGR1cmF0aW9uX2RheXM/OiBudW1iZXJcbiAgICAgICAgZHVyYXRpb25fdW5pdDogRXhwaXJhdGlvbkR1cmF0aW9uVW5pdFxuICAgICAgICB0aW1lX3BvbGljeTogRXhwaXJhdGlvblRpbWVQb2xpY3lcbiAgICAgICAgY2FwX2J5X2NhbXBhaWduPzogYm9vbGVhblxuICAgICAgICBjYXBfYXQ/OiBzdHJpbmcgfCBudWxsXG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6IFwiZml4ZWRcIlxuICAgICAgICBleHBpcmVzX2F0OiBzdHJpbmdcbiAgICAgICAgY2FwX2J5X2NhbXBhaWduPzogYm9vbGVhblxuICAgICAgICBjYXBfYXQ/OiBzdHJpbmcgfCBudWxsXG4gICAgICB9XG4gIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTogbnVtYmVyXG4gIHByb21vdGlvbl9taXJyb3JfbW9kZTogTWlycm9yTW9kZVxuICBwcm9tb3Rpb25fc3RhdHVzPzogUHJvbW90aW9uU3RhdHVzIHwgbnVsbFxuICBjYW1wYWlnbl9tb2RlPzogQ2FtcGFpZ25Nb2RlIHwgbnVsbFxuICBjYW1wYWlnbl9pZD86IHN0cmluZyB8IG51bGxcbiAgY2FtcGFpZ25fc25hcHNob3Q/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGxcbiAgY29uZmlnX3ZlcnNpb246IG51bWJlclxufVxuXG50eXBlIENvdXBvblZhcmlhbnRDb25maWcgPSBQYXJ0aWFsPENvdXBvblByb2R1Y3RDb25maWc+ICYge1xuICBpZDogc3RyaW5nXG4gIHByb2R1Y3RfY29uZmlnX2lkOiBzdHJpbmdcbiAgdmFyaWFudF9pZDogc3RyaW5nXG59XG5cbnR5cGUgUHJvZHVjdFZhcmlhbnQgPSB7XG4gIGlkOiBzdHJpbmdcbiAgdGl0bGU6IHN0cmluZyB8IG51bGxcbiAgc2t1Pzogc3RyaW5nIHwgbnVsbFxuICBwcmljZXM/OiB7IGN1cnJlbmN5X2NvZGU/OiBzdHJpbmc7IGFtb3VudD86IG51bWJlciB9W11cbn1cblxudHlwZSBQcm9kdWN0UmVjb3JkID0ge1xuICBpZDogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmcgfCBudWxsXG4gIHN1YnRpdGxlPzogc3RyaW5nIHwgbnVsbFxuICBoYW5kbGU6IHN0cmluZyB8IG51bGxcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsXG4gIHN0YXR1czogc3RyaW5nIHwgbnVsbFxuICB0aHVtYm5haWw6IHN0cmluZyB8IG51bGxcbiAgZGlzY291bnRhYmxlPzogYm9vbGVhblxuICB0eXBlX2lkPzogc3RyaW5nIHwgbnVsbFxuICBjb2xsZWN0aW9uX2lkPzogc3RyaW5nIHwgbnVsbFxuICBzaGlwcGluZ19wcm9maWxlX2lkPzogc3RyaW5nIHwgbnVsbFxuICB2YXJpYW50cz86IFByb2R1Y3RWYXJpYW50W11cbiAgY2F0ZWdvcmllcz86IHsgaWQ6IHN0cmluZzsgbmFtZT86IHN0cmluZyB8IG51bGwgfVtdXG4gIHRhZ3M/OiB7IGlkOiBzdHJpbmc7IHZhbHVlPzogc3RyaW5nIHwgbnVsbCB9W11cbiAgc2FsZXNfY2hhbm5lbHM/OiB7IGlkOiBzdHJpbmc7IG5hbWU/OiBzdHJpbmcgfCBudWxsIH1bXVxufVxuXG50eXBlIENvdXBvblByb2R1Y3RSb3cgPSB7XG4gIGlkOiBzdHJpbmdcbiAgcHJvZHVjdDogUHJvZHVjdFJlY29yZFxuICBjb3Vwb25fcHJvZHVjdF9jb25maWc6IENvdXBvblByb2R1Y3RDb25maWdcbiAgY291cG9uX3Byb2R1Y3RfdmFyaWFudF9jb25maWdzOiBDb3Vwb25WYXJpYW50Q29uZmlnW11cbiAgZW50aXRsZW1lbnRzX2NvdW50OiBudW1iZXJcbn1cblxudHlwZSBDb3Vwb25FbnRpdGxlbWVudCA9IHtcbiAgaWQ6IHN0cmluZ1xuICBvcmlnaW4/OiBcInB1cmNoYXNlXCIgfCBcImV4dGVybmFsXCJcbiAgY3VzdG9tZXJfaWQ6IHN0cmluZyB8IG51bGxcbiAgZW1haWw6IHN0cmluZyB8IG51bGxcbiAgY29kZTogc3RyaW5nIHwgbnVsbFxuICBzaGFyZWRfY29kZTogc3RyaW5nIHwgbnVsbFxuICBzdGF0dXM6IHN0cmluZ1xuICBwcm9kdWN0X2lkOiBzdHJpbmcgfCBudWxsXG4gIHZhcmlhbnRfaWQ6IHN0cmluZyB8IG51bGxcbiAgb3JkZXJfaWQ6IHN0cmluZyB8IG51bGxcbiAgbGluZV9pdGVtX2lkOiBzdHJpbmcgfCBudWxsXG4gIGlzc3VhbmNlX2lkPzogc3RyaW5nIHwgbnVsbFxuICBjb25maWdfaWQ/OiBzdHJpbmcgfCBudWxsXG4gIHZhcmlhbnRfY29uZmlnX2lkPzogc3RyaW5nIHwgbnVsbFxuICBleHBpcmVzX2F0OiBzdHJpbmcgfCBudWxsXG4gIHJlZGVlbWVkX2F0OiBzdHJpbmcgfCBudWxsXG4gIGNyZWF0ZWRfYXQ/OiBzdHJpbmdcbiAgYmVuZWZpdF9zbmFwc2hvdD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxuICBzb3VyY2Vfc25hcHNob3Q/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGxcbiAgZXh0ZXJuYWxfcmVmZXJlbmNlPzogc3RyaW5nIHwgbnVsbFxuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxuICBzZWxsZXJfdGFyZ2V0cz86IEFycmF5PHtcbiAgICBzZWxsZXJfaWQ6IHN0cmluZ1xuICAgIHNlbGxlcl9tZW1iZXJfaWQ/OiBzdHJpbmcgfCBudWxsXG4gIH0+XG59XG5cbnR5cGUgQ291cG9uSXNzdWFuY2VSZWNvcmQgPSB7XG4gIGlkOiBzdHJpbmdcbiAgc3RhdHVzPzogc3RyaW5nIHwgbnVsbFxuICBxdWFudGl0eT86IG51bWJlciB8IG51bGxcbiAgY29uZmlnX3NuYXBzaG90PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsXG4gIGlzc3VlZF9jb3VudD86IG51bWJlciB8IG51bGxcbiAgZmFpbGVkX2NvdW50PzogbnVtYmVyIHwgbnVsbFxuICBjcmVhdGVkX2F0Pzogc3RyaW5nXG4gIHVwZGF0ZWRfYXQ/OiBzdHJpbmdcbn1cblxudHlwZSBDb3Vwb25PcmRlclN1bW1hcnkgPSB7XG4gIGlkOiBzdHJpbmdcbiAgZGlzcGxheV9pZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBlbWFpbDogc3RyaW5nIHwgbnVsbFxuICBjdXN0b21lcl9pZDogc3RyaW5nIHwgbnVsbFxuICBjdXJyZW5jeV9jb2RlOiBzdHJpbmcgfCBudWxsXG4gIHRvdGFsOiBudW1iZXIgfCBudWxsXG4gIGNyZWF0ZWRfYXQ6IHN0cmluZyB8IG51bGxcbn1cblxudHlwZSBDb3Vwb25FbnRpdGxlbWVudERldGFpbCA9IHtcbiAgY3VzdG9tZXJfY291cG9uX2VudGl0bGVtZW50OiBDb3Vwb25FbnRpdGxlbWVudFxuICBjb3Vwb25faXNzdWFuY2U/OiBDb3Vwb25Jc3N1YW5jZVJlY29yZCB8IG51bGxcbiAgb3JkZXI/OiBDb3Vwb25PcmRlclN1bW1hcnkgfCBudWxsXG59XG5cbnR5cGUgT3B0aW9uUmVjb3JkID0ge1xuICBpZDogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIHRpdGxlPzogc3RyaW5nIHwgbnVsbFxuICB2YWx1ZT86IHN0cmluZyB8IG51bGxcbiAgaGFuZGxlPzogc3RyaW5nIHwgbnVsbFxuICBjYW1wYWlnbl9pZGVudGlmaWVyPzogc3RyaW5nIHwgbnVsbFxufVxuXG50eXBlIEN1cnJlbmN5T3B0aW9uID0ge1xuICBjb2RlOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHN5bWJvbDogc3RyaW5nXG4gIHN5bWJvbF9uYXRpdmU6IHN0cmluZ1xuICBpc19kZWZhdWx0OiBib29sZWFuXG59XG5cbnR5cGUgT3B0aW9uc1BheWxvYWQgPSB7XG4gIGN1cnJlbmNpZXM/OiBDdXJyZW5jeU9wdGlvbltdXG4gIHByb2R1Y3RfdHlwZXM/OiBPcHRpb25SZWNvcmRbXVxuICBwcm9kdWN0X2NvbGxlY3Rpb25zPzogT3B0aW9uUmVjb3JkW11cbiAgcHJvZHVjdF9jYXRlZ29yaWVzPzogT3B0aW9uUmVjb3JkW11cbiAgcHJvZHVjdF90YWdzPzogT3B0aW9uUmVjb3JkW11cbiAgc2FsZXNfY2hhbm5lbHM/OiBPcHRpb25SZWNvcmRbXVxuICBzaGlwcGluZ19wcm9maWxlcz86IE9wdGlvblJlY29yZFtdXG4gIGNhbXBhaWducz86IE9wdGlvblJlY29yZFtdXG4gIHNlbGxlcnM/OiBPcHRpb25SZWNvcmRbXVxufVxuXG50eXBlIFByb2R1Y3RGb3JtU3RhdGUgPSB7XG4gIGlkOiBzdHJpbmdcbiAgdGl0bGU6IHN0cmluZ1xuICBzdWJ0aXRsZTogc3RyaW5nXG4gIGhhbmRsZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbiAgdGh1bWJuYWlsOiBzdHJpbmdcbiAgc3RhdHVzOiBzdHJpbmdcbiAgZGlzY291bnRhYmxlOiBib29sZWFuXG4gIHNlbGxlcl9pZDogc3RyaW5nXG4gIHR5cGVfaWQ6IHN0cmluZ1xuICBjb2xsZWN0aW9uX2lkOiBzdHJpbmdcbiAgY2F0ZWdvcnlfaWQ6IHN0cmluZ1xuICB0YWdfaWQ6IHN0cmluZ1xuICBzYWxlc19jaGFubmVsX2lkOiBzdHJpbmdcbiAgdmFyaWFudHM6IFZhcmlhbnRGb3JtU3RhdGVbXVxufVxuXG50eXBlIFZhcmlhbnRGb3JtU3RhdGUgPSB7XG4gIGlkPzogc3RyaW5nXG4gIG92ZXJyaWRlX2NvbmZpZ19pZD86IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nXG4gIHNrdTogc3RyaW5nXG4gIGN1cnJlbmN5X2NvZGU6IHN0cmluZ1xuICBhbW91bnQ6IHN0cmluZ1xuICBvdmVycmlkZV9lbmFibGVkOiBib29sZWFuXG4gIG92ZXJyaWRlX2JlbmVmaXRfdHlwZTogQmVuZWZpdFR5cGVcbiAgb3ZlcnJpZGVfY3VycmVuY3lfY29kZTogc3RyaW5nXG4gIG92ZXJyaWRlX2Ftb3VudDogc3RyaW5nXG4gIG92ZXJyaWRlX3BlcmNlbnRhZ2U6IHN0cmluZ1xufVxuXG50eXBlIENvdXBvbkZvcm1TdGF0ZSA9IHtcbiAgZW5hYmxlZDogYm9vbGVhblxuICBiZW5lZml0X3R5cGU6IEJlbmVmaXRUeXBlXG4gIGFtb3VudDogc3RyaW5nXG4gIHBlcmNlbnRhZ2U6IHN0cmluZ1xuICBjdXJyZW5jeV9jb2RlOiBzdHJpbmdcbiAgY29kZV9zdHJhdGVneTogQ29kZVN0cmF0ZWd5XG4gIGNvZGVfcHJlZml4OiBzdHJpbmdcbiAgc2hhcmVkX2NvZGU6IHN0cmluZ1xuICBleHBpcmF0aW9uX3R5cGU6IEV4cGlyYXRpb25Qb2xpY3lUeXBlXG4gIGV4cGlyYXRpb25fZHVyYXRpb246IHN0cmluZ1xuICBleHBpcmF0aW9uX2R1cmF0aW9uX3VuaXQ6IEV4cGlyYXRpb25EdXJhdGlvblVuaXRcbiAgZXhwaXJhdGlvbl90aW1lX3BvbGljeTogRXhwaXJhdGlvblRpbWVQb2xpY3lcbiAgZXhwaXJhdGlvbl9kYXRlOiBzdHJpbmdcbiAgZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ246IGJvb2xlYW5cbiAgZXhwaXJhdGlvbl9jYXBfYXQ6IHN0cmluZ1xuICBtYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW06IHN0cmluZ1xuICBwcm9tb3Rpb25fbWlycm9yX21vZGU6IE1pcnJvck1vZGVcbiAgcHJvbW90aW9uX3N0YXR1czogUHJvbW90aW9uU3RhdHVzXG59XG5cbnR5cGUgQ2FtcGFpZ25Gb3JtU3RhdGUgPSB7XG4gIG1vZGU6IENhbXBhaWduTW9kZVxuICBjYW1wYWlnbl9pZDogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBjYW1wYWlnbl9pZGVudGlmaWVyOiBzdHJpbmdcbiAgc3RhcnRzX2F0OiBzdHJpbmdcbiAgZW5kc19hdDogc3RyaW5nXG59XG5cbmNvbnN0IE5PTkUgPSBcIl9fbm9uZV9fXCJcbmNvbnN0IHN0ZXBzOiBXaXphcmRTdGVwW10gPSBbXG4gIFwiZGV0YWlsc1wiLFxuICBcIm9yZ2FuaXplXCIsXG4gIFwidmFyaWFudHNcIixcbiAgXCJjb3Vwb25cIixcbiAgXCJjYW1wYWlnblwiLFxuXVxuXG5jb25zdCBlbXB0eVZhcmlhbnQ6IFZhcmlhbnRGb3JtU3RhdGUgPSB7XG4gIHRpdGxlOiBcIkRlZmF1bHQgdmFyaWFudFwiLFxuICBza3U6IFwiXCIsXG4gIGN1cnJlbmN5X2NvZGU6IFwiXCIsXG4gIGFtb3VudDogXCJcIixcbiAgb3ZlcnJpZGVfZW5hYmxlZDogZmFsc2UsXG4gIG92ZXJyaWRlX2JlbmVmaXRfdHlwZTogXCJmaXhlZF9hbW91bnRcIixcbiAgb3ZlcnJpZGVfY3VycmVuY3lfY29kZTogXCJcIixcbiAgb3ZlcnJpZGVfYW1vdW50OiBcIlwiLFxuICBvdmVycmlkZV9wZXJjZW50YWdlOiBcIlwiLFxufVxuXG5jb25zdCBlbXB0eVByb2R1Y3Q6IFByb2R1Y3RGb3JtU3RhdGUgPSB7XG4gIGlkOiBcIlwiLFxuICB0aXRsZTogXCJcIixcbiAgc3VidGl0bGU6IFwiXCIsXG4gIGhhbmRsZTogXCJcIixcbiAgZGVzY3JpcHRpb246IFwiXCIsXG4gIHRodW1ibmFpbDogXCJcIixcbiAgc3RhdHVzOiBcImRyYWZ0XCIsXG4gIGRpc2NvdW50YWJsZTogZmFsc2UsXG4gIHNlbGxlcl9pZDogXCJcIixcbiAgdHlwZV9pZDogXCJcIixcbiAgY29sbGVjdGlvbl9pZDogXCJcIixcbiAgY2F0ZWdvcnlfaWQ6IFwiXCIsXG4gIHRhZ19pZDogXCJcIixcbiAgc2FsZXNfY2hhbm5lbF9pZDogXCJcIixcbiAgdmFyaWFudHM6IFtlbXB0eVZhcmlhbnRdLFxufVxuXG5jb25zdCBlbXB0eUNvdXBvbjogQ291cG9uRm9ybVN0YXRlID0ge1xuICBlbmFibGVkOiB0cnVlLFxuICBiZW5lZml0X3R5cGU6IFwiZml4ZWRfYW1vdW50XCIsXG4gIGFtb3VudDogXCJcIixcbiAgcGVyY2VudGFnZTogXCJcIixcbiAgY3VycmVuY3lfY29kZTogXCJcIixcbiAgY29kZV9zdHJhdGVneTogXCJ1bmlxdWVfY29kZVwiLFxuICBjb2RlX3ByZWZpeDogXCJDT1VQT05cIixcbiAgc2hhcmVkX2NvZGU6IFwiXCIsXG4gIGV4cGlyYXRpb25fdHlwZTogXCJkdXJhdGlvblwiLFxuICBleHBpcmF0aW9uX2R1cmF0aW9uOiBcIjMwXCIsXG4gIGV4cGlyYXRpb25fZHVyYXRpb25fdW5pdDogXCJkYXlzXCIsXG4gIGV4cGlyYXRpb25fdGltZV9wb2xpY3k6IFwiZGF5X2VuZFwiLFxuICBleHBpcmF0aW9uX2RhdGU6IFwiXCIsXG4gIGV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduOiB0cnVlLFxuICBleHBpcmF0aW9uX2NhcF9hdDogXCJcIixcbiAgbWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtOiBcIjFcIixcbiAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiBcIm5vbmVcIixcbiAgcHJvbW90aW9uX3N0YXR1czogXCJkcmFmdFwiLFxufVxuXG5jb25zdCBlbXB0eUNhbXBhaWduOiBDYW1wYWlnbkZvcm1TdGF0ZSA9IHtcbiAgbW9kZTogXCJub25lXCIsXG4gIGNhbXBhaWduX2lkOiBcIlwiLFxuICBuYW1lOiBcIlwiLFxuICBjYW1wYWlnbl9pZGVudGlmaWVyOiBcIlwiLFxuICBzdGFydHNfYXQ6IFwiXCIsXG4gIGVuZHNfYXQ6IFwiXCIsXG59XG5cbmNvbnN0IG1vZGFsQ29udGVudFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImZsZXhcIixcbiAgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIixcbiAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG59XG5cbmNvbnN0IG1vZGFsU3RhdGljUm93U3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGZsZXhTaHJpbms6IDAsXG59XG5cbmNvbnN0IG1vZGFsV2l6YXJkU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6IFwiZmxleFwiLFxuICBmbGV4OiBcIjEgMSBhdXRvXCIsXG4gIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gIG1pbkhlaWdodDogMCxcbn1cblxuY29uc3QgbW9kYWxCb2R5U3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGZsZXg6IFwiMSAxIGF1dG9cIixcbiAgbWluSGVpZ2h0OiAwLFxuICBvdmVyZmxvd1k6IFwiYXV0b1wiLFxuICBwYWRkaW5nOiBcIjMycHggMjRweFwiLFxufVxuXG5jb25zdCBtb2RhbEZvcm1TdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgbWFyZ2luOiBcIjAgYXV0b1wiLFxuICBtYXhXaWR0aDogOTIwLFxuICB3aWR0aDogXCJtaW4oOTIwcHgsIDEwMCUpXCIsXG59XG5cbmNvbnN0IHN0YWNrU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6IFwiZmxleFwiLFxuICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICBnYXA6IDE2LFxufVxuXG5jb25zdCB0d29Db2x1bW5HcmlkU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6IFwiZ3JpZFwiLFxuICBnYXA6IDE2LFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiBcInJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDI2MHB4LCAxZnIpKVwiLFxufVxuXG5jb25zdCB0aHJlZUNvbHVtbkdyaWRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogXCJncmlkXCIsXG4gIGdhcDogMTYsXG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwicmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjIwcHgsIDFmcikpXCIsXG59XG5cbmNvbnN0IGZvdXJDb2x1bW5HcmlkU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6IFwiZ3JpZFwiLFxuICBnYXA6IDE2LFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiBcInJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDE2MHB4LCAxZnIpKVwiLFxufVxuXG5jb25zdCBwYW5lbFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBib3JkZXI6IFwiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1iYXNlKVwiLFxuICBib3JkZXJSYWRpdXM6IDgsXG4gIHBhZGRpbmc6IDE2LFxufVxuXG5jb25zdCByb3dCZXR3ZWVuU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gIGRpc3BsYXk6IFwiZmxleFwiLFxuICBnYXA6IDE2LFxuICBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIsXG59XG5cbmZ1bmN0aW9uIGJhY2tlbmRVcmwoKSB7XG4gIHJldHVybiB0eXBlb2YgX19CQUNLRU5EX1VSTF9fID09PSBcInN0cmluZ1wiXG4gICAgPyBfX0JBQ0tFTkRfVVJMX18ucmVwbGFjZSgvXFwvJC8sIFwiXCIpXG4gICAgOiBcIlwiXG59XG5cbmZ1bmN0aW9uIGFwaUVycm9yTWVzc2FnZShwYXlsb2FkOiBhbnksIGZhbGxiYWNrOiBzdHJpbmcpIHtcbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtcbiAgICBwYXlsb2FkPy5tZXNzYWdlLFxuICAgIHBheWxvYWQ/LmVycm9yPy5tZXNzYWdlLFxuICAgIHBheWxvYWQ/LmVycm9yLFxuICAgIHBheWxvYWQ/LmVycm9ycz8uWzBdPy5tZXNzYWdlLFxuICBdXG4gIGNvbnN0IG1lc3NhZ2UgPSBjYW5kaWRhdGVzLmZpbmQoXG4gICAgKGNhbmRpZGF0ZSkgPT4gdHlwZW9mIGNhbmRpZGF0ZSA9PT0gXCJzdHJpbmdcIiAmJiBjYW5kaWRhdGUudHJpbSgpLFxuICApXG5cbiAgcmV0dXJuIG1lc3NhZ2UgfHwgZmFsbGJhY2sgfHwgXCJSZXF1ZXN0IGZhaWxlZFwiXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwaUZldGNoPFQ+KFxuICBwYXRoOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlcXVlc3RJbml0ID0ge30sXG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYWNrZW5kVXJsKCl9JHtwYXRofWAsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4ob3B0aW9ucy5ib2R5ID8geyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9IDoge30pLFxuICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgIH0sXG4gIH0pXG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gbnVsbClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYXBpRXJyb3JNZXNzYWdlKHBheWxvYWQsIHJlc3BvbnNlLnN0YXR1c1RleHQpKVxuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKVxufVxuXG5mdW5jdGlvbiBudW1iZXJPck51bGwodmFsdWU6IHN0cmluZykge1xuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodmFsdWUpXG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSAmJiBwYXJzZWQgPiAwID8gcGFyc2VkIDogbnVsbFxufVxuXG5mdW5jdGlvbiBvcHRpb25MYWJlbChvcHRpb246IE9wdGlvblJlY29yZCkge1xuICByZXR1cm4gKFxuICAgIG9wdGlvbi5uYW1lIHx8IG9wdGlvbi50aXRsZSB8fCBvcHRpb24udmFsdWUgfHwgb3B0aW9uLmhhbmRsZSB8fCBvcHRpb24uaWRcbiAgKVxufVxuXG5mdW5jdGlvbiBiZW5lZml0TGFiZWwoXG4gIGNvbmZpZzogUGljazxcbiAgICBDb3Vwb25Qcm9kdWN0Q29uZmlnLFxuICAgIFwiYmVuZWZpdF90eXBlXCIgfCBcImFtb3VudFwiIHwgXCJwZXJjZW50YWdlXCIgfCBcImN1cnJlbmN5X2NvZGVcIlxuICA+LFxuKSB7XG4gIGlmIChjb25maWcuYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiKSB7XG4gICAgcmV0dXJuIGAke2NvbmZpZy5hbW91bnQgfHwgMH0gJHsoY29uZmlnLmN1cnJlbmN5X2NvZGUgfHwgXCJcIikudG9VcHBlckNhc2UoKX1gXG4gIH1cbiAgaWYgKGNvbmZpZy5iZW5lZml0X3R5cGUgPT09IFwicGVyY2VudGFnZVwiKSB7XG4gICAgcmV0dXJuIGAke2NvbmZpZy5wZXJjZW50YWdlIHx8IDB9JWBcbiAgfVxuICBpZiAoY29uZmlnLmJlbmVmaXRfdHlwZSA9PT0gXCJmcmVlX3NoaXBwaW5nXCIpIHtcbiAgICByZXR1cm4gXCJGcmVlIHNoaXBwaW5nXCJcbiAgfVxuICByZXR1cm4gXCJCdXkgZ2V0XCJcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF0ZSh2YWx1ZT86IHN0cmluZyB8IG51bGwpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiLVwiXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgaWYgKE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiBcIi1cIlxuICByZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKVxufVxuXG5mdW5jdGlvbiBmb3JtYXREYXRlVGltZSh2YWx1ZT86IHN0cmluZyB8IG51bGwpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiLVwiXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgaWYgKE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiBcIi1cIlxuICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZygpXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZ1bGxEYXRlKHZhbHVlPzogc3RyaW5nIHwgbnVsbCkge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gXCItXCJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKVxuICBpZiAoTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgcmV0dXJuIFwiLVwiXG4gIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKHVuZGVmaW5lZCwge1xuICAgIGRheTogXCJudW1lcmljXCIsXG4gICAgaG91cjogXCJudW1lcmljXCIsXG4gICAgbWludXRlOiBcIjItZGlnaXRcIixcbiAgICBtb250aDogXCJzaG9ydFwiLFxuICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICB9KVxufVxuXG5mdW5jdGlvbiBmb3JtYXRSZWxhdGl2ZURhdGUodmFsdWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBcIi1cIlxuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpXG4gIGlmIChOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gXCItXCJcblxuICBjb25zdCBkaWZmU2Vjb25kcyA9IE1hdGgucm91bmQoKGRhdGUuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSkgLyAxMDAwKVxuICBjb25zdCBhYnNTZWNvbmRzID0gTWF0aC5hYnMoZGlmZlNlY29uZHMpXG4gIGNvbnN0IHVuaXRzOiBBcnJheTxbSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXRVbml0LCBudW1iZXJdPiA9IFtcbiAgICBbXCJ5ZWFyXCIsIDYwICogNjAgKiAyNCAqIDM2NV0sXG4gICAgW1wibW9udGhcIiwgNjAgKiA2MCAqIDI0ICogMzBdLFxuICAgIFtcIndlZWtcIiwgNjAgKiA2MCAqIDI0ICogN10sXG4gICAgW1wiZGF5XCIsIDYwICogNjAgKiAyNF0sXG4gICAgW1wiaG91clwiLCA2MCAqIDYwXSxcbiAgICBbXCJtaW51dGVcIiwgNjBdLFxuICBdXG4gIGNvbnN0IFt1bml0LCBzZWNvbmRzXSA9XG4gICAgdW5pdHMuZmluZCgoWywgc2Vjb25kc1BlclVuaXRdKSA9PiBhYnNTZWNvbmRzID49IHNlY29uZHNQZXJVbml0KSB8fCBbXVxuXG4gIGlmICghdW5pdCB8fCAhc2Vjb25kcykge1xuICAgIHJldHVybiBcImp1c3Qgbm93XCJcbiAgfVxuXG4gIHJldHVybiBuZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQodW5kZWZpbmVkLCB7IG51bWVyaWM6IFwiYXV0b1wiIH0pLmZvcm1hdChcbiAgICBNYXRoLnJvdW5kKGRpZmZTZWNvbmRzIC8gc2Vjb25kcyksXG4gICAgdW5pdCxcbiAgKVxufVxuXG5mdW5jdGlvbiBmb3JtYXRTbmFwc2hvdEFtb3VudChhbW91bnQ6IG51bWJlciB8IG51bGwsIGN1cnJlbmN5Pzogc3RyaW5nIHwgbnVsbCkge1xuICBpZiAoYW1vdW50ID09IG51bGwpIHJldHVybiBcIi1cIlxuICBjb25zdCBjb2RlID0gY3VycmVuY3kgPyBjdXJyZW5jeS50b1VwcGVyQ2FzZSgpIDogXCJcIlxuICByZXR1cm4gW2NvZGUsIGFtb3VudC50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQsIHsgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyIH0pXVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuam9pbihcIiBcIilcbn1cblxuZnVuY3Rpb24gdG9EYXRlVGltZUxvY2FsKHZhbHVlPzogc3RyaW5nIHwgbnVsbCkge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gXCJcIlxuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpXG4gIGlmIChOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gXCJcIlxuICBjb25zdCBsb2NhbERhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSAtIGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwXzAwMClcbiAgcmV0dXJuIGxvY2FsRGF0ZS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDE2KVxufVxuXG5mdW5jdGlvbiBlbnRpdGxlbWVudFN0YXR1c0NvbG9yKHN0YXR1czogc3RyaW5nKSB7XG4gIGlmIChzdGF0dXMgPT09IFwiaXNzdWVkXCIpIHJldHVybiBcImdyZWVuXCIgYXMgY29uc3RcbiAgaWYgKHN0YXR1cyA9PT0gXCJyZWRlZW1lZFwiKSByZXR1cm4gXCJibHVlXCIgYXMgY29uc3RcbiAgaWYgKHN0YXR1cyA9PT0gXCJleHBpcmVkXCIgfHwgc3RhdHVzID09PSBcImNhbmNlbGVkXCIpIHJldHVybiBcImdyZXlcIiBhcyBjb25zdFxuICByZXR1cm4gXCJvcmFuZ2VcIiBhcyBjb25zdFxufVxuXG5mdW5jdGlvbiBwcm9kdWN0U3RhdHVzQ29sb3Ioc3RhdHVzPzogc3RyaW5nIHwgbnVsbCkge1xuICBpZiAoc3RhdHVzID09PSBcInB1Ymxpc2hlZFwiKSByZXR1cm4gXCJncmVlblwiIGFzIGNvbnN0XG4gIGlmIChzdGF0dXMgPT09IFwicmVqZWN0ZWRcIikgcmV0dXJuIFwicmVkXCIgYXMgY29uc3RcbiAgaWYgKHN0YXR1cyA9PT0gXCJwcm9wb3NlZFwiKSByZXR1cm4gXCJvcmFuZ2VcIiBhcyBjb25zdFxuICByZXR1cm4gXCJncmV5XCIgYXMgY29uc3Rcbn1cblxuZnVuY3Rpb24gc25hcHNob3RTdHJpbmcoXG4gIHNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGtleTogc3RyaW5nLFxuKSB7XG4gIGNvbnN0IHZhbHVlID0gc25hcHNob3Q/LltrZXldXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUudHJpbSgpKSByZXR1cm4gdmFsdWVcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIFN0cmluZyh2YWx1ZSlcbiAgcmV0dXJuIFwiXCJcbn1cblxuZnVuY3Rpb24gc25hcHNob3ROdW1iZXIoXG4gIHNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGtleTogc3RyaW5nLFxuKSB7XG4gIGNvbnN0IHZhbHVlID0gc25hcHNob3Q/LltrZXldXG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogbnVsbFxufVxuXG5mdW5jdGlvbiBqc29uQmxvY2sodmFsdWU6IHVua25vd24pIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBcInt9XCJcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKVxufVxuXG5mdW5jdGlvbiBjb3Vwb25Db2RlKGVudGl0bGVtZW50OiBDb3Vwb25FbnRpdGxlbWVudCkge1xuICByZXR1cm4gZW50aXRsZW1lbnQuY29kZSB8fCBlbnRpdGxlbWVudC5zaGFyZWRfY29kZSB8fCBcIi1cIlxufVxuXG5mdW5jdGlvbiBlbnRpdGxlbWVudFNvdXJjZShlbnRpdGxlbWVudDogQ291cG9uRW50aXRsZW1lbnQpIHtcbiAgaWYgKGVudGl0bGVtZW50Lm9yaWdpbiA9PT0gXCJleHRlcm5hbFwiKSByZXR1cm4gXCJFeHRlcm5hbFwiXG4gIHJldHVybiBcIlB1cmNoYXNlXCJcbn1cblxuZnVuY3Rpb24gZW50aXRsZW1lbnRTZWxsZXJTY29wZShlbnRpdGxlbWVudDogQ291cG9uRW50aXRsZW1lbnQpIHtcbiAgY29uc3QgY291bnQgPSBlbnRpdGxlbWVudC5zZWxsZXJfdGFyZ2V0cz8ubGVuZ3RoIHx8IDBcbiAgaWYgKGVudGl0bGVtZW50Lm9yaWdpbiAhPT0gXCJleHRlcm5hbFwiKSB7XG4gICAgaWYgKCFjb3VudCkgcmV0dXJuIFwiUHJvZHVjdCBzZWxsZXJcIlxuICAgIHJldHVybiBgUHJvZHVjdCBzZWxsZXIgKyAke2NvdW50fSBsaW5rZWRgXG4gIH1cbiAgaWYgKCFjb3VudCkgcmV0dXJuIFwiQWRtaW4gb25seVwiXG4gIHJldHVybiBjb3VudCA9PT0gMSA/IFwiMSBsaW5rZWQgc2VsbGVyXCIgOiBgJHtjb3VudH0gbGlua2VkIHNlbGxlcnNgXG59XG5cbmZ1bmN0aW9uIG9yZGVyRGlzcGxheUlkKG9yZGVyOiBDb3Vwb25PcmRlclN1bW1hcnkgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gIGlmICghb3JkZXIpIHJldHVybiBcIi1cIlxuICByZXR1cm4gb3JkZXIuZGlzcGxheV9pZCA9PSBudWxsID8gb3JkZXIuaWQgOiBgIyR7b3JkZXIuZGlzcGxheV9pZH1gXG59XG5cbmZ1bmN0aW9uIGRhc2hib2FyZEJhc2VQYXRoKGFwaUJhc2U6IEFwaUJhc2UpIHtcbiAgcmV0dXJuIGFwaUJhc2UgPT09IFwiL3ZlbmRvclwiID8gXCIvc2VsbGVyXCIgOiBcIi9kYXNoYm9hcmRcIlxufVxuXG5mdW5jdGlvbiBjb3Vwb25EZXRhaWxQYXRoKGFwaUJhc2U6IEFwaUJhc2UsIGVudGl0bGVtZW50SWQ6IHN0cmluZykge1xuICByZXR1cm4gYCR7ZGFzaGJvYXJkQmFzZVBhdGgoYXBpQmFzZSl9L2NvdXBvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgZW50aXRsZW1lbnRJZCxcbiAgKX1gXG59XG5cbmZ1bmN0aW9uIG9yZGVyRGV0YWlsUGF0aChhcGlCYXNlOiBBcGlCYXNlLCBvcmRlcklkOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGAke2Rhc2hib2FyZEJhc2VQYXRoKGFwaUJhc2UpfS9vcmRlcnMvJHtlbmNvZGVVUklDb21wb25lbnQob3JkZXJJZCl9YFxufVxuXG5mdW5jdGlvbiBjdXJyZW50Q291cG9uRGV0YWlsSWQoYXBpQmFzZTogQXBpQmFzZSkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBcIlwiXG4gIH1cblxuICBjb25zdCBwcmVmaXggPSBgJHtkYXNoYm9hcmRCYXNlUGF0aChhcGlCYXNlKX0vY291cG9ucy9gXG4gIGNvbnN0IHBhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWVcbiAgY29uc3QgaW5kZXggPSBwYXRoLmluZGV4T2YocHJlZml4KVxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIFwiXCJcbiAgfVxuXG4gIGNvbnN0IGlkID0gcGF0aC5zbGljZShpbmRleCArIHByZWZpeC5sZW5ndGgpLnNwbGl0KFwiL1wiKVswXVxuICBpZiAoIWlkIHx8IGlkID09PSBcInByb2R1Y3RzXCIpIHtcbiAgICByZXR1cm4gXCJcIlxuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGlkKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gaWRcbiAgfVxufVxuXG5mdW5jdGlvbiBiZW5lZml0U25hcHNob3RMYWJlbChcbiAgc25hcHNob3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbikge1xuICBjb25zdCB0eXBlID0gc25hcHNob3RTdHJpbmcoc25hcHNob3QsIFwiYmVuZWZpdF90eXBlXCIpXG4gIGlmICh0eXBlID09PSBcImZpeGVkX2Ftb3VudFwiKSB7XG4gICAgY29uc3QgYW1vdW50cyA9IEFycmF5LmlzQXJyYXkoc25hcHNob3Q/LmFtb3VudHMpXG4gICAgICA/IChzbmFwc2hvdC5hbW91bnRzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PilcbiAgICAgIDogW11cbiAgICBpZiAoYW1vdW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBhbW91bnRzXG4gICAgICAgIC5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgIGNvbnN0IGFtb3VudCA9IHNuYXBzaG90TnVtYmVyKHJvdywgXCJhbW91bnRcIilcbiAgICAgICAgICBjb25zdCBjdXJyZW5jeSA9IHNuYXBzaG90U3RyaW5nKHJvdywgXCJjdXJyZW5jeV9jb2RlXCIpLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICByZXR1cm4gYCR7YW1vdW50ID8/IDB9ICR7Y3VycmVuY3l9YC50cmltKClcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIsIFwiKVxuICAgIH1cblxuICAgIGNvbnN0IGFtb3VudCA9IHNuYXBzaG90TnVtYmVyKHNuYXBzaG90LCBcImFtb3VudFwiKVxuICAgIGNvbnN0IGN1cnJlbmN5ID0gc25hcHNob3RTdHJpbmcoc25hcHNob3QsIFwiY3VycmVuY3lfY29kZVwiKS50b1VwcGVyQ2FzZSgpXG4gICAgcmV0dXJuIGAke2Ftb3VudCA/PyAwfSAke2N1cnJlbmN5fWAudHJpbSgpXG4gIH1cblxuICBpZiAodHlwZSA9PT0gXCJwZXJjZW50YWdlXCIpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHNuYXBzaG90Py5wcm9tb3Rpb25fdGVtcGxhdGUgYXNcbiAgICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgIHwgbnVsbFxuICAgICAgfCB1bmRlZmluZWRcbiAgICBjb25zdCBtZXRob2QgPSB0ZW1wbGF0ZT8uYXBwbGljYXRpb25fbWV0aG9kIGFzXG4gICAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICB8IG51bGxcbiAgICAgIHwgdW5kZWZpbmVkXG4gICAgY29uc3Qgc2NvcGUgPSBzbmFwc2hvdFN0cmluZyhtZXRob2QsIFwidGFyZ2V0X3R5cGVcIikgPT09IFwib3JkZXJcIlxuICAgICAgPyBcIm9yZGVyXCJcbiAgICAgIDogXCJwcm9kdWN0c1wiXG4gICAgcmV0dXJuIGAke3NuYXBzaG90TnVtYmVyKHNuYXBzaG90LCBcInBlcmNlbnRhZ2VcIikgPz8gMH0lIG9mZiAke3Njb3BlfWBcbiAgfVxuXG4gIGlmICh0eXBlID09PSBcImZyZWVfc2hpcHBpbmdcIikge1xuICAgIHJldHVybiBcIkZyZWUgc2hpcHBpbmdcIlxuICB9XG5cbiAgaWYgKHR5cGUgPT09IFwiYnV5X2dldFwiKSB7XG4gICAgcmV0dXJuIFwiQnV5IFggR2V0IFlcIlxuICB9XG5cbiAgcmV0dXJuIFwiVW5rbm93blwiXG59XG5cbmZ1bmN0aW9uIGV4cGlyYXRpb25Qb2xpY3lMYWJlbChcbiAgc25hcHNob3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbikge1xuICBjb25zdCBwb2xpY3kgPSBzbmFwc2hvdD8uZXhwaXJhdGlvbl9wb2xpY3kgYXNcbiAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgfCBudWxsXG4gICAgfCB1bmRlZmluZWRcbiAgY29uc3QgdHlwZSA9IHNuYXBzaG90U3RyaW5nKHBvbGljeSwgXCJ0eXBlXCIpXG5cbiAgaWYgKHR5cGUgPT09IFwibm9uZVwiKSByZXR1cm4gXCJObyBleHBpcmF0aW9uXCJcbiAgaWYgKHR5cGUgPT09IFwibW9udGhfZW5kXCIpIHtcbiAgICByZXR1cm4gYEVuZCBvZiBzYW1lIG1vbnRoICgke3NuYXBzaG90U3RyaW5nKHBvbGljeSwgXCJ0aW1lX3BvbGljeVwiKSB8fCBcImRheV9lbmRcIn0pYFxuICB9XG4gIGlmICh0eXBlID09PSBcImR1cmF0aW9uXCIpIHtcbiAgICBjb25zdCBkdXJhdGlvbiA9XG4gICAgICBzbmFwc2hvdE51bWJlcihwb2xpY3ksIFwiZHVyYXRpb25cIikgPz9cbiAgICAgIHNuYXBzaG90TnVtYmVyKHBvbGljeSwgXCJkdXJhdGlvbl9kYXlzXCIpID8/XG4gICAgICAwXG4gICAgY29uc3QgdW5pdCA9IHNuYXBzaG90U3RyaW5nKHBvbGljeSwgXCJkdXJhdGlvbl91bml0XCIpIHx8IFwiZGF5c1wiXG4gICAgcmV0dXJuIGAke2R1cmF0aW9ufSAke3VuaXR9IGFmdGVyIGlzc3VhbmNlYFxuICB9XG4gIGlmICh0eXBlID09PSBcImZpeGVkXCIpIHtcbiAgICByZXR1cm4gYEZpeGVkIGRhdGUgJHtmb3JtYXREYXRlVGltZShzbmFwc2hvdFN0cmluZyhwb2xpY3ksIFwiZXhwaXJlc19hdFwiKSl9YFxuICB9XG5cbiAgcmV0dXJuIFwiLVwiXG59XG5cbmZ1bmN0aW9uIGNhbXBhaWduU25hcHNob3RMYWJlbChcbiAgc25hcHNob3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbikge1xuICBjb25zdCBjYW1wYWlnblNuYXBzaG90ID0gc25hcHNob3Q/LmNhbXBhaWduX3NuYXBzaG90IGFzXG4gICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHwgbnVsbFxuICAgIHwgdW5kZWZpbmVkXG4gIHJldHVybiAoXG4gICAgc25hcHNob3RTdHJpbmcoY2FtcGFpZ25TbmFwc2hvdCwgXCJuYW1lXCIpIHx8XG4gICAgc25hcHNob3RTdHJpbmcoY2FtcGFpZ25TbmFwc2hvdCwgXCJjYW1wYWlnbl9pZGVudGlmaWVyXCIpIHx8XG4gICAgc25hcHNob3RTdHJpbmcoc25hcHNob3QsIFwiY2FtcGFpZ25faWRcIikgfHxcbiAgICBcIk5vbmVcIlxuICApXG59XG5cbmZ1bmN0aW9uIHByb21vdGlvblNuYXBzaG90TGFiZWwoXG4gIHNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfCB1bmRlZmluZWQsXG4pIHtcbiAgY29uc3QgdGVtcGxhdGUgPSBzbmFwc2hvdD8ucHJvbW90aW9uX3RlbXBsYXRlIGFzXG4gICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHwgbnVsbFxuICAgIHwgdW5kZWZpbmVkXG4gIGNvbnN0IG1ldGhvZCA9IHRlbXBsYXRlPy5hcHBsaWNhdGlvbl9tZXRob2QgYXNcbiAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgfCBudWxsXG4gICAgfCB1bmRlZmluZWRcbiAgY29uc3QgdGFyZ2V0ID0gc25hcHNob3RTdHJpbmcobWV0aG9kLCBcInRhcmdldF90eXBlXCIpXG4gIGNvbnN0IGFsbG9jYXRpb24gPSBzbmFwc2hvdFN0cmluZyhtZXRob2QsIFwiYWxsb2NhdGlvblwiKVxuXG4gIHJldHVybiBbdGFyZ2V0LCBhbGxvY2F0aW9uXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiAvIFwiKSB8fCBcIk5vbmVcIlxufVxuXG5mdW5jdGlvbiBjYW1wYWlnbkxhYmVsKGNvbmZpZzogQ291cG9uUHJvZHVjdENvbmZpZykge1xuICBjb25zdCBuYW1lID0gY29uZmlnLmNhbXBhaWduX3NuYXBzaG90Py5uYW1lXG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWVcbiAgfVxuXG4gIHJldHVybiBjb25maWcuY2FtcGFpZ25faWQgfHwgXCJOb25lXCJcbn1cblxuZnVuY3Rpb24gZm9ybUZyb21Sb3cocm93OiBDb3Vwb25Qcm9kdWN0Um93LCBkZWZhdWx0Q3VycmVuY3lDb2RlOiBzdHJpbmcpIHtcbiAgY29uc3QgcHJvZHVjdCA9IHJvdy5wcm9kdWN0IHx8ICh7fSBhcyBQcm9kdWN0UmVjb3JkKVxuICBjb25zdCBjb25maWcgPSByb3cuY291cG9uX3Byb2R1Y3RfY29uZmlnXG4gIGNvbnN0IHZhcmlhbnRDb25maWdCeVZhcmlhbnRJZCA9IG5ldyBNYXAoXG4gICAgKHJvdy5jb3Vwb25fcHJvZHVjdF92YXJpYW50X2NvbmZpZ3MgfHwgW10pLm1hcCgodmFyaWFudENvbmZpZykgPT4gW1xuICAgICAgdmFyaWFudENvbmZpZy52YXJpYW50X2lkLFxuICAgICAgdmFyaWFudENvbmZpZyxcbiAgICBdKSxcbiAgKVxuICBjb25zdCBkdXJhdGlvbiA9XG4gICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlID09PSBcImR1cmF0aW9uXCJcbiAgICAgID8gY29uZmlnLmV4cGlyYXRpb25fcG9saWN5LmR1cmF0aW9uID8/XG4gICAgICAgIGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeS5kdXJhdGlvbl9kYXlzID8/XG4gICAgICAgIDMwXG4gICAgICA6IDMwXG5cbiAgcmV0dXJuIHtcbiAgICBwcm9kdWN0OiB7XG4gICAgICAuLi5lbXB0eVByb2R1Y3QsXG4gICAgICBpZDogcHJvZHVjdC5pZCB8fCBcIlwiLFxuICAgICAgdGl0bGU6IHByb2R1Y3QudGl0bGUgfHwgXCJcIixcbiAgICAgIHN1YnRpdGxlOiBwcm9kdWN0LnN1YnRpdGxlIHx8IFwiXCIsXG4gICAgICBoYW5kbGU6IHByb2R1Y3QuaGFuZGxlIHx8IFwiXCIsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvZHVjdC5kZXNjcmlwdGlvbiB8fCBcIlwiLFxuICAgICAgdGh1bWJuYWlsOiBwcm9kdWN0LnRodW1ibmFpbCB8fCBcIlwiLFxuICAgICAgc3RhdHVzOiBwcm9kdWN0LnN0YXR1cyB8fCBcImRyYWZ0XCIsXG4gICAgICBkaXNjb3VudGFibGU6IEJvb2xlYW4ocHJvZHVjdC5kaXNjb3VudGFibGUpLFxuICAgICAgdHlwZV9pZDogcHJvZHVjdC50eXBlX2lkIHx8IFwiXCIsXG4gICAgICBjb2xsZWN0aW9uX2lkOiBwcm9kdWN0LmNvbGxlY3Rpb25faWQgfHwgXCJcIixcbiAgICAgIGNhdGVnb3J5X2lkOiBwcm9kdWN0LmNhdGVnb3JpZXM/LlswXT8uaWQgfHwgXCJcIixcbiAgICAgIHRhZ19pZDogcHJvZHVjdC50YWdzPy5bMF0/LmlkIHx8IFwiXCIsXG4gICAgICBzYWxlc19jaGFubmVsX2lkOiBwcm9kdWN0LnNhbGVzX2NoYW5uZWxzPy5bMF0/LmlkIHx8IFwiXCIsXG4gICAgICB2YXJpYW50czogKHByb2R1Y3QudmFyaWFudHM/Lmxlbmd0aCA/IHByb2R1Y3QudmFyaWFudHMgOiBbXSkubWFwKFxuICAgICAgICAodmFyaWFudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG92ZXJyaWRlID0gdmFyaWFudENvbmZpZ0J5VmFyaWFudElkLmdldCh2YXJpYW50LmlkKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5lbXB0eVZhcmlhbnQsXG4gICAgICAgICAgICBpZDogdmFyaWFudC5pZCxcbiAgICAgICAgICAgIG92ZXJyaWRlX2NvbmZpZ19pZDogb3ZlcnJpZGU/LmlkLFxuICAgICAgICAgICAgdGl0bGU6IHZhcmlhbnQudGl0bGUgfHwgXCJcIixcbiAgICAgICAgICAgIHNrdTogdmFyaWFudC5za3UgfHwgXCJcIixcbiAgICAgICAgICAgIGN1cnJlbmN5X2NvZGU6XG4gICAgICAgICAgICAgIHZhcmlhbnQucHJpY2VzPy5bMF0/LmN1cnJlbmN5X2NvZGUgfHxcbiAgICAgICAgICAgICAgb3ZlcnJpZGU/LmN1cnJlbmN5X2NvZGUgfHxcbiAgICAgICAgICAgICAgY29uZmlnLmN1cnJlbmN5X2NvZGUgfHxcbiAgICAgICAgICAgICAgZGVmYXVsdEN1cnJlbmN5Q29kZSxcbiAgICAgICAgICAgIGFtb3VudDpcbiAgICAgICAgICAgICAgdmFyaWFudC5wcmljZXM/LlswXT8uYW1vdW50ID09IG51bGxcbiAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICA6IFN0cmluZyh2YXJpYW50LnByaWNlcz8uWzBdPy5hbW91bnQpLFxuICAgICAgICAgICAgb3ZlcnJpZGVfZW5hYmxlZDogb3ZlcnJpZGUgPyBvdmVycmlkZS5lbmFibGVkICE9PSBmYWxzZSA6IGZhbHNlLFxuICAgICAgICAgICAgb3ZlcnJpZGVfYmVuZWZpdF90eXBlOlxuICAgICAgICAgICAgICBvdmVycmlkZT8uYmVuZWZpdF90eXBlIHx8IGNvbmZpZy5iZW5lZml0X3R5cGUgfHwgXCJmaXhlZF9hbW91bnRcIixcbiAgICAgICAgICAgIG92ZXJyaWRlX2N1cnJlbmN5X2NvZGU6XG4gICAgICAgICAgICAgIG92ZXJyaWRlPy5jdXJyZW5jeV9jb2RlIHx8XG4gICAgICAgICAgICAgIGNvbmZpZy5jdXJyZW5jeV9jb2RlIHx8XG4gICAgICAgICAgICAgIGRlZmF1bHRDdXJyZW5jeUNvZGUsXG4gICAgICAgICAgICBvdmVycmlkZV9hbW91bnQ6XG4gICAgICAgICAgICAgIG92ZXJyaWRlPy5hbW91bnQgPT0gbnVsbCA/IFwiXCIgOiBTdHJpbmcob3ZlcnJpZGUuYW1vdW50KSxcbiAgICAgICAgICAgIG92ZXJyaWRlX3BlcmNlbnRhZ2U6XG4gICAgICAgICAgICAgIG92ZXJyaWRlPy5wZXJjZW50YWdlID09IG51bGwgPyBcIlwiIDogU3RyaW5nKG92ZXJyaWRlLnBlcmNlbnRhZ2UpLFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgfSxcbiAgICBjb3Vwb246IHtcbiAgICAgIC4uLmVtcHR5Q291cG9uLFxuICAgICAgZW5hYmxlZDogY29uZmlnLmVuYWJsZWQsXG4gICAgICBiZW5lZml0X3R5cGU6IGNvbmZpZy5iZW5lZml0X3R5cGUsXG4gICAgICBhbW91bnQ6IGNvbmZpZy5hbW91bnQgPT0gbnVsbCA/IFwiXCIgOiBTdHJpbmcoY29uZmlnLmFtb3VudCksXG4gICAgICBwZXJjZW50YWdlOiBjb25maWcucGVyY2VudGFnZSA9PSBudWxsID8gXCJcIiA6IFN0cmluZyhjb25maWcucGVyY2VudGFnZSksXG4gICAgICBjdXJyZW5jeV9jb2RlOiBjb25maWcuY3VycmVuY3lfY29kZSB8fCBkZWZhdWx0Q3VycmVuY3lDb2RlLFxuICAgICAgY29kZV9zdHJhdGVneTogY29uZmlnLmNvZGVfc3RyYXRlZ3ksXG4gICAgICBjb2RlX3ByZWZpeDogY29uZmlnLmNvZGVfcHJlZml4IHx8IFwiXCIsXG4gICAgICBzaGFyZWRfY29kZTogY29uZmlnLnNoYXJlZF9jb2RlIHx8IFwiXCIsXG4gICAgICBleHBpcmF0aW9uX3R5cGU6IGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeT8udHlwZSB8fCBcImR1cmF0aW9uXCIsXG4gICAgICBleHBpcmF0aW9uX2R1cmF0aW9uOiBTdHJpbmcoZHVyYXRpb24pLFxuICAgICAgZXhwaXJhdGlvbl9kdXJhdGlvbl91bml0OlxuICAgICAgICBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3k/LnR5cGUgPT09IFwiZHVyYXRpb25cIlxuICAgICAgICAgID8gY29uZmlnLmV4cGlyYXRpb25fcG9saWN5LmR1cmF0aW9uX3VuaXQgfHwgXCJkYXlzXCJcbiAgICAgICAgICA6IFwiZGF5c1wiLFxuICAgICAgZXhwaXJhdGlvbl90aW1lX3BvbGljeTpcbiAgICAgICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlID09PSBcImR1cmF0aW9uXCIgfHxcbiAgICAgICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlID09PSBcIm1vbnRoX2VuZFwiXG4gICAgICAgICAgPyBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3kudGltZV9wb2xpY3kgfHwgXCJleGFjdGx5XCJcbiAgICAgICAgICA6IFwiZGF5X2VuZFwiLFxuICAgICAgZXhwaXJhdGlvbl9kYXRlOlxuICAgICAgICBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3k/LnR5cGUgPT09IFwiZml4ZWRcIlxuICAgICAgICAgID8gdG9EYXRlVGltZUxvY2FsKGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeS5leHBpcmVzX2F0KVxuICAgICAgICAgIDogXCJcIixcbiAgICAgIGV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduOlxuICAgICAgICBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3k/LmNhcF9ieV9jYW1wYWlnbiAhPT0gZmFsc2UsXG4gICAgICBleHBpcmF0aW9uX2NhcF9hdDogY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py5jYXBfYXRcbiAgICAgICAgPyB0b0RhdGVUaW1lTG9jYWwoY29uZmlnLmV4cGlyYXRpb25fcG9saWN5LmNhcF9hdClcbiAgICAgICAgOiBcIlwiLFxuICAgICAgbWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtOiBTdHJpbmcoXG4gICAgICAgIGNvbmZpZy5tYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW0gfHwgMSxcbiAgICAgICksXG4gICAgICBwcm9tb3Rpb25fbWlycm9yX21vZGU6IGNvbmZpZy5wcm9tb3Rpb25fbWlycm9yX21vZGUgfHwgXCJub25lXCIsXG4gICAgICBwcm9tb3Rpb25fc3RhdHVzOiBjb25maWcucHJvbW90aW9uX3N0YXR1cyB8fCBcImRyYWZ0XCIsXG4gICAgfSxcbiAgICBjYW1wYWlnbjoge1xuICAgICAgLi4uZW1wdHlDYW1wYWlnbixcbiAgICAgIG1vZGU6IGNvbmZpZy5jYW1wYWlnbl9pZCA/IFwiZXhpc3RpbmdcIiA6IFwibm9uZVwiLFxuICAgICAgY2FtcGFpZ25faWQ6IGNvbmZpZy5jYW1wYWlnbl9pZCB8fCBcIlwiLFxuICAgIH0sXG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRDb3Vwb25QYXlsb2FkKFxuICBjb3Vwb246IENvdXBvbkZvcm1TdGF0ZSxcbiAgYWxsb3dQcm9tb3Rpb25NaXJyb3I6IGJvb2xlYW4sXG4pIHtcbiAgcmV0dXJuIHtcbiAgICBlbmFibGVkOiBjb3Vwb24uZW5hYmxlZCxcbiAgICBiZW5lZml0X3R5cGU6IGNvdXBvbi5iZW5lZml0X3R5cGUsXG4gICAgYW1vdW50OlxuICAgICAgY291cG9uLmJlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIlxuICAgICAgICA/IG51bWJlck9yTnVsbChjb3Vwb24uYW1vdW50KVxuICAgICAgICA6IG51bGwsXG4gICAgcGVyY2VudGFnZTpcbiAgICAgIGNvdXBvbi5iZW5lZml0X3R5cGUgPT09IFwicGVyY2VudGFnZVwiXG4gICAgICAgID8gbnVtYmVyT3JOdWxsKGNvdXBvbi5wZXJjZW50YWdlKVxuICAgICAgICA6IG51bGwsXG4gICAgY3VycmVuY3lfY29kZTpcbiAgICAgIGNvdXBvbi5iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCJcbiAgICAgICAgPyBjb3Vwb24uY3VycmVuY3lfY29kZS50cmltKCkudG9Mb3dlckNhc2UoKVxuICAgICAgICA6IG51bGwsXG4gICAgY29kZV9zdHJhdGVneTogY291cG9uLmNvZGVfc3RyYXRlZ3ksXG4gICAgY29kZV9wcmVmaXg6XG4gICAgICBjb3Vwb24uY29kZV9zdHJhdGVneSA9PT0gXCJ1bmlxdWVfY29kZVwiXG4gICAgICAgID8gY291cG9uLmNvZGVfcHJlZml4LnRyaW0oKSB8fCBcIkNPVVBPTlwiXG4gICAgICAgIDogbnVsbCxcbiAgICBzaGFyZWRfY29kZTpcbiAgICAgIGNvdXBvbi5jb2RlX3N0cmF0ZWd5ID09PSBcInNoYXJlZF9jb2RlXCIgPyBjb3Vwb24uc2hhcmVkX2NvZGUudHJpbSgpIDogbnVsbCxcbiAgICBleHBpcmF0aW9uX3BvbGljeTpcbiAgICAgIGNvdXBvbi5leHBpcmF0aW9uX3R5cGUgPT09IFwibm9uZVwiXG4gICAgICAgID8geyB0eXBlOiBcIm5vbmVcIiBhcyBjb25zdCB9XG4gICAgICAgIDogY291cG9uLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJmaXhlZFwiXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICB0eXBlOiBcImZpeGVkXCIgYXMgY29uc3QsXG4gICAgICAgICAgICBleHBpcmVzX2F0OiBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9kYXRlKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgY2FwX2J5X2NhbXBhaWduOiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ24sXG4gICAgICAgICAgICBjYXBfYXQ6IGNvdXBvbi5leHBpcmF0aW9uX2NhcF9hdFxuICAgICAgICAgICAgICA/IG5ldyBEYXRlKGNvdXBvbi5leHBpcmF0aW9uX2NhcF9hdCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgfVxuICAgICAgICA6IGNvdXBvbi5leHBpcmF0aW9uX3R5cGUgPT09IFwibW9udGhfZW5kXCJcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJtb250aF9lbmRcIiBhcyBjb25zdCxcbiAgICAgICAgICAgICAgdGltZV9wb2xpY3k6IGNvdXBvbi5leHBpcmF0aW9uX3RpbWVfcG9saWN5LFxuICAgICAgICAgICAgICBjYXBfYnlfY2FtcGFpZ246IGNvdXBvbi5leHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbixcbiAgICAgICAgICAgICAgY2FwX2F0OiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXRcbiAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKGNvdXBvbi5leHBpcmF0aW9uX2NhcF9hdCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJkdXJhdGlvblwiIGFzIGNvbnN0LFxuICAgICAgICAgICAgICBkdXJhdGlvbjogTnVtYmVyKGNvdXBvbi5leHBpcmF0aW9uX2R1cmF0aW9uKSB8fCAzMCxcbiAgICAgICAgICAgICAgZHVyYXRpb25fdW5pdDogY291cG9uLmV4cGlyYXRpb25fZHVyYXRpb25fdW5pdCxcbiAgICAgICAgICAgICAgdGltZV9wb2xpY3k6IGNvdXBvbi5leHBpcmF0aW9uX3RpbWVfcG9saWN5LFxuICAgICAgICAgICAgICBjYXBfYnlfY2FtcGFpZ246IGNvdXBvbi5leHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbixcbiAgICAgICAgICAgICAgY2FwX2F0OiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXRcbiAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKGNvdXBvbi5leHBpcmF0aW9uX2NhcF9hdCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgbWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtOlxuICAgICAgTnVtYmVyKGNvdXBvbi5tYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW0pIHx8IDEsXG4gICAgLi4uKGFsbG93UHJvbW90aW9uTWlycm9yXG4gICAgICA/IHtcbiAgICAgICAgICBwcm9tb3Rpb25fbWlycm9yX21vZGU6IGNvdXBvbi5wcm9tb3Rpb25fbWlycm9yX21vZGUsXG4gICAgICAgICAgcHJvbW90aW9uX3N0YXR1czogY291cG9uLnByb21vdGlvbl9zdGF0dXMsXG4gICAgICAgIH1cbiAgICAgIDoge30pLFxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ2FtcGFpZ25QYXlsb2FkKFxuICBjYW1wYWlnbjogQ2FtcGFpZ25Gb3JtU3RhdGUsXG4gIGFsbG93Q2FtcGFpZ246IGJvb2xlYW4sXG4pIHtcbiAgaWYgKCFhbGxvd0NhbXBhaWduKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIGlmIChjYW1wYWlnbi5tb2RlID09PSBcImV4aXN0aW5nXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJleGlzdGluZ1wiLFxuICAgICAgY2FtcGFpZ25faWQ6IGNhbXBhaWduLmNhbXBhaWduX2lkIHx8IG51bGwsXG4gICAgfVxuICB9XG4gIGlmIChjYW1wYWlnbi5tb2RlID09PSBcIm5ld1wiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwibmV3XCIsXG4gICAgICBjYW1wYWlnbjoge1xuICAgICAgICBuYW1lOiBjYW1wYWlnbi5uYW1lLFxuICAgICAgICBjYW1wYWlnbl9pZGVudGlmaWVyOiBjYW1wYWlnbi5jYW1wYWlnbl9pZGVudGlmaWVyLFxuICAgICAgICBzdGFydHNfYXQ6IGNhbXBhaWduLnN0YXJ0c19hdFxuICAgICAgICAgID8gbmV3IERhdGUoY2FtcGFpZ24uc3RhcnRzX2F0KS50b0lTT1N0cmluZygpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICBlbmRzX2F0OiBjYW1wYWlnbi5lbmRzX2F0XG4gICAgICAgICAgPyBuZXcgRGF0ZShjYW1wYWlnbi5lbmRzX2F0KS50b0lTT1N0cmluZygpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgfSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgbW9kZTogXCJub25lXCIgfVxufVxuXG5mdW5jdGlvbiBzdGVwU3RhdHVzKHN0ZXA6IFdpemFyZFN0ZXAsIGFjdGl2ZTogV2l6YXJkU3RlcCkge1xuICBjb25zdCBzdGVwSW5kZXggPSBzdGVwcy5pbmRleE9mKHN0ZXApXG4gIGNvbnN0IGFjdGl2ZUluZGV4ID0gc3RlcHMuaW5kZXhPZihhY3RpdmUpXG4gIGlmIChzdGVwSW5kZXggPCBhY3RpdmVJbmRleCkgcmV0dXJuIFwiY29tcGxldGVkXCJcbiAgaWYgKHN0ZXBJbmRleCA9PT0gYWN0aXZlSW5kZXgpIHJldHVybiBcImluLXByb2dyZXNzXCJcbiAgcmV0dXJuIFwibm90LXN0YXJ0ZWRcIlxufVxuXG5mdW5jdGlvbiBGaWVsZCh7IGxhYmVsLCBjaGlsZHJlbiB9OiB7IGxhYmVsOiBzdHJpbmc7IGNoaWxkcmVuOiBSZWFjdE5vZGUgfSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAteS0xXCIgc3R5bGU9e3sgbWluV2lkdGg6IDAgfX0+XG4gICAgICA8TGFiZWw+e2xhYmVsfTwvTGFiZWw+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZnVuY3Rpb24gY3VycmVuY3lEZWNpbWFsRGlnaXRzKGNvZGU6IHN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXCJlblwiLCB7XG4gICAgICBzdHlsZTogXCJjdXJyZW5jeVwiLFxuICAgICAgY3VycmVuY3k6IGNvZGUudG9VcHBlckNhc2UoKSxcbiAgICB9KS5yZXNvbHZlZE9wdGlvbnMoKS5tYXhpbXVtRnJhY3Rpb25EaWdpdHNcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIDJcbiAgfVxufVxuXG5mdW5jdGlvbiBjdXJyZW5jeVN5bWJvbChjb2RlOiBzdHJpbmcpIHtcbiAgaWYgKCFjb2RlKSByZXR1cm4gXCJcIlxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIChcbiAgICAgIG5ldyBJbnRsLk51bWJlckZvcm1hdChcImVuXCIsIHtcbiAgICAgICAgc3R5bGU6IFwiY3VycmVuY3lcIixcbiAgICAgICAgY3VycmVuY3k6IGNvZGUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgY3VycmVuY3lEaXNwbGF5OiBcIm5hcnJvd1N5bWJvbFwiLFxuICAgICAgfSlcbiAgICAgICAgLmZvcm1hdFRvUGFydHMoMClcbiAgICAgICAgLmZpbmQoKHBhcnQpID0+IHBhcnQudHlwZSA9PT0gXCJjdXJyZW5jeVwiKT8udmFsdWUgfHwgY29kZS50b1VwcGVyQ2FzZSgpXG4gICAgKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gY29kZS50b1VwcGVyQ2FzZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gQ3VycmVuY3lTZWxlY3Qoe1xuICBjdXJyZW5jaWVzLFxuICBkaXNhYmxlZCxcbiAgb25DaGFuZ2UsXG4gIHZhbHVlLFxufToge1xuICBjdXJyZW5jaWVzOiBDdXJyZW5jeU9wdGlvbltdXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgdmFsdWU6IHN0cmluZ1xufSkge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RcbiAgICAgIHZhbHVlPXt2YWx1ZSB8fCB1bmRlZmluZWR9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgfHwgIWN1cnJlbmNpZXMubGVuZ3RofVxuICAgICAgb25WYWx1ZUNoYW5nZT17b25DaGFuZ2V9XG4gICAgPlxuICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICA8U2VsZWN0LlZhbHVlXG4gICAgICAgICAgcGxhY2Vob2xkZXI9e1xuICAgICAgICAgICAgY3VycmVuY2llcy5sZW5ndGggPyBcIlNlbGVjdCBjdXJyZW5jeVwiIDogXCJObyBjdXJyZW5jaWVzIGF2YWlsYWJsZVwiXG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAge2N1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gKFxuICAgICAgICAgIDxTZWxlY3QuSXRlbSBrZXk9e2N1cnJlbmN5LmNvZGV9IHZhbHVlPXtjdXJyZW5jeS5jb2RlfT5cbiAgICAgICAgICAgIHtjdXJyZW5jeS5uYW1lfSAoe2N1cnJlbmN5LmNvZGUudG9VcHBlckNhc2UoKX0pXG4gICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgKSl9XG4gICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgIDwvU2VsZWN0PlxuICApXG59XG5cbmZ1bmN0aW9uIEN1cnJlbmN5QW1vdW50SW5wdXQoe1xuICBjdXJyZW5jaWVzLFxuICBjdXJyZW5jeUNvZGUsXG4gIGRpc2FibGVkLFxuICBvbkNoYW5nZSxcbiAgdmFsdWUsXG59OiB7XG4gIGN1cnJlbmNpZXM6IEN1cnJlbmN5T3B0aW9uW11cbiAgY3VycmVuY3lDb2RlOiBzdHJpbmdcbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuICB2YWx1ZTogc3RyaW5nXG59KSB7XG4gIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy5maW5kKChpdGVtKSA9PiBpdGVtLmNvZGUgPT09IGN1cnJlbmN5Q29kZSlcbiAgY29uc3QgY29kZSA9IGN1cnJlbmN5Q29kZS50b1VwcGVyQ2FzZSgpXG4gIGNvbnN0IGRlY2ltYWxzID0gY3VycmVuY3lEZWNpbWFsRGlnaXRzKGNvZGUgfHwgXCJVU0RcIilcblxuICByZXR1cm4gKFxuICAgIDxDdXJyZW5jeUlucHV0XG4gICAgICBjb2RlPXtjb2RlIHx8IFwiVVNEXCJ9XG4gICAgICBzeW1ib2w9e1xuICAgICAgICBjdXJyZW5jeT8uc3ltYm9sX25hdGl2ZSB8fFxuICAgICAgICBjdXJyZW5jeT8uc3ltYm9sIHx8XG4gICAgICAgIGN1cnJlbmN5U3ltYm9sKGNvZGUgfHwgXCJVU0RcIilcbiAgICAgIH1cbiAgICAgIG1pbj17MH1cbiAgICAgIGRlY2ltYWxTY2FsZT17ZGVjaW1hbHN9XG4gICAgICBkZWNpbWFsc0xpbWl0PXtkZWNpbWFsc31cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZCB8fCAhY3VycmVuY3lDb2RlfVxuICAgICAgb25WYWx1ZUNoYW5nZT17KG5leHRWYWx1ZSkgPT4gb25DaGFuZ2UobmV4dFZhbHVlIHx8IFwiXCIpfVxuICAgIC8+XG4gIClcbn1cblxuY29uc3QgZW50aXRsZW1lbnRGaWx0ZXJzID0gW1xuICB7IGxhYmVsOiBcIkFsbFwiLCB2YWx1ZTogXCJhbGxcIiB9LFxuICB7IGxhYmVsOiBcIklzc3VlZFwiLCB2YWx1ZTogXCJpc3N1ZWRcIiB9LFxuICB7IGxhYmVsOiBcIlJlZGVlbWVkXCIsIHZhbHVlOiBcInJlZGVlbWVkXCIgfSxcbiAgeyBsYWJlbDogXCJFeHBpcmVkXCIsIHZhbHVlOiBcImV4cGlyZWRcIiB9LFxuICB7IGxhYmVsOiBcIkNhbmNlbGVkXCIsIHZhbHVlOiBcImNhbmNlbGVkXCIgfSxcbl0gYXMgY29uc3RcblxudHlwZSBFbnRpdGxlbWVudEZpbHRlciA9ICh0eXBlb2YgZW50aXRsZW1lbnRGaWx0ZXJzKVtudW1iZXJdW1widmFsdWVcIl1cblxuZnVuY3Rpb24gU25hcHNob3RCbG9jayh7IHRpdGxlLCB2YWx1ZSB9OiB7IHRpdGxlOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGV0YWlscyBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBwLTNcIj5cbiAgICAgIDxzdW1tYXJ5IGNsYXNzTmFtZT1cImN1cnNvci1wb2ludGVyIHRleHQtdWktZmctYmFzZSB0eHQtc21hbGwtcGx1c1wiPlxuICAgICAgICB7dGl0bGV9XG4gICAgICA8L3N1bW1hcnk+XG4gICAgICA8cHJlXG4gICAgICAgIGNsYXNzTmFtZT1cIm10LTMgcm91bmRlZC1tZCBiZy11aS1iZy1zdWJ0bGUgcC0zIHRleHQtdWktZmctc3VidGxlIHR4dC1jb21wYWN0LXhzbWFsbFwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgbWF4SGVpZ2h0OiAyMjAsXG4gICAgICAgICAgb3ZlcmZsb3c6IFwiYXV0b1wiLFxuICAgICAgICAgIHdoaXRlU3BhY2U6IFwicHJlLXdyYXBcIixcbiAgICAgICAgICB3b3JkQnJlYWs6IFwiYnJlYWstd29yZFwiLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7anNvbkJsb2NrKHZhbHVlKX1cbiAgICAgIDwvcHJlPlxuICAgIDwvZGV0YWlscz5cbiAgKVxufVxuXG5mdW5jdGlvbiBUd29Db2x1bW5MYXlvdXQoe1xuICBmaXJzdENvbCxcbiAgc2Vjb25kQ29sLFxufToge1xuICBmaXJzdENvbDogUmVhY3ROb2RlXG4gIHNlY29uZENvbDogUmVhY3ROb2RlXG59KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC14LTQgZ2FwLXktMyB4bDpmbGV4LXJvdyB4bDppdGVtcy1zdGFydFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBmbGV4LWNvbCBnYXAteS0zXCI+e2ZpcnN0Q29sfTwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBtYXgtdy1bMTAwJV0gZmxleC1jb2wgZ2FwLXktMyB4bDptdC0wIHhsOm1heC13LVs0NDBweF1cIj5cbiAgICAgICAge3NlY29uZENvbH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmZ1bmN0aW9uIFNlY3Rpb25Sb3coe1xuICB0aXRsZSxcbiAgdmFsdWUsXG59OiB7XG4gIHRpdGxlOiBzdHJpbmdcbiAgdmFsdWU6IFJlYWN0Tm9kZVxufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1zdWJ0bGUgZ3JpZCBncmlkLWNvbHMtMiBpdGVtcy1jZW50ZXIgZ2FwLXgtNCBweC02IHB5LTRcIj5cbiAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIHdlaWdodD1cInBsdXNcIiBsZWFkaW5nPVwiY29tcGFjdFwiPlxuICAgICAgICB7dGl0bGV9XG4gICAgICA8L1RleHQ+XG4gICAgICB7dHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlID09IG51bGwgPyAoXG4gICAgICAgIDxUZXh0XG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBsZWFkaW5nPVwiY29tcGFjdFwiXG4gICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1wcmV0dHkgd2hpdGVzcGFjZS1wcmUtbGluZVwiXG4gICAgICAgID5cbiAgICAgICAgICB7dmFsdWUgfHwgXCItXCJ9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMFwiPnt2YWx1ZX08L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZnVuY3Rpb24gV2lkZ2V0SGVhZGVyKHsgdGl0bGUgfTogeyB0aXRsZTogc3RyaW5nIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC02IHB5LTRcIj5cbiAgICAgIDxIZWFkaW5nIGxldmVsPVwiaDJcIj57dGl0bGV9PC9IZWFkaW5nPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmZ1bmN0aW9uIFNpZGViYXJMaW5rKHtcbiAgaHJlZixcbiAgbGFiZWwsXG4gIGRlc2NyaXB0aW9uLFxuICBpY29uLFxufToge1xuICBocmVmOiBzdHJpbmdcbiAgbGFiZWw6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIGljb24/OiBSZWFjdE5vZGVcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8YSBocmVmPXtocmVmfSBjbGFzc05hbWU9XCJncm91cCBvdXRsaW5lLW5vbmVcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMiBweC0yIHBiLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzaGFkb3ctZWxldmF0aW9uLWNhcmQtcmVzdCBiZy11aS1iZy1jb21wb25lbnQgdHJhbnNpdGlvbi1mZyBob3ZlcjpiZy11aS1iZy1jb21wb25lbnQtaG92ZXIgYWN0aXZlOmJnLXVpLWJnLWNvbXBvbmVudC1wcmVzc2VkIGdyb3VwLWZvY3VzLXZpc2libGU6c2hhZG93LWJvcmRlcnMtaW50ZXJhY3RpdmUtd2l0aC1hY3RpdmUgcm91bmRlZC1tZCBweC00IHB5LTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00XCI+XG4gICAgICAgICAgICB7aWNvbiAmJiA8ZGl2PntpY29ufTwvZGl2Pn1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LTEgZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgbGVhZGluZz1cImNvbXBhY3RcIiB3ZWlnaHQ9XCJwbHVzXCI+XG4gICAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICBsZWFkaW5nPVwiY29tcGFjdFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1zdWJ0bGVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2Rlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPFRyaWFuZ2xlUmlnaHRNaW5pIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmZ1bmN0aW9uIFN1bW1hcnlXaWRnZXQoe1xuICBsYWJlbCxcbiAgdmFsdWUsXG4gIHRvbmUgPSBcImdyZWVuXCIsXG59OiB7XG4gIGxhYmVsOiBzdHJpbmdcbiAgdmFsdWU6IHN0cmluZ1xuICB0b25lPzogXCJncmVlblwiIHwgXCJuZXV0cmFsXCJcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cInB4LTYgcHktNFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLXN1YnRsZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0zXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2BoLTggdy0xIHJvdW5kZWQtZnVsbCAke1xuICAgICAgICAgICAgdG9uZSA9PT0gXCJncmVlblwiXG4gICAgICAgICAgICAgID8gXCJiZy11aS10YWctZ3JlZW4taWNvblwiXG4gICAgICAgICAgICAgIDogXCJiZy11aS10YWctbmV1dHJhbC1pY29uXCJcbiAgICAgICAgICB9YH1cbiAgICAgICAgLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wXCI+XG4gICAgICAgICAgPFRleHQgd2VpZ2h0PVwicGx1c1wiIHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctc3VidGxlXCI+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICB3ZWlnaHQ9XCJwbHVzXCJcbiAgICAgICAgICAgIHNpemU9XCJ4bGFyZ2VcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGFidWxhci1udW1zIHRleHQtdWktZmctYmFzZSBicmVhay13b3Jkc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3ZhbHVlfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L0NvbnRhaW5lcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb3Vwb25HZW5lcmFsU2VjdGlvbih7IGRldGFpbCB9OiB7IGRldGFpbDogQ291cG9uRW50aXRsZW1lbnREZXRhaWwgfSkge1xuICBjb25zdCBlbnRpdGxlbWVudCA9IGRldGFpbC5jdXN0b21lcl9jb3Vwb25fZW50aXRsZW1lbnRcbiAgY29uc3QgaXNzdWFuY2UgPSBkZXRhaWwuY291cG9uX2lzc3VhbmNlIHx8IG51bGxcbiAgY29uc3QgYmVuZWZpdFNuYXBzaG90ID0gZW50aXRsZW1lbnQuYmVuZWZpdF9zbmFwc2hvdCB8fCBudWxsXG4gIGNvbnN0IHNvdXJjZVNuYXBzaG90ID0gZW50aXRsZW1lbnQuc291cmNlX3NuYXBzaG90IHx8IG51bGxcbiAgY29uc3QgY29kZSA9IGNvdXBvbkNvZGUoZW50aXRsZW1lbnQpXG4gIGNvbnN0IGV4dGVybmFsID0gZW50aXRsZW1lbnQub3JpZ2luID09PSBcImV4dGVybmFsXCJcbiAgY29uc3QgcHJvZHVjdExhYmVsID1cbiAgICBzbmFwc2hvdFN0cmluZyhzb3VyY2VTbmFwc2hvdCwgXCJ0aXRsZVwiKSB8fFxuICAgIHNuYXBzaG90U3RyaW5nKHNvdXJjZVNuYXBzaG90LCBcInNvdXJjZVwiKSB8fFxuICAgIGVudGl0bGVtZW50LnByb2R1Y3RfaWQgfHxcbiAgICBcIkV4dGVybmFsXCJcbiAgY29uc3QgdmFyaWFudExhYmVsID1cbiAgICBzbmFwc2hvdFN0cmluZyhzb3VyY2VTbmFwc2hvdCwgXCJ2YXJpYW50X2lkXCIpIHx8IGVudGl0bGVtZW50LnZhcmlhbnRfaWQgfHwgXCItXCJcbiAgY29uc3QgaXNzdWVkRGF0ZSA9IGVudGl0bGVtZW50LmNyZWF0ZWRfYXQgfHwgaXNzdWFuY2U/LmNyZWF0ZWRfYXQgfHwgbnVsbFxuXG4gIHJldHVybiAoXG4gICAgPENvbnRhaW5lciBjbGFzc05hbWU9XCJkaXZpZGUteSBwLTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTYgcHktNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC14LTFcIj5cbiAgICAgICAgICAgIDxIZWFkaW5nIGNsYXNzTmFtZT1cImJyZWFrLWFsbFwiPiN7Y29kZX08L0hlYWRpbmc+XG4gICAgICAgICAgICB7Y29kZSAhPT0gXCItXCIgJiYgKFxuICAgICAgICAgICAgICA8Q29weSBjb250ZW50PXtjb2RlfSBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCIgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1zdWJ0bGVcIj5cbiAgICAgICAgICAgIHtmb3JtYXRGdWxsRGF0ZShpc3N1ZWREYXRlKX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8U3RhdHVzQmFkZ2UgY29sb3I9e2VudGl0bGVtZW50U3RhdHVzQ29sb3IoZW50aXRsZW1lbnQuc3RhdHVzKX0+XG4gICAgICAgICAge2VudGl0bGVtZW50LnN0YXR1c31cbiAgICAgICAgPC9TdGF0dXNCYWRnZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJEYXRlIGlzc3VlZFwiIHZhbHVlPXtmb3JtYXRSZWxhdGl2ZURhdGUoaXNzdWVkRGF0ZSl9IC8+XG4gICAgICA8U2VjdGlvblJvd1xuICAgICAgICB0aXRsZT1cIkN1c3RvbWVyXCJcbiAgICAgICAgdmFsdWU9e2VudGl0bGVtZW50LmVtYWlsIHx8IGVudGl0bGVtZW50LmN1c3RvbWVyX2lkIHx8IFwiLVwifVxuICAgICAgLz5cbiAgICAgIDxTZWN0aW9uUm93IHRpdGxlPVwiT3JpZ2luXCIgdmFsdWU9e2VudGl0bGVtZW50U291cmNlKGVudGl0bGVtZW50KX0gLz5cbiAgICAgIDxTZWN0aW9uUm93XG4gICAgICAgIHRpdGxlPXtleHRlcm5hbCA/IFwiU291cmNlXCIgOiBcIkNvdXBvbiBwcm9kdWN0XCJ9XG4gICAgICAgIHZhbHVlPXtwcm9kdWN0TGFiZWx9XG4gICAgICAvPlxuICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJTZWxsZXIgc2NvcGVcIiB2YWx1ZT17ZW50aXRsZW1lbnRTZWxsZXJTY29wZShlbnRpdGxlbWVudCl9IC8+XG4gICAgICB7IWV4dGVybmFsICYmIDxTZWN0aW9uUm93IHRpdGxlPVwiVmFyaWFudFwiIHZhbHVlPXt2YXJpYW50TGFiZWx9IC8+fVxuICAgICAgeyFleHRlcm5hbCAmJiAoXG4gICAgICAgIDxTZWN0aW9uUm93XG4gICAgICAgICAgdGl0bGU9XCJRdWFudGl0eVwiXG4gICAgICAgICAgdmFsdWU9e1N0cmluZyhcbiAgICAgICAgICAgIHNuYXBzaG90TnVtYmVyKHNvdXJjZVNuYXBzaG90LCBcInF1YW50aXR5XCIpID8/IGlzc3VhbmNlPy5xdWFudGl0eSA/PyAxLFxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPFNlY3Rpb25Sb3dcbiAgICAgICAgdGl0bGU9XCJCZW5lZml0XCJcbiAgICAgICAgdmFsdWU9e2JlbmVmaXRTbmFwc2hvdExhYmVsKGJlbmVmaXRTbmFwc2hvdCl9XG4gICAgICAvPlxuICAgICAgPFNlY3Rpb25Sb3dcbiAgICAgICAgdGl0bGU9XCJFeHBpcmF0aW9uIHBvbGljeVwiXG4gICAgICAgIHZhbHVlPXtleHBpcmF0aW9uUG9saWN5TGFiZWwoYmVuZWZpdFNuYXBzaG90KX1cbiAgICAgIC8+XG4gICAgICA8U2VjdGlvblJvdyB0aXRsZT1cIkV4cGlyYXRpb24gRGF0ZVwiIHZhbHVlPXtmb3JtYXREYXRlKGVudGl0bGVtZW50LmV4cGlyZXNfYXQpfSAvPlxuICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJSZWRlZW1lZCBEYXRlXCIgdmFsdWU9e2Zvcm1hdERhdGUoZW50aXRsZW1lbnQucmVkZWVtZWRfYXQpfSAvPlxuICAgIDwvQ29udGFpbmVyPlxuICApXG59XG5cbmZ1bmN0aW9uIFJlbGF0ZWRPcmRlclNlY3Rpb24oe1xuICBhcGlCYXNlLFxuICBkZXRhaWwsXG59OiB7XG4gIGFwaUJhc2U6IEFwaUJhc2VcbiAgZGV0YWlsOiBDb3Vwb25FbnRpdGxlbWVudERldGFpbFxufSkge1xuICBjb25zdCBlbnRpdGxlbWVudCA9IGRldGFpbC5jdXN0b21lcl9jb3Vwb25fZW50aXRsZW1lbnRcbiAgY29uc3Qgb3JkZXIgPSBkZXRhaWwub3JkZXIgfHwgbnVsbFxuICBjb25zdCBvcmRlcklkID0gb3JkZXI/LmlkIHx8IGVudGl0bGVtZW50Lm9yZGVyX2lkXG4gIGlmICghb3JkZXJJZCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb250YWluZXIgY2xhc3NOYW1lPVwicC0wXCI+XG4gICAgICA8V2lkZ2V0SGVhZGVyIHRpdGxlPVwiUmVsYXRlZCBPcmRlclwiIC8+XG4gICAgICA8U2lkZWJhckxpbmtcbiAgICAgICAgaHJlZj17b3JkZXJEZXRhaWxQYXRoKGFwaUJhc2UsIG9yZGVySWQpfVxuICAgICAgICBsYWJlbD17b3JkZXIgPyBvcmRlckRpc3BsYXlJZChvcmRlcikgOiBvcmRlcklkfVxuICAgICAgICBkZXNjcmlwdGlvbj17XG4gICAgICAgICAgb3JkZXI/LmNyZWF0ZWRfYXRcbiAgICAgICAgICAgID8gYE9yZGVyIHBsYWNlZCAke2Zvcm1hdFJlbGF0aXZlRGF0ZShvcmRlci5jcmVhdGVkX2F0KX1gXG4gICAgICAgICAgICA6IFwiUHVyY2hhc2VkIGNvdXBvbiBvcmRlclwiXG4gICAgICAgIH1cbiAgICAgICAgaWNvbj17PFNob3BwaW5nQ2FydCAvPn1cbiAgICAgIC8+XG4gICAgPC9Db250YWluZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gQ291cG9uU25hcHNob3RzU2VjdGlvbih7XG4gIGRldGFpbCxcbn06IHtcbiAgZGV0YWlsOiBDb3Vwb25FbnRpdGxlbWVudERldGFpbFxufSkge1xuICBjb25zdCBlbnRpdGxlbWVudCA9IGRldGFpbC5jdXN0b21lcl9jb3Vwb25fZW50aXRsZW1lbnRcbiAgY29uc3QgaXNzdWFuY2UgPSBkZXRhaWwuY291cG9uX2lzc3VhbmNlIHx8IG51bGxcblxuICByZXR1cm4gKFxuICAgIDxDb250YWluZXIgY2xhc3NOYW1lPVwicC0wXCI+XG4gICAgICA8V2lkZ2V0SGVhZGVyIHRpdGxlPVwiSlNPTlwiIC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktMyBweC02IHBiLTZcIj5cbiAgICAgICAgPFNuYXBzaG90QmxvY2tcbiAgICAgICAgICB0aXRsZT1cIkJlbmVmaXQgc25hcHNob3RcIlxuICAgICAgICAgIHZhbHVlPXtlbnRpdGxlbWVudC5iZW5lZml0X3NuYXBzaG90fVxuICAgICAgICAvPlxuICAgICAgICA8U25hcHNob3RCbG9ja1xuICAgICAgICAgIHRpdGxlPVwiU291cmNlIHNuYXBzaG90XCJcbiAgICAgICAgICB2YWx1ZT17ZW50aXRsZW1lbnQuc291cmNlX3NuYXBzaG90fVxuICAgICAgICAvPlxuICAgICAgICA8U25hcHNob3RCbG9ja1xuICAgICAgICAgIHRpdGxlPVwiSXNzdWFuY2UgY29uZmlnIHNuYXBzaG90XCJcbiAgICAgICAgICB2YWx1ZT17aXNzdWFuY2U/LmNvbmZpZ19zbmFwc2hvdH1cbiAgICAgICAgLz5cbiAgICAgICAgPFNuYXBzaG90QmxvY2sgdGl0bGU9XCJTZWxsZXIgdGFyZ2V0c1wiIHZhbHVlPXtlbnRpdGxlbWVudC5zZWxsZXJfdGFyZ2V0c30gLz5cbiAgICAgICAgPFNuYXBzaG90QmxvY2sgdGl0bGU9XCJNZXRhZGF0YVwiIHZhbHVlPXtlbnRpdGxlbWVudC5tZXRhZGF0YX0gLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvQ29udGFpbmVyPlxuICApXG59XG5cbmZ1bmN0aW9uIENvdXBvblN1bW1hcnlTZWN0aW9ucyh7XG4gIGRldGFpbCxcbn06IHtcbiAgZGV0YWlsOiBDb3Vwb25FbnRpdGxlbWVudERldGFpbFxufSkge1xuICBjb25zdCBlbnRpdGxlbWVudCA9IGRldGFpbC5jdXN0b21lcl9jb3Vwb25fZW50aXRsZW1lbnRcbiAgY29uc3QgaXNzdWFuY2UgPSBkZXRhaWwuY291cG9uX2lzc3VhbmNlIHx8IG51bGxcbiAgY29uc3QgYmVuZWZpdFNuYXBzaG90ID0gZW50aXRsZW1lbnQuYmVuZWZpdF9zbmFwc2hvdCB8fCBudWxsXG4gIGNvbnN0IHNvdXJjZVNuYXBzaG90ID0gZW50aXRsZW1lbnQuc291cmNlX3NuYXBzaG90IHx8IG51bGxcbiAgY29uc3Qgb3JkZXIgPSBkZXRhaWwub3JkZXIgfHwgbnVsbFxuICBjb25zdCBsaW5lVG90YWwgPSBzbmFwc2hvdE51bWJlcihzb3VyY2VTbmFwc2hvdCwgXCJ0b3RhbFwiKVxuICBjb25zdCBleHRlcm5hbCA9IGVudGl0bGVtZW50Lm9yaWdpbiA9PT0gXCJleHRlcm5hbFwiXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFN1bW1hcnlXaWRnZXRcbiAgICAgICAgbGFiZWw9XCJCZW5lZml0XCJcbiAgICAgICAgdmFsdWU9e2JlbmVmaXRTbmFwc2hvdExhYmVsKGJlbmVmaXRTbmFwc2hvdCl9XG4gICAgICAvPlxuICAgICAgeyFleHRlcm5hbCAmJiAoXG4gICAgICAgIDxTdW1tYXJ5V2lkZ2V0XG4gICAgICAgICAgbGFiZWw9XCJMaW5lIFRvdGFsXCJcbiAgICAgICAgICB2YWx1ZT17Zm9ybWF0U25hcHNob3RBbW91bnQobGluZVRvdGFsLCBvcmRlcj8uY3VycmVuY3lfY29kZSl9XG4gICAgICAgICAgdG9uZT1cIm5ldXRyYWxcIlxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHshZXh0ZXJuYWwgJiYgKFxuICAgICAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cImRpdmlkZS15IHAtMFwiPlxuICAgICAgICAgIDxXaWRnZXRIZWFkZXIgdGl0bGU9XCJDYW1wYWlnblwiIC8+XG4gICAgICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJDYW1wYWlnblwiIHZhbHVlPXtjYW1wYWlnblNuYXBzaG90TGFiZWwoYmVuZWZpdFNuYXBzaG90KX0gLz5cbiAgICAgICAgICA8U2VjdGlvblJvdyB0aXRsZT1cIlByb21vdGlvblwiIHZhbHVlPXtwcm9tb3Rpb25TbmFwc2hvdExhYmVsKGJlbmVmaXRTbmFwc2hvdCl9IC8+XG4gICAgICAgICAgPFNlY3Rpb25Sb3dcbiAgICAgICAgICAgIHRpdGxlPVwiUHJvbW90aW9uIHN0YXR1c1wiXG4gICAgICAgICAgICB2YWx1ZT17c25hcHNob3RTdHJpbmcoYmVuZWZpdFNuYXBzaG90LCBcInByb21vdGlvbl9zdGF0dXNcIikgfHwgXCItXCJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Db250YWluZXI+XG4gICAgICApfVxuICAgICAgeyFleHRlcm5hbCAmJiAoXG4gICAgICAgIDxDb250YWluZXIgY2xhc3NOYW1lPVwiZGl2aWRlLXkgcC0wXCI+XG4gICAgICAgICAgPFdpZGdldEhlYWRlciB0aXRsZT1cIklzc3VhbmNlXCIgLz5cbiAgICAgICAgICA8U2VjdGlvblJvdyB0aXRsZT1cIlN0YXR1c1wiIHZhbHVlPXtpc3N1YW5jZT8uc3RhdHVzIHx8IFwiLVwifSAvPlxuICAgICAgICAgIDxTZWN0aW9uUm93XG4gICAgICAgICAgICB0aXRsZT1cIklzc3VlZCAvIGZhaWxlZFwiXG4gICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgIGlzc3VhbmNlXG4gICAgICAgICAgICAgICAgPyBgJHtpc3N1YW5jZS5pc3N1ZWRfY291bnQgPz8gMH0gLyAke2lzc3VhbmNlLmZhaWxlZF9jb3VudCA/PyAwfWBcbiAgICAgICAgICAgICAgICA6IFwiLVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8U2VjdGlvblJvdyB0aXRsZT1cIkNvbmZpZ1wiIHZhbHVlPXtlbnRpdGxlbWVudC5jb25maWdfaWQgfHwgXCItXCJ9IC8+XG4gICAgICAgICAgPFNlY3Rpb25Sb3dcbiAgICAgICAgICAgIHRpdGxlPVwiVmFyaWFudCBjb25maWdcIlxuICAgICAgICAgICAgdmFsdWU9e2VudGl0bGVtZW50LnZhcmlhbnRfY29uZmlnX2lkIHx8IFwiLVwifVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvQ29udGFpbmVyPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ291cG9uRGV0YWlsUGFnZVZpZXcoeyBhcGlCYXNlIH06IHsgYXBpQmFzZTogQXBpQmFzZSB9KSB7XG4gIGNvbnN0IGlkID0gY3VycmVudENvdXBvbkRldGFpbElkKGFwaUJhc2UpXG4gIGNvbnN0IFtkZXRhaWwsIHNldERldGFpbF0gPSB1c2VTdGF0ZTxDb3Vwb25FbnRpdGxlbWVudERldGFpbCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpXG4gIGNvbnN0IFtsb2FkRXJyb3IsIHNldExvYWRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGFjdGl2ZSA9IHRydWVcbiAgICBhc3luYyBmdW5jdGlvbiBsb2FkKCkge1xuICAgICAgaWYgKCFpZCkge1xuICAgICAgICBzZXRMb2FkRXJyb3IoXCJNaXNzaW5nIGNvdXBvbiBpZFwiKVxuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgc2V0TG9hZEVycm9yKG51bGwpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBhcGlGZXRjaDxDb3Vwb25FbnRpdGxlbWVudERldGFpbD4oXG4gICAgICAgICAgYCR7YXBpQmFzZX0vY291cG9uLXByb2R1Y3RzL2VudGl0bGVtZW50cy8ke2VuY29kZVVSSUNvbXBvbmVudChpZCl9YCxcbiAgICAgICAgKVxuICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgc2V0RGV0YWlsKHBheWxvYWQpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgID8gZXJyb3IubWVzc2FnZVxuICAgICAgICAgICAgOiBcIkZhaWxlZCB0byBsb2FkIGNvdXBvbiBkZXRhaWxzXCJcbiAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgIHNldExvYWRFcnJvcihtZXNzYWdlKVxuICAgICAgICAgIHRvYXN0LmVycm9yKG1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdm9pZCBsb2FkKClcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBhY3RpdmUgPSBmYWxzZVxuICAgIH1cbiAgfSwgW2FwaUJhc2UsIGlkXSlcblxuICBpZiAobG9hZGluZykge1xuICAgIHJldHVybiA8Q291cG9uRW1wdHlTdGF0ZSB0aXRsZT1cIkxvYWRpbmcgY291cG9uXCIgLz5cbiAgfVxuXG4gIGlmIChsb2FkRXJyb3IpIHtcbiAgICByZXR1cm4gPENvdXBvbkVtcHR5U3RhdGUgdGl0bGU9e2xvYWRFcnJvcn0gLz5cbiAgfVxuXG4gIGlmICghZGV0YWlsKSB7XG4gICAgcmV0dXJuIDxDb3Vwb25FbXB0eVN0YXRlIHRpdGxlPVwiQ291cG9uIG5vdCBmb3VuZFwiIC8+XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxUd29Db2x1bW5MYXlvdXRcbiAgICAgIGZpcnN0Q29sPXtcbiAgICAgICAgPD5cbiAgICAgICAgICA8Q291cG9uR2VuZXJhbFNlY3Rpb24gZGV0YWlsPXtkZXRhaWx9IC8+XG4gICAgICAgICAgPFJlbGF0ZWRPcmRlclNlY3Rpb24gYXBpQmFzZT17YXBpQmFzZX0gZGV0YWlsPXtkZXRhaWx9IC8+XG4gICAgICAgICAgPENvdXBvblNuYXBzaG90c1NlY3Rpb24gZGV0YWlsPXtkZXRhaWx9IC8+XG4gICAgICAgIDwvPlxuICAgICAgfVxuICAgICAgc2Vjb25kQ29sPXs8Q291cG9uU3VtbWFyeVNlY3Rpb25zIGRldGFpbD17ZGV0YWlsfSAvPn1cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIEVudGl0bGVtZW50c1RhYmxlKHtcbiAgZW50aXRsZW1lbnRzLFxuICBsb2FkaW5nLFxuICBlcnJvcixcbiAgb25PcGVuLFxufToge1xuICBlbnRpdGxlbWVudHM6IENvdXBvbkVudGl0bGVtZW50W11cbiAgbG9hZGluZzogYm9vbGVhblxuICBlcnJvcjogc3RyaW5nIHwgbnVsbFxuICBvbk9wZW46IChlbnRpdGxlbWVudDogQ291cG9uRW50aXRsZW1lbnQpID0+IHZvaWRcbn0pIHtcbiAgaWYgKGxvYWRpbmcpIHtcbiAgICByZXR1cm4gPENvdXBvbkVtcHR5U3RhdGUgdGl0bGU9XCJMb2FkaW5nIGNvdXBvbnNcIiAvPlxuICB9XG4gIGlmIChlcnJvcikge1xuICAgIHJldHVybiA8Q291cG9uRW1wdHlTdGF0ZSB0aXRsZT17ZXJyb3J9IC8+XG4gIH1cbiAgaWYgKCFlbnRpdGxlbWVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDb3Vwb25FbXB0eVN0YXRlXG4gICAgICAgIHRpdGxlPVwiTm8gY291cG9ucyBmb3VuZFwiXG4gICAgICAgIGRlc2NyaXB0aW9uPVwiUHVyY2hhc2VkIGNvdXBvbnMgd2lsbCBhcHBlYXIgaGVyZSBhZnRlciB0aGV5IGFyZSBpc3N1ZWQuXCJcbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8VGFibGU+XG4gICAgICA8VGFibGUuSGVhZGVyPlxuICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlN0YXR1czwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5Db2RlPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkRhdGUgaXNzdWVkPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPk9yZGVyPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkN1c3RvbWVyPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPk9yaWdpbjwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5TZWxsZXIgc2NvcGU8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+U291cmNlPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkV4cGlyZXM8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgPC9UYWJsZS5IZWFkZXI+XG4gICAgICA8VGFibGUuQm9keT5cbiAgICAgICAge2VudGl0bGVtZW50cy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICA8VGFibGUuUm93XG4gICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy11aS1iZy1zdWJ0bGVcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25PcGVuKGl0ZW0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8U3RhdHVzQmFkZ2UgY29sb3I9e2VudGl0bGVtZW50U3RhdHVzQ29sb3IoaXRlbS5zdGF0dXMpfT5cbiAgICAgICAgICAgICAgICB7aXRlbS5zdGF0dXN9XG4gICAgICAgICAgICAgIDwvU3RhdHVzQmFkZ2U+XG4gICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICA8VGFibGUuQ2VsbD57aXRlbS5jb2RlIHx8IGl0ZW0uc2hhcmVkX2NvZGUgfHwgXCItXCJ9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkNlbGwgdGl0bGU9e2Zvcm1hdEZ1bGxEYXRlKGl0ZW0uY3JlYXRlZF9hdCl9PlxuICAgICAgICAgICAgICB7Zm9ybWF0UmVsYXRpdmVEYXRlKGl0ZW0uY3JlYXRlZF9hdCl9XG4gICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICA8VGFibGUuQ2VsbD57aXRlbS5vcmRlcl9pZCB8fCBcIi1cIn08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICA8VGFibGUuQ2VsbD57aXRlbS5lbWFpbCB8fCBpdGVtLmN1c3RvbWVyX2lkIHx8IFwiLVwifTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgIDxUYWJsZS5DZWxsPntlbnRpdGxlbWVudFNvdXJjZShpdGVtKX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICA8VGFibGUuQ2VsbD57ZW50aXRsZW1lbnRTZWxsZXJTY29wZShpdGVtKX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAge3NuYXBzaG90U3RyaW5nKGl0ZW0uc291cmNlX3NuYXBzaG90LCBcInRpdGxlXCIpIHx8XG4gICAgICAgICAgICAgICAgc25hcHNob3RTdHJpbmcoaXRlbS5zb3VyY2Vfc25hcHNob3QsIFwic291cmNlXCIpIHx8XG4gICAgICAgICAgICAgICAgaXRlbS5wcm9kdWN0X2lkIHx8XG4gICAgICAgICAgICAgICAgXCJFeHRlcm5hbFwifVxuICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2Zvcm1hdERhdGUoaXRlbS5leHBpcmVzX2F0KX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICkpfVxuICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgIDwvVGFibGU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvdXBvbnNQYWdlVmlldyh7XG4gIGFwaUJhc2UsXG4gIHRpdGxlLFxufToge1xuICBhcGlCYXNlOiBBcGlCYXNlXG4gIHRpdGxlOiBzdHJpbmdcbn0pIHtcbiAgY29uc3QgW2VudGl0bGVtZW50cywgc2V0RW50aXRsZW1lbnRzXSA9IHVzZVN0YXRlPENvdXBvbkVudGl0bGVtZW50W10+KFtdKVxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKVxuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2ZpbHRlciwgc2V0RmlsdGVyXSA9IHVzZVN0YXRlPEVudGl0bGVtZW50RmlsdGVyPihcImFsbFwiKVxuXG4gIGNvbnN0IGxvYWQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0TG9hZGluZyh0cnVlKVxuICAgIHNldExvYWRFcnJvcihudWxsKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgYXBpRmV0Y2g8e1xuICAgICAgICBjdXN0b21lcl9jb3Vwb25fZW50aXRsZW1lbnRzOiBDb3Vwb25FbnRpdGxlbWVudFtdXG4gICAgICB9PihgJHthcGlCYXNlfS9jb3Vwb24tcHJvZHVjdHMvZW50aXRsZW1lbnRzYClcbiAgICAgIHNldEVudGl0bGVtZW50cyhwYXlsb2FkLmN1c3RvbWVyX2NvdXBvbl9lbnRpdGxlbWVudHMgfHwgW10pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiRmFpbGVkIHRvIGxvYWQgY291cG9uc1wiXG4gICAgICBzZXRMb2FkRXJyb3IobWVzc2FnZSlcbiAgICAgIHRvYXN0LmVycm9yKG1lc3NhZ2UpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgfVxuICB9LCBbYXBpQmFzZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB2b2lkIGxvYWQoKVxuICB9LCBbbG9hZF0pXG5cbiAgY29uc3Qgb3BlbkRldGFpbCA9IHVzZUNhbGxiYWNrKFxuICAgIChlbnRpdGxlbWVudDogQ291cG9uRW50aXRsZW1lbnQpID0+IHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oY291cG9uRGV0YWlsUGF0aChhcGlCYXNlLCBlbnRpdGxlbWVudC5pZCkpXG4gICAgfSxcbiAgICBbYXBpQmFzZV0sXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxDb250YWluZXIgY2xhc3NOYW1lPVwiZGl2aWRlLXkgcC0wXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC02IHB5LTRcIj5cbiAgICAgICAgPEhlYWRpbmcgbGV2ZWw9XCJoMVwiPnt0aXRsZX08L0hlYWRpbmc+XG4gICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cInNlY29uZGFyeVwiIG9uQ2xpY2s9eygpID0+IHZvaWQgbG9hZCgpfT5cbiAgICAgICAgICA8QXJyb3dQYXRoIC8+XG4gICAgICAgICAgUmVmcmVzaFxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPFRhYnNcbiAgICAgICAgdmFsdWU9e2ZpbHRlcn1cbiAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PiBzZXRGaWx0ZXIodmFsdWUgYXMgRW50aXRsZW1lbnRGaWx0ZXIpfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB4LTYgcHktMiBib3JkZXItYlwiPlxuICAgICAgICAgIDxUYWJzLkxpc3Q+XG4gICAgICAgICAgICB7ZW50aXRsZW1lbnRGaWx0ZXJzLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgICAgICA8VGFicy5UcmlnZ2VyIGtleT17aXRlbS52YWx1ZX0gdmFsdWU9e2l0ZW0udmFsdWV9PlxuICAgICAgICAgICAgICAgIHtpdGVtLmxhYmVsfVxuICAgICAgICAgICAgICA8L1RhYnMuVHJpZ2dlcj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvVGFicy5MaXN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2VudGl0bGVtZW50RmlsdGVycy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICA8VGFicy5Db250ZW50IGtleT17aXRlbS52YWx1ZX0gdmFsdWU9e2l0ZW0udmFsdWV9PlxuICAgICAgICAgICAgPEVudGl0bGVtZW50c1RhYmxlXG4gICAgICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgICAgICAgIGVycm9yPXtsb2FkRXJyb3J9XG4gICAgICAgICAgICAgIG9uT3Blbj17b3BlbkRldGFpbH1cbiAgICAgICAgICAgICAgZW50aXRsZW1lbnRzPXtcbiAgICAgICAgICAgICAgICBpdGVtLnZhbHVlID09PSBcImFsbFwiXG4gICAgICAgICAgICAgICAgICA/IGVudGl0bGVtZW50c1xuICAgICAgICAgICAgICAgICAgOiBlbnRpdGxlbWVudHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgIChlbnRpdGxlbWVudCkgPT4gZW50aXRsZW1lbnQuc3RhdHVzID09PSBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9UYWJzLkNvbnRlbnQ+XG4gICAgICAgICkpfVxuICAgICAgPC9UYWJzPlxuICAgIDwvQ29udGFpbmVyPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb3Vwb25Qcm9kdWN0c1BhZ2VWaWV3KHtcbiAgYXBpQmFzZSxcbiAgdGl0bGUsXG4gIGFsbG93UHJvbW90aW9uTWlycm9yID0gZmFsc2UsXG59OiB7XG4gIGFwaUJhc2U6IEFwaUJhc2VcbiAgdGl0bGU6IHN0cmluZ1xuICBhbGxvd1Byb21vdGlvbk1pcnJvcj86IGJvb2xlYW5cbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8Q291cG9uUHJvZHVjdHNQYWdlXG4gICAgICBhcGlCYXNlPXthcGlCYXNlfVxuICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgYWxsb3dQcm9tb3Rpb25NaXJyb3I9e2FsbG93UHJvbW90aW9uTWlycm9yfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gTGVnYWN5Q291cG9uUHJvZHVjdHNQYWdlVmlldyh7XG4gIGFwaUJhc2UsXG4gIHRpdGxlLFxuICBhbGxvd1Byb21vdGlvbk1pcnJvciA9IGZhbHNlLFxufToge1xuICBhcGlCYXNlOiBBcGlCYXNlXG4gIHRpdGxlOiBzdHJpbmdcbiAgYWxsb3dQcm9tb3Rpb25NaXJyb3I/OiBib29sZWFuXG59KSB7XG4gIGNvbnN0IFtwcm9kdWN0cywgc2V0UHJvZHVjdHNdID0gdXNlU3RhdGU8Q291cG9uUHJvZHVjdFJvd1tdPihbXSlcbiAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gdXNlU3RhdGU8T3B0aW9uc1BheWxvYWQ+KHt9KVxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKVxuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW21vZGFsT3Blbiwgc2V0TW9kYWxPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2F2aW5nLCBzZXRTYXZpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFthY3RpdmVTdGVwLCBzZXRBY3RpdmVTdGVwXSA9IHVzZVN0YXRlPFdpemFyZFN0ZXA+KFwiZGV0YWlsc1wiKVxuICBjb25zdCBbcHJvZHVjdEZvcm0sIHNldFByb2R1Y3RGb3JtXSA9IHVzZVN0YXRlPFByb2R1Y3RGb3JtU3RhdGU+KGVtcHR5UHJvZHVjdClcbiAgY29uc3QgW2NvdXBvbkZvcm0sIHNldENvdXBvbkZvcm1dID0gdXNlU3RhdGU8Q291cG9uRm9ybVN0YXRlPihlbXB0eUNvdXBvbilcbiAgY29uc3QgW2NhbXBhaWduRm9ybSwgc2V0Q2FtcGFpZ25Gb3JtXSA9XG4gICAgdXNlU3RhdGU8Q2FtcGFpZ25Gb3JtU3RhdGU+KGVtcHR5Q2FtcGFpZ24pXG4gIGNvbnN0IHByb21wdCA9IHVzZVByb21wdCgpXG5cbiAgY29uc3QgY291cG9uQmFzZSA9IGAke2FwaUJhc2V9L2NvdXBvbi1wcm9kdWN0c2BcblxuICBjb25zdCBsb2FkID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICBzZXRMb2FkRXJyb3IobnVsbClcbiAgICB0cnkge1xuICAgICAgY29uc3QgW3Byb2R1Y3RzUGF5bG9hZCwgb3B0aW9uc1BheWxvYWRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBhcGlGZXRjaDx7IGNvdXBvbl9wcm9kdWN0czogQ291cG9uUHJvZHVjdFJvd1tdIH0+KGNvdXBvbkJhc2UpLFxuICAgICAgICBhcGlGZXRjaDxPcHRpb25zUGF5bG9hZD4oYCR7Y291cG9uQmFzZX0vb3B0aW9uc2ApLFxuICAgICAgXSlcbiAgICAgIHNldFByb2R1Y3RzKHByb2R1Y3RzUGF5bG9hZC5jb3Vwb25fcHJvZHVjdHMgfHwgW10pXG4gICAgICBzZXRPcHRpb25zKG9wdGlvbnNQYXlsb2FkIHx8IHt9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgID8gZXJyb3IubWVzc2FnZVxuICAgICAgICAgIDogXCJGYWlsZWQgdG8gbG9hZCBjb3Vwb24gcHJvZHVjdHNcIlxuICAgICAgc2V0TG9hZEVycm9yKG1lc3NhZ2UpXG4gICAgICB0b2FzdC5lcnJvcihtZXNzYWdlKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfSwgW2NvdXBvbkJhc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdm9pZCBsb2FkKClcbiAgfSwgW2xvYWRdKVxuXG4gIGNvbnN0IG9wdGlvbkRlZmF1bHRzID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgc2FsZXNfY2hhbm5lbF9pZDogb3B0aW9ucy5zYWxlc19jaGFubmVscz8uWzBdPy5pZCB8fCBcIlwiLFxuICAgICAgY3VycmVuY3lfY29kZTpcbiAgICAgICAgb3B0aW9ucy5jdXJyZW5jaWVzPy5maW5kKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuaXNfZGVmYXVsdCk/LmNvZGUgfHxcbiAgICAgICAgb3B0aW9ucy5jdXJyZW5jaWVzPy5bMF0/LmNvZGUgfHxcbiAgICAgICAgXCJcIixcbiAgICB9KSxcbiAgICBbb3B0aW9uc10sXG4gIClcblxuICBjb25zdCBjdXJyZW5jaWVzID0gb3B0aW9ucy5jdXJyZW5jaWVzIHx8IFtdXG4gIGNvbnN0IHN1cHBvcnRlZEN1cnJlbmN5Q29kZXMgPSB1c2VNZW1vKFxuICAgICgpID0+IG5ldyBTZXQoY3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiBjdXJyZW5jeS5jb2RlKSksXG4gICAgW2N1cnJlbmNpZXNdLFxuICApXG5cbiAgY29uc3QgdXBkYXRlUHJvZHVjdCA9XG4gICAgKGZpZWxkOiBrZXlvZiBQcm9kdWN0Rm9ybVN0YXRlKSA9PlxuICAgIChldmVudDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgW2ZpZWxkXTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgfSkpXG4gICAgfVxuXG4gIGNvbnN0IHVwZGF0ZUNvdXBvbiA9XG4gICAgKGZpZWxkOiBrZXlvZiBDb3Vwb25Gb3JtU3RhdGUpID0+XG4gICAgKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgW2ZpZWxkXTogZXZlbnQudGFyZ2V0LnZhbHVlIH0pKVxuICAgIH1cblxuICBjb25zdCB1cGRhdGVDYW1wYWlnbiA9XG4gICAgKGZpZWxkOiBrZXlvZiBDYW1wYWlnbkZvcm1TdGF0ZSkgPT5cbiAgICAoZXZlbnQ6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBzZXRDYW1wYWlnbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgIFtmaWVsZF06IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgIH0pKVxuICAgIH1cblxuICBmdW5jdGlvbiBvcGVuQ3JlYXRlKCkge1xuICAgIGNvbnN0IGN1cnJlbmN5Q29kZSA9IG9wdGlvbkRlZmF1bHRzLmN1cnJlbmN5X2NvZGVcbiAgICBzZXRQcm9kdWN0Rm9ybSh7XG4gICAgICAuLi5lbXB0eVByb2R1Y3QsXG4gICAgICAuLi5vcHRpb25EZWZhdWx0cyxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5lbXB0eVZhcmlhbnQsXG4gICAgICAgICAgY3VycmVuY3lfY29kZTogY3VycmVuY3lDb2RlLFxuICAgICAgICAgIG92ZXJyaWRlX2N1cnJlbmN5X2NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgICBzZXRDb3Vwb25Gb3JtKHsgLi4uZW1wdHlDb3Vwb24sIGN1cnJlbmN5X2NvZGU6IGN1cnJlbmN5Q29kZSB9KVxuICAgIHNldENhbXBhaWduRm9ybShlbXB0eUNhbXBhaWduKVxuICAgIHNldEFjdGl2ZVN0ZXAoXCJkZXRhaWxzXCIpXG4gICAgc2V0TW9kYWxPcGVuKHRydWUpXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuRWRpdChyb3c6IENvdXBvblByb2R1Y3RSb3cpIHtcbiAgICBjb25zdCBmb3JtcyA9IGZvcm1Gcm9tUm93KHJvdywgb3B0aW9uRGVmYXVsdHMuY3VycmVuY3lfY29kZSlcbiAgICBzZXRQcm9kdWN0Rm9ybSh7XG4gICAgICAuLi5mb3Jtcy5wcm9kdWN0LFxuICAgICAgdmFyaWFudHM6IGZvcm1zLnByb2R1Y3QudmFyaWFudHMubGVuZ3RoXG4gICAgICAgID8gZm9ybXMucHJvZHVjdC52YXJpYW50c1xuICAgICAgICA6IFt7IC4uLmVtcHR5VmFyaWFudCB9XSxcbiAgICB9KVxuICAgIHNldENvdXBvbkZvcm0oZm9ybXMuY291cG9uKVxuICAgIHNldENhbXBhaWduRm9ybShmb3Jtcy5jYW1wYWlnbilcbiAgICBzZXRBY3RpdmVTdGVwKFwiZGV0YWlsc1wiKVxuICAgIHNldE1vZGFsT3Blbih0cnVlKVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0VmFyaWFudChpbmRleDogbnVtYmVyLCBwYXRjaDogUGFydGlhbDxWYXJpYW50Rm9ybVN0YXRlPikge1xuICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIHZhcmlhbnRzOiBjdXJyZW50LnZhcmlhbnRzLm1hcCgodmFyaWFudCwgdmFyaWFudEluZGV4KSA9PlxuICAgICAgICB2YXJpYW50SW5kZXggPT09IGluZGV4ID8geyAuLi52YXJpYW50LCAuLi5wYXRjaCB9IDogdmFyaWFudCxcbiAgICAgICksXG4gICAgfSkpXG4gIH1cblxuICBmdW5jdGlvbiBhZGRWYXJpYW50KCkge1xuICAgIGNvbnN0IGN1cnJlbmN5Q29kZSA9XG4gICAgICBjb3Vwb25Gb3JtLmN1cnJlbmN5X2NvZGUgfHwgb3B0aW9uRGVmYXVsdHMuY3VycmVuY3lfY29kZVxuICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIC4uLmN1cnJlbnQudmFyaWFudHMsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5lbXB0eVZhcmlhbnQsXG4gICAgICAgICAgY3VycmVuY3lfY29kZTogY3VycmVuY3lDb2RlLFxuICAgICAgICAgIG92ZXJyaWRlX2N1cnJlbmN5X2NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSkpXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVWYXJpYW50KGluZGV4OiBudW1iZXIpIHtcbiAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICB2YXJpYW50czogY3VycmVudC52YXJpYW50cy5maWx0ZXIoXG4gICAgICAgIChfLCB2YXJpYW50SW5kZXgpID0+IHZhcmlhbnRJbmRleCAhPT0gaW5kZXgsXG4gICAgICApLFxuICAgIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gcHJvZHVjdFBheWxvYWQoaW5jbHVkZVZhcmlhbnRzOiBib29sZWFuKSB7XG4gICAgY29uc3QgcHJvZHVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICB0aXRsZTogcHJvZHVjdEZvcm0udGl0bGUsXG4gICAgICBzdWJ0aXRsZTogcHJvZHVjdEZvcm0uc3VidGl0bGUgfHwgbnVsbCxcbiAgICAgIGhhbmRsZTogcHJvZHVjdEZvcm0uaGFuZGxlIHx8IG51bGwsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvZHVjdEZvcm0uZGVzY3JpcHRpb24gfHwgbnVsbCxcbiAgICAgIHN0YXR1czogcHJvZHVjdEZvcm0uc3RhdHVzLFxuICAgICAgdGh1bWJuYWlsOiBwcm9kdWN0Rm9ybS50aHVtYm5haWwgfHwgbnVsbCxcbiAgICAgIGRpc2NvdW50YWJsZTogcHJvZHVjdEZvcm0uZGlzY291bnRhYmxlLFxuICAgICAgdHlwZV9pZDogcHJvZHVjdEZvcm0udHlwZV9pZCB8fCBudWxsLFxuICAgICAgY29sbGVjdGlvbl9pZDogcHJvZHVjdEZvcm0uY29sbGVjdGlvbl9pZCB8fCBudWxsLFxuICAgICAgY2F0ZWdvcmllczogcHJvZHVjdEZvcm0uY2F0ZWdvcnlfaWRcbiAgICAgICAgPyBbeyBpZDogcHJvZHVjdEZvcm0uY2F0ZWdvcnlfaWQgfV1cbiAgICAgICAgOiBbXSxcbiAgICAgIHRhZ3M6IHByb2R1Y3RGb3JtLnRhZ19pZCA/IFt7IGlkOiBwcm9kdWN0Rm9ybS50YWdfaWQgfV0gOiBbXSxcbiAgICAgIHNhbGVzX2NoYW5uZWxzOiBwcm9kdWN0Rm9ybS5zYWxlc19jaGFubmVsX2lkXG4gICAgICAgID8gW3sgaWQ6IHByb2R1Y3RGb3JtLnNhbGVzX2NoYW5uZWxfaWQgfV1cbiAgICAgICAgOiBbXSxcbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZVZhcmlhbnRzKSB7XG4gICAgICBwcm9kdWN0LnZhcmlhbnRzID0gcHJvZHVjdEZvcm0udmFyaWFudHMubWFwKCh2YXJpYW50KSA9PiAoe1xuICAgICAgICB0aXRsZTogdmFyaWFudC50aXRsZSxcbiAgICAgICAgc2t1OiB2YXJpYW50LnNrdSB8fCBudWxsLFxuICAgICAgICBtYW5hZ2VfaW52ZW50b3J5OiBmYWxzZSxcbiAgICAgICAgYWxsb3dfYmFja29yZGVyOiB0cnVlLFxuICAgICAgICBwcmljZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjdXJyZW5jeV9jb2RlOiB2YXJpYW50LmN1cnJlbmN5X2NvZGUudHJpbSgpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICBhbW91bnQ6IE51bWJlcih2YXJpYW50LmFtb3VudCkgfHwgMCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2R1Y3RcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhcmlhbnRPdmVycmlkZXMoKSB7XG4gICAgcmV0dXJuIHByb2R1Y3RGb3JtLnZhcmlhbnRzXG4gICAgICAubWFwKCh2YXJpYW50LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIXZhcmlhbnQub3ZlcnJpZGVfZW5hYmxlZCkgcmV0dXJuIG51bGxcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YXJpYW50X2luZGV4OiBpbmRleCxcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIGJlbmVmaXRfdHlwZTogdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUsXG4gICAgICAgICAgYW1vdW50OlxuICAgICAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCJcbiAgICAgICAgICAgICAgPyBudW1iZXJPck51bGwodmFyaWFudC5vdmVycmlkZV9hbW91bnQpXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBwZXJjZW50YWdlOlxuICAgICAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgPT09IFwicGVyY2VudGFnZVwiXG4gICAgICAgICAgICAgID8gbnVtYmVyT3JOdWxsKHZhcmlhbnQub3ZlcnJpZGVfcGVyY2VudGFnZSlcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIGN1cnJlbmN5X2NvZGU6XG4gICAgICAgICAgICB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIlxuICAgICAgICAgICAgICA/IHZhcmlhbnQub3ZlcnJpZGVfY3VycmVuY3lfY29kZS50cmltKCkudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAgICAgICAgIGNvdXBvbkZvcm0uY3VycmVuY3lfY29kZVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0ZUZvcm0oKSB7XG4gICAgaWYgKCFwcm9kdWN0Rm9ybS50aXRsZS50cmltKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb2R1Y3QgdGl0bGUgaXMgcmVxdWlyZWRcIilcbiAgICB9XG4gICAgaWYgKCFwcm9kdWN0Rm9ybS5pZCAmJiAhcHJvZHVjdEZvcm0udmFyaWFudHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdCBsZWFzdCBvbmUgcHJvZHVjdCB2YXJpYW50IGlzIHJlcXVpcmVkXCIpXG4gICAgfVxuICAgIGlmICghY3VycmVuY2llcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFkZCBhIHN1cHBvcnRlZCBjdXJyZW5jeSB0byB0aGUgc3RvcmUgYmVmb3JlIGNvbnRpbnVpbmdcIilcbiAgICB9XG4gICAgaWYgKCFwcm9kdWN0Rm9ybS5pZCkge1xuICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHByb2R1Y3RGb3JtLnZhcmlhbnRzKSB7XG4gICAgICAgIGlmICghc3VwcG9ydGVkQ3VycmVuY3lDb2Rlcy5oYXModmFyaWFudC5jdXJyZW5jeV9jb2RlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VsZWN0IGFuIGF2YWlsYWJsZSBjdXJyZW5jeSBmb3IgJHt2YXJpYW50LnRpdGxlfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgY291cG9uRm9ybS5iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCIgJiZcbiAgICAgIG51bWJlck9yTnVsbChjb3Vwb25Gb3JtLmFtb3VudCkgPT0gbnVsbFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBwb3NpdGl2ZSBjb3Vwb24gYW1vdW50IGlzIHJlcXVpcmVkXCIpXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNvdXBvbkZvcm0uYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiICYmXG4gICAgICAhc3VwcG9ydGVkQ3VycmVuY3lDb2Rlcy5oYXMoY291cG9uRm9ybS5jdXJyZW5jeV9jb2RlKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0IGFuIGF2YWlsYWJsZSBjb3Vwb24gY3VycmVuY3lcIilcbiAgICB9XG4gICAgaWYgKGNvdXBvbkZvcm0uYmVuZWZpdF90eXBlID09PSBcInBlcmNlbnRhZ2VcIikge1xuICAgICAgY29uc3QgcGVyY2VudGFnZSA9IG51bWJlck9yTnVsbChjb3Vwb25Gb3JtLnBlcmNlbnRhZ2UpXG4gICAgICBpZiAocGVyY2VudGFnZSA9PSBudWxsIHx8IHBlcmNlbnRhZ2UgPiAxMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291cG9uIHBlcmNlbnRhZ2UgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwMFwiKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBjb3Vwb25Gb3JtLmNvZGVfc3RyYXRlZ3kgPT09IFwic2hhcmVkX2NvZGVcIiAmJlxuICAgICAgIWNvdXBvbkZvcm0uc2hhcmVkX2NvZGUudHJpbSgpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHNoYXJlZCBjb3Vwb24gY29kZSBpcyByZXF1aXJlZFwiKVxuICAgIH1cbiAgICBpZiAoY291cG9uRm9ybS5leHBpcmF0aW9uX3R5cGUgPT09IFwiZml4ZWRcIikge1xuICAgICAgY29uc3QgZXhwaXJhdGlvbiA9IG5ldyBEYXRlKGNvdXBvbkZvcm0uZXhwaXJhdGlvbl9kYXRlKVxuICAgICAgaWYgKCFjb3Vwb25Gb3JtLmV4cGlyYXRpb25fZGF0ZSB8fCBOdW1iZXIuaXNOYU4oZXhwaXJhdGlvbi5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgdmFsaWQgZml4ZWQgZXhwaXJhdGlvbiBkYXRlIGlzIHJlcXVpcmVkXCIpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb3Vwb25Gb3JtLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJkdXJhdGlvblwiKSB7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IE51bWJlcihjb3Vwb25Gb3JtLmV4cGlyYXRpb25fZHVyYXRpb24pXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZHVyYXRpb24pIHx8IGR1cmF0aW9uIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHBvc2l0aXZlIHdob2xlLW51bWJlciBleHBpcmF0aW9uIGR1cmF0aW9uIGlzIHJlcXVpcmVkXCIpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb3Vwb25Gb3JtLmV4cGlyYXRpb25fY2FwX2F0KSB7XG4gICAgICBjb25zdCBleHBpcmF0aW9uQ2FwID0gbmV3IERhdGUoY291cG9uRm9ybS5leHBpcmF0aW9uX2NhcF9hdClcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4oZXhwaXJhdGlvbkNhcC5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgdmFsaWQgZXhwaXJhdGlvbiBjYXAgZGF0ZSBpcyByZXF1aXJlZFwiKVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgcHJvZHVjdEZvcm0udmFyaWFudHMpIHtcbiAgICAgIGlmICghdmFyaWFudC5vdmVycmlkZV9lbmFibGVkKSBjb250aW51ZVxuICAgICAgaWYgKFxuICAgICAgICB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIiAmJlxuICAgICAgICBudW1iZXJPck51bGwodmFyaWFudC5vdmVycmlkZV9hbW91bnQpID09IG51bGxcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEEgcG9zaXRpdmUgY291cG9uIGFtb3VudCBpcyByZXF1aXJlZCBmb3IgJHt2YXJpYW50LnRpdGxlfWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCIgJiZcbiAgICAgICAgIXN1cHBvcnRlZEN1cnJlbmN5Q29kZXMuaGFzKHZhcmlhbnQub3ZlcnJpZGVfY3VycmVuY3lfY29kZSlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFNlbGVjdCBhbiBhdmFpbGFibGUgY291cG9uIGN1cnJlbmN5IGZvciAke3ZhcmlhbnQudGl0bGV9YCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlID09PSBcInBlcmNlbnRhZ2VcIikge1xuICAgICAgICBjb25zdCBwZXJjZW50YWdlID0gbnVtYmVyT3JOdWxsKHZhcmlhbnQub3ZlcnJpZGVfcGVyY2VudGFnZSlcbiAgICAgICAgaWYgKHBlcmNlbnRhZ2UgPT0gbnVsbCB8fCBwZXJjZW50YWdlID4gMTAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENvdXBvbiBwZXJjZW50YWdlIGZvciAke3ZhcmlhbnQudGl0bGV9IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMDBgLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBhbGxvd1Byb21vdGlvbk1pcnJvciAmJlxuICAgICAgY2FtcGFpZ25Gb3JtLm1vZGUgPT09IFwiZXhpc3RpbmdcIiAmJlxuICAgICAgIWNhbXBhaWduRm9ybS5jYW1wYWlnbl9pZFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0IGFuIGV4aXN0aW5nIGNhbXBhaWduXCIpXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGFsbG93UHJvbW90aW9uTWlycm9yICYmXG4gICAgICBjYW1wYWlnbkZvcm0ubW9kZSA9PT0gXCJuZXdcIiAmJlxuICAgICAgKCFjYW1wYWlnbkZvcm0ubmFtZS50cmltKCkgfHwgIWNhbXBhaWduRm9ybS5jYW1wYWlnbl9pZGVudGlmaWVyLnRyaW0oKSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbXBhaWduIG5hbWUgYW5kIGlkZW50aWZpZXIgYXJlIHJlcXVpcmVkXCIpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3luY1ZhcmlhbnRPdmVycmlkZXMocHJvZHVjdElkOiBzdHJpbmcpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHByb2R1Y3RGb3JtLnZhcmlhbnRzLm1hcChhc3luYyAodmFyaWFudCkgPT4ge1xuICAgICAgICBpZiAoIXZhcmlhbnQuaWQpIHJldHVyblxuXG4gICAgICAgIGlmICghdmFyaWFudC5vdmVycmlkZV9lbmFibGVkKSB7XG4gICAgICAgICAgaWYgKHZhcmlhbnQub3ZlcnJpZGVfY29uZmlnX2lkKSB7XG4gICAgICAgICAgICBhd2FpdCBhcGlGZXRjaChgJHtjb3Vwb25CYXNlfS8ke3Byb2R1Y3RJZH0vdmFyaWFudHNgLCB7XG4gICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICB2YXJpYW50X2lkOiB2YXJpYW50LmlkLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgYXBpRmV0Y2goYCR7Y291cG9uQmFzZX0vJHtwcm9kdWN0SWR9L3ZhcmlhbnRzYCwge1xuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgdmFyaWFudF9pZDogdmFyaWFudC5pZCxcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBiZW5lZml0X3R5cGU6IHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlLFxuICAgICAgICAgICAgYW1vdW50OlxuICAgICAgICAgICAgICB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIlxuICAgICAgICAgICAgICAgID8gbnVtYmVyT3JOdWxsKHZhcmlhbnQub3ZlcnJpZGVfYW1vdW50KVxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIHBlcmNlbnRhZ2U6XG4gICAgICAgICAgICAgIHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlID09PSBcInBlcmNlbnRhZ2VcIlxuICAgICAgICAgICAgICAgID8gbnVtYmVyT3JOdWxsKHZhcmlhbnQub3ZlcnJpZGVfcGVyY2VudGFnZSlcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBjdXJyZW5jeV9jb2RlOlxuICAgICAgICAgICAgICB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIlxuICAgICAgICAgICAgICAgID8gdmFyaWFudC5vdmVycmlkZV9jdXJyZW5jeV9jb2RlLnRyaW0oKS50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgICAgICAgICAgICBjb3Vwb25Gb3JtLmN1cnJlbmN5X2NvZGUudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pXG4gICAgICB9KSxcbiAgICApXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzYXZlUHJvZHVjdCgpIHtcbiAgICBzZXRTYXZpbmcodHJ1ZSlcbiAgICB0cnkge1xuICAgICAgdmFsaWRhdGVGb3JtKClcbiAgICAgIGNvbnN0IGlzRWRpdCA9IEJvb2xlYW4ocHJvZHVjdEZvcm0uaWQpXG4gICAgICBjb25zdCBwYXRoID0gaXNFZGl0ID8gYCR7Y291cG9uQmFzZX0vJHtwcm9kdWN0Rm9ybS5pZH1gIDogY291cG9uQmFzZVxuICAgICAgY29uc3QgbWV0aG9kID0gaXNFZGl0ID8gXCJQQVRDSFwiIDogXCJQT1NUXCJcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIHByb2R1Y3Q6IHByb2R1Y3RQYXlsb2FkKCFpc0VkaXQpLFxuICAgICAgICBjb3Vwb246IGJ1aWxkQ291cG9uUGF5bG9hZChjb3Vwb25Gb3JtLCBhbGxvd1Byb21vdGlvbk1pcnJvciksXG4gICAgICAgIGNhbXBhaWduOiBidWlsZENhbXBhaWduUGF5bG9hZChjYW1wYWlnbkZvcm0sIGFsbG93UHJvbW90aW9uTWlycm9yKSxcbiAgICAgICAgc2VsbGVyX2lkOiBwcm9kdWN0Rm9ybS5zZWxsZXJfaWQgfHwgbnVsbCxcbiAgICAgICAgdmFyaWFudF9vdmVycmlkZXM6IGlzRWRpdCA/IFtdIDogdmFyaWFudE92ZXJyaWRlcygpLFxuICAgICAgfVxuXG4gICAgICBhd2FpdCBhcGlGZXRjaChwYXRoLCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXG4gICAgICB9KVxuICAgICAgaWYgKGlzRWRpdCkge1xuICAgICAgICBhd2FpdCBzeW5jVmFyaWFudE92ZXJyaWRlcyhwcm9kdWN0Rm9ybS5pZClcbiAgICAgIH1cbiAgICAgIHRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgIGlzRWRpdCA/IFwiQ291cG9uIHByb2R1Y3QgdXBkYXRlZFwiIDogXCJDb3Vwb24gcHJvZHVjdCBjcmVhdGVkXCIsXG4gICAgICApXG4gICAgICBzZXRNb2RhbE9wZW4oZmFsc2UpXG4gICAgICBhd2FpdCBsb2FkKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdG9hc3QuZXJyb3IoXG4gICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICA6IFwiRmFpbGVkIHRvIHNhdmUgY291cG9uIHByb2R1Y3RcIixcbiAgICAgIClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U2F2aW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVByb2R1Y3Qocm93OiBDb3Vwb25Qcm9kdWN0Um93KSB7XG4gICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgcHJvbXB0KHtcbiAgICAgIHRpdGxlOiBcIlJlbW92ZSBjb3Vwb24gcHJvZHVjdD9cIixcbiAgICAgIGRlc2NyaXB0aW9uOiBgVGhpcyByZW1vdmVzIGNvdXBvbiBpc3N1YW5jZSBmcm9tICR7XG4gICAgICAgIHJvdy5wcm9kdWN0LnRpdGxlIHx8IHJvdy5wcm9kdWN0LmlkXG4gICAgICB9LiBUaGUgdW5kZXJseWluZyBNZWR1c2EgcHJvZHVjdCB3aWxsIHJlbWFpbiBhdmFpbGFibGUuYCxcbiAgICAgIGNvbmZpcm1UZXh0OiBcIlJlbW92ZSBwcm9kdWN0XCIsXG4gICAgICBjYW5jZWxUZXh0OiBcIkNhbmNlbFwiLFxuICAgICAgdmFyaWFudDogXCJkYW5nZXJcIixcbiAgICB9KVxuICAgIGlmICghY29uZmlybWVkKSByZXR1cm5cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcGlGZXRjaChgJHtjb3Vwb25CYXNlfS8ke3Jvdy5wcm9kdWN0LmlkfWAsIHsgbWV0aG9kOiBcIkRFTEVURVwiIH0pXG4gICAgICB0b2FzdC5zdWNjZXNzKFwiQ291cG9uIGNvbmZpZ3VyYXRpb24gcmVtb3ZlZFwiKVxuICAgICAgYXdhaXQgbG9hZCgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRvYXN0LmVycm9yKFxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgPyBlcnJvci5tZXNzYWdlXG4gICAgICAgICAgOiBcIkZhaWxlZCB0byByZW1vdmUgY291cG9uIHByb2R1Y3RcIixcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBtaXJyb3JQcm9tb3Rpb24ocm93OiBDb3Vwb25Qcm9kdWN0Um93KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwaUZldGNoKFxuICAgICAgICBgL2FkbWluL2NvdXBvbi1wcm9kdWN0cy8ke3Jvdy5wcm9kdWN0LmlkfS9taXJyb3ItcHJvbW90aW9uYCxcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe30pLFxuICAgICAgICB9LFxuICAgICAgKVxuICAgICAgdG9hc3Quc3VjY2VzcyhcIlByb21vdGlvbiBtaXJyb3IgY3JlYXRlZFwiKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0b2FzdC5lcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiTWlycm9yIGZhaWxlZFwiKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRTdGVwSW5kZXggPSBzdGVwcy5pbmRleE9mKGFjdGl2ZVN0ZXApXG4gIGNvbnN0IGNhbkdvQmFjayA9IGN1cnJlbnRTdGVwSW5kZXggPiAwXG4gIGNvbnN0IGNhbkdvTmV4dCA9IGN1cnJlbnRTdGVwSW5kZXggPCBzdGVwcy5sZW5ndGggLSAxXG4gIGNvbnN0IHNob3dDYW1wYWlnblN0ZXAgPSBhbGxvd1Byb21vdGlvbk1pcnJvclxuICBjb25zdCB2aXNpYmxlU3RlcHMgPSBzaG93Q2FtcGFpZ25TdGVwXG4gICAgPyBzdGVwc1xuICAgIDogc3RlcHMuZmlsdGVyKChzdGVwKSA9PiBzdGVwICE9PSBcImNhbXBhaWduXCIpXG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cImRpdmlkZS15IHAtMFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNiBweS00XCI+XG4gICAgICAgIDxIZWFkaW5nIGxldmVsPVwiaDFcIj57dGl0bGV9PC9IZWFkaW5nPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC14LTJcIj5cbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKSA9PiB2b2lkIGxvYWQoKX0+XG4gICAgICAgICAgICA8QXJyb3dQYXRoIC8+XG4gICAgICAgICAgICBSZWZyZXNoXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiBvbkNsaWNrPXtvcGVuQ3JlYXRlfT5cbiAgICAgICAgICAgIDxQbHVzIC8+XG4gICAgICAgICAgICBDcmVhdGVcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICA8Q291cG9uRW1wdHlTdGF0ZSB0aXRsZT1cIkxvYWRpbmcgY291cG9uIHByb2R1Y3RzXCIgLz5cbiAgICAgICkgOiBsb2FkRXJyb3IgPyAoXG4gICAgICAgIDxDb3Vwb25FbXB0eVN0YXRlIHRpdGxlPXtsb2FkRXJyb3J9IC8+XG4gICAgICApIDogcHJvZHVjdHMubGVuZ3RoID8gKFxuICAgICAgICA8VGFibGU+XG4gICAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlByb2R1Y3Q8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlN0YXR1czwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+QmVuZWZpdDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+Q29kZTwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+Q2FtcGFpZ248L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPklzc3VlZDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGwgLz5cbiAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgIDwvVGFibGUuSGVhZGVyPlxuICAgICAgICAgIDxUYWJsZS5Cb2R5PlxuICAgICAgICAgICAge3Byb2R1Y3RzLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHJvdy5jb3Vwb25fcHJvZHVjdF9jb25maWdcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8VGFibGUuUm93IGtleT17cm93LmlkfT5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJwbHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cm93LnByb2R1Y3QudGl0bGUgfHwgcm93LnByb2R1Y3QuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtyb3cucHJvZHVjdC5oYW5kbGUgfHwgcm93LnByb2R1Y3QuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8U3RhdHVzQmFkZ2UgY29sb3I9e3Byb2R1Y3RTdGF0dXNDb2xvcihyb3cucHJvZHVjdC5zdGF0dXMpfT5cbiAgICAgICAgICAgICAgICAgICAgICB7cm93LnByb2R1Y3Quc3RhdHVzIHx8IFwiZHJhZnRcIn1cbiAgICAgICAgICAgICAgICAgICAgPC9TdGF0dXNCYWRnZT5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntiZW5lZml0TGFiZWwoY29uZmlnKX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAge2NvbmZpZy5jb2RlX3N0cmF0ZWd5ID09PSBcInNoYXJlZF9jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IGNvbmZpZy5zaGFyZWRfY29kZSB8fCBcIi1cIlxuICAgICAgICAgICAgICAgICAgICAgIDogY29uZmlnLmNvZGVfcHJlZml4IHx8IFwiQ09VUE9OXCJ9XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57Y2FtcGFpZ25MYWJlbChjb25maWcpfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntyb3cuZW50aXRsZW1lbnRzX2NvdW50IHx8IDB9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBnYXAteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAge2FsbG93UHJvbW90aW9uTWlycm9yICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgbWlycm9yUHJvbW90aW9uKHJvdyl9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE1pcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvcGVuRWRpdChyb3cpfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQZW5jaWxTcXVhcmUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRcbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIGRlbGV0ZVByb2R1Y3Qocm93KX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VHJhc2ggLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZSBjb25maWdcbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgPC9UYWJsZT5cbiAgICAgICkgOiAoXG4gICAgICAgIDxDb3Vwb25FbXB0eVN0YXRlXG4gICAgICAgICAgdGl0bGU9XCJObyBjb3Vwb24gcHJvZHVjdHMgZm91bmRcIlxuICAgICAgICAgIGRlc2NyaXB0aW9uPVwiQ3JlYXRlIGEgbmV3IGNvdXBvbiBwcm9kdWN0IHRvIGdldCBzdGFydGVkLlwiXG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICA8Rm9jdXNNb2RhbCBvcGVuPXttb2RhbE9wZW59IG9uT3BlbkNoYW5nZT17c2V0TW9kYWxPcGVufT5cbiAgICAgICAgPEZvY3VzTW9kYWwuQ29udGVudCBzdHlsZT17bW9kYWxDb250ZW50U3R5bGV9PlxuICAgICAgICAgIDxGb2N1c01vZGFsLkhlYWRlciBzdHlsZT17bW9kYWxTdGF0aWNSb3dTdHlsZX0+XG4gICAgICAgICAgICA8Rm9jdXNNb2RhbC5UaXRsZT5cbiAgICAgICAgICAgICAge3Byb2R1Y3RGb3JtLmlkID8gXCJFZGl0IENvdXBvbiBQcm9kdWN0XCIgOiBcIkNyZWF0ZSBDb3Vwb24gUHJvZHVjdFwifVxuICAgICAgICAgICAgPC9Gb2N1c01vZGFsLlRpdGxlPlxuICAgICAgICAgIDwvRm9jdXNNb2RhbC5IZWFkZXI+XG4gICAgICAgICAgPFByb2dyZXNzVGFic1xuICAgICAgICAgICAgdmFsdWU9e2FjdGl2ZVN0ZXB9XG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodmFsdWUpID0+IHNldEFjdGl2ZVN0ZXAodmFsdWUgYXMgV2l6YXJkU3RlcCl9XG4gICAgICAgICAgICBzdHlsZT17bW9kYWxXaXphcmRTdHlsZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkxpc3QgY2xhc3NOYW1lPVwiYm9yZGVyLWJcIiBzdHlsZT17bW9kYWxTdGF0aWNSb3dTdHlsZX0+XG4gICAgICAgICAgICAgIHt2aXNpYmxlU3RlcHMubWFwKChzdGVwKSA9PiAoXG4gICAgICAgICAgICAgICAgPFByb2dyZXNzVGFicy5UcmlnZ2VyXG4gICAgICAgICAgICAgICAgICBrZXk9e3N0ZXB9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17c3RlcH1cbiAgICAgICAgICAgICAgICAgIHN0YXR1cz17c3RlcFN0YXR1cyhzdGVwLCBhY3RpdmVTdGVwKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7c3RlcCA9PT0gXCJkZXRhaWxzXCJcbiAgICAgICAgICAgICAgICAgICAgPyBcIkRldGFpbHNcIlxuICAgICAgICAgICAgICAgICAgICA6IHN0ZXAgPT09IFwib3JnYW5pemVcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJPcmdhbml6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBzdGVwID09PSBcInZhcmlhbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJWYXJpYW50c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHN0ZXAgPT09IFwiY291cG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIkNvdXBvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJDYW1wYWlnblwifVxuICAgICAgICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzLlRyaWdnZXI+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuTGlzdD5cbiAgICAgICAgICAgIDxGb2N1c01vZGFsLkJvZHkgc3R5bGU9e21vZGFsQm9keVN0eWxlfT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17bW9kYWxGb3JtU3R5bGV9PlxuICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuQ29udGVudCB2YWx1ZT1cImRldGFpbHNcIiBzdHlsZT17c3RhY2tTdHlsZX0+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt0aHJlZUNvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdEZvcm0udGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlUHJvZHVjdChcInRpdGxlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdEZvcm0uc3VidGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlUHJvZHVjdChcInN1YnRpdGxlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkhhbmRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLmhhbmRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVQcm9kdWN0KFwiaGFuZGxlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJEZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxUZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZVByb2R1Y3QoXCJkZXNjcmlwdGlvblwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJNZWRpYSBVUkxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS50aHVtYm5haWx9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlUHJvZHVjdChcInRodW1ibmFpbFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuQ29udGVudD5cblxuICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuQ29udGVudCB2YWx1ZT1cIm9yZ2FuaXplXCIgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLnN0YXR1c31cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdEZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImRyYWZ0XCI+RHJhZnQ8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJwdWJsaXNoZWRcIj5QdWJsaXNoZWQ8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJwcm9wb3NlZFwiPlByb3Bvc2VkPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwicmVqZWN0ZWRcIj5SZWplY3RlZDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICB7YXBpQmFzZSA9PT0gXCIvYWRtaW5cIiAmJiAhcHJvZHVjdEZvcm0uaWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlNlbGxlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdEZvcm0uc2VsbGVyX2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnNlbGxlcnMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdEZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsbGVyX2lkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJUeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLnR5cGVfaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnByb2R1Y3RfdHlwZXMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfaWQ6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDb2xsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLmNvbGxlY3Rpb25faWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnByb2R1Y3RfY29sbGVjdGlvbnMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25faWQ6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDYXRlZ29yeVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS5jYXRlZ29yeV9pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnMucHJvZHVjdF9jYXRlZ29yaWVzIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdEZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeV9pZDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlRhZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS50YWdfaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnByb2R1Y3RfdGFncyB8fCBbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnX2lkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU2FsZXMgY2hhbm5lbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS5zYWxlc19jaGFubmVsX2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5zYWxlc19jaGFubmVscyB8fCBbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FsZXNfY2hhbm5lbF9pZDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3BhbmVsU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtyb3dCZXR3ZWVuU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJwbHVzXCI+RGlzY291bnRhYmxlPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3VudHMgY2FuIGFwcGx5IHRvIHRoaXMgcHJvZHVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Byb2R1Y3RGb3JtLmRpc2NvdW50YWJsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzY291bnRhYmxlOiBCb29sZWFuKGNoZWNrZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzLkNvbnRlbnQ+XG5cbiAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkNvbnRlbnQgdmFsdWU9XCJ2YXJpYW50c1wiIHN0eWxlPXtzdGFja1N0eWxlfT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3Jvd0JldHdlZW5TdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgIDxIZWFkaW5nIGxldmVsPVwiaDJcIj5WYXJpYW50czwvSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgeyFwcm9kdWN0Rm9ybS5pZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17YWRkVmFyaWFudH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UGx1cyAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgQWRkIHZhcmlhbnRcbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTRcIj5cbiAgICAgICAgICAgICAgICAgICAge3Byb2R1Y3RGb3JtLnZhcmlhbnRzLm1hcCgodmFyaWFudCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17YCR7dmFyaWFudC5pZCB8fCBpbmRleH1gfSBzdHlsZT17cGFuZWxTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtmb3VyQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiVGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YXJpYW50LnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e0Jvb2xlYW4ocHJvZHVjdEZvcm0uaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFyaWFudChpbmRleCwgeyB0aXRsZTogZXZlbnQudGFyZ2V0LnZhbHVlIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU0tVXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFyaWFudC5za3V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Qm9vbGVhbihwcm9kdWN0Rm9ybS5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYXJpYW50KGluZGV4LCB7IHNrdTogZXZlbnQudGFyZ2V0LnZhbHVlIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ3VycmVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q3VycmVuY3lTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmNpZXM9e2N1cnJlbmNpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFyaWFudC5jdXJyZW5jeV9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e0Jvb2xlYW4ocHJvZHVjdEZvcm0uaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhjdXJyZW5jeV9jb2RlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYXJpYW50KGluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lfY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJQcmljZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDdXJyZW5jeUFtb3VudElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jaWVzPXtjdXJyZW5jaWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lDb2RlPXt2YXJpYW50LmN1cnJlbmN5X2NvZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFyaWFudC5hbW91bnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Qm9vbGVhbihwcm9kdWN0Rm9ybS5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGFtb3VudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFyaWFudChpbmRleCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyVG9wOiBcIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IDE2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdUb3A6IDE2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtyb3dCZXR3ZWVuU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHdlaWdodD1cInBsdXNcIj5Db3Vwb24gYmVuZWZpdCBvdmVycmlkZTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXt2YXJpYW50Lm92ZXJyaWRlX2VuYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYXJpYW50KGluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVfZW5hYmxlZDogQm9vbGVhbihjaGVja2VkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3ZhcmlhbnQub3ZlcnJpZGVfZW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgLi4uZm91ckNvbHVtbkdyaWRTdHlsZSwgbWFyZ2luVG9wOiAxMiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkJlbmVmaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYXJpYW50KGluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlX2JlbmVmaXRfdHlwZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBhcyBCZW5lZml0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZml4ZWRfYW1vdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkIGFtb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cInBlcmNlbnRhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVyY2VudGFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImZyZWVfc2hpcHBpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlZSBzaGlwcGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDdXJyZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q3VycmVuY3lTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jaWVzPXtjdXJyZW5jaWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YXJpYW50Lm92ZXJyaWRlX2N1cnJlbmN5X2NvZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgIT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpeGVkX2Ftb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsob3ZlcnJpZGVfY3VycmVuY3lfY29kZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhcmlhbnQoaW5kZXgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVfY3VycmVuY3lfY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkFtb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q3VycmVuY3lBbW91bnRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmNpZXM9e2N1cnJlbmNpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lDb2RlPXt2YXJpYW50Lm92ZXJyaWRlX2N1cnJlbmN5X2NvZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhcmlhbnQub3ZlcnJpZGVfYW1vdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXhlZF9hbW91bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KG92ZXJyaWRlX2Ftb3VudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhcmlhbnQoaW5kZXgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVfYW1vdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiUGVyY2VudGFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFyaWFudC5vdmVycmlkZV9wZXJjZW50YWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwZXJjZW50YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhcmlhbnQoaW5kZXgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVfcGVyY2VudGFnZTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IXByb2R1Y3RGb3JtLmlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdEZvcm0udmFyaWFudHMubGVuZ3RoID4gMSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6IDE2IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiByZW1vdmVWYXJpYW50KGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlIHZhcmlhbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5Db250ZW50PlxuXG4gICAgICAgICAgICAgICAgPFByb2dyZXNzVGFicy5Db250ZW50IHZhbHVlPVwiY291cG9uXCIgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cGFuZWxTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3Jvd0JldHdlZW5TdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHdlaWdodD1cInBsdXNcIj5Db3Vwb24gaXNzdWFuY2U8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIElzc3VlIGNvdXBvbnMgd2hlbiBjdXN0b21lcnMgcHVyY2hhc2UgdGhpcyBwcm9kdWN0XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y291cG9uRm9ybS5lbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oY2hlY2tlZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt0d29Db2x1bW5HcmlkU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJCZW5lZml0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uYmVuZWZpdF90eXBlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb25Gb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVuZWZpdF90eXBlOiB2YWx1ZSBhcyBCZW5lZml0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJmaXhlZF9hbW91bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZCBhbW91bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwicGVyY2VudGFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmNlbnRhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZnJlZV9zaGlwcGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZWUgc2hpcHBpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIHthbGxvd1Byb21vdGlvbk1pcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiUHJvbW90aW9uIHN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5wcm9tb3Rpb25fc3RhdHVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25fc3RhdHVzOiB2YWx1ZSBhcyBQcm9tb3Rpb25TdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImRyYWZ0XCI+RHJhZnQ8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImFjdGl2ZVwiPkFjdGl2ZTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiaW5hY3RpdmVcIj5JbmFjdGl2ZTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJBbW91bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Q3VycmVuY3lBbW91bnRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY2llcz17Y3VycmVuY2llc31cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5Q29kZT17Y291cG9uRm9ybS5jdXJyZW5jeV9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2NvdXBvbkZvcm0uYmVuZWZpdF90eXBlICE9PSBcImZpeGVkX2Ftb3VudFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uYW1vdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhhbW91bnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGFtb3VudCB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJQZXJjZW50YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjb3Vwb25Gb3JtLmJlbmVmaXRfdHlwZSAhPT0gXCJwZXJjZW50YWdlXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5wZXJjZW50YWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZUNvdXBvbihcInBlcmNlbnRhZ2VcIil9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ3VycmVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Q3VycmVuY3lTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmNpZXM9e2N1cnJlbmNpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5jdXJyZW5jeV9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2NvdXBvbkZvcm0uYmVuZWZpdF90eXBlICE9PSBcImZpeGVkX2Ftb3VudFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhjdXJyZW5jeV9jb2RlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb25Gb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lfY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhwaXJhdGlvbiBwb2xpY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5leHBpcmF0aW9uX3R5cGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX3R5cGU6IHZhbHVlIGFzIEV4cGlyYXRpb25Qb2xpY3lUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cIm5vbmVcIj5ObyBleHBpcmF0aW9uPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwibW9udGhfZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kIG9mIHNhbWUgbW9udGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZHVyYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdXJhdGlvbiBhZnRlciBpc3N1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJmaXhlZFwiPkZpeGVkIGRhdGU8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAge2NvdXBvbkZvcm0uZXhwaXJhdGlvbl90eXBlID09PSBcImR1cmF0aW9uXCIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkR1cmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj17MX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5leHBpcmF0aW9uX2R1cmF0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDb3Vwb24oXCJleHBpcmF0aW9uX2R1cmF0aW9uXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkR1cmF0aW9uIHVuaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLmV4cGlyYXRpb25fZHVyYXRpb25fdW5pdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsoZXhwaXJhdGlvbl9kdXJhdGlvbl91bml0KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbl9kdXJhdGlvbl91bml0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fZHVyYXRpb25fdW5pdCBhcyBFeHBpcmF0aW9uRHVyYXRpb25Vbml0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPjxTZWxlY3QuVmFsdWUgLz48L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImRheXNcIj5EYXlzPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cIm1vbnRoc1wiPk1vbnRoczwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICApIDogY291cG9uRm9ybS5leHBpcmF0aW9uX3R5cGUgPT09IFwiZml4ZWRcIiA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJFeHBpcmVzIGF0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uZXhwaXJhdGlvbl9kYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlQ291cG9uKFwiZXhwaXJhdGlvbl9kYXRlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgeyhjb3Vwb25Gb3JtLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJkdXJhdGlvblwiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgY291cG9uRm9ybS5leHBpcmF0aW9uX3R5cGUgPT09IFwibW9udGhfZW5kXCIpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJFeHBpcmF0aW9uIHRpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uZXhwaXJhdGlvbl90aW1lX3BvbGljeX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KGV4cGlyYXRpb25fdGltZV9wb2xpY3kpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX3RpbWVfcG9saWN5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX3RpbWVfcG9saWN5IGFzIEV4cGlyYXRpb25UaW1lUG9saWN5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj48U2VsZWN0LlZhbHVlIC8+PC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImRheV9lbmRcIj5FbmQgb2YgZGF5PC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJleGFjdGx5XCI+RXhhY3RseTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7Y291cG9uRm9ybS5leHBpcmF0aW9uX3R5cGUgIT09IFwibm9uZVwiICYmIDxGaWVsZCBsYWJlbD1cIkNhcCBleHBpcmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cm93QmV0d2VlblN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FtcGFpZ24gZW5kIG9yIGNhcCBkYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NvdXBvbkZvcm0uZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ259XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbjogQm9vbGVhbihjaGVja2VkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD59XG4gICAgICAgICAgICAgICAgICAgIHtjb3Vwb25Gb3JtLmV4cGlyYXRpb25fdHlwZSAhPT0gXCJub25lXCIgJiYgPEZpZWxkIGxhYmVsPVwiRXhwaXJhdGlvbiBjYXAgZGF0ZSAob3B0aW9uYWwpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjb3Vwb25Gb3JtLmV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWdufVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uZXhwaXJhdGlvbl9jYXBfYXR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlQ291cG9uKFwiZXhwaXJhdGlvbl9jYXBfYXRcIil9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD59XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNvZGUgc3RyYXRlZ3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5jb2RlX3N0cmF0ZWd5fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb25Gb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9zdHJhdGVneTogdmFsdWUgYXMgQ29kZVN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cInVuaXF1ZV9jb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pcXVlIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwic2hhcmVkX2NvZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZWQgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ29kZSBwcmVmaXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjb3Vwb25Gb3JtLmNvZGVfc3RyYXRlZ3kgIT09IFwidW5pcXVlX2NvZGVcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLmNvZGVfcHJlZml4fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZUNvdXBvbihcImNvZGVfcHJlZml4XCIpfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlNoYXJlZCBjb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y291cG9uRm9ybS5jb2RlX3N0cmF0ZWd5ICE9PSBcInNoYXJlZF9jb2RlXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5zaGFyZWRfY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDb3Vwb24oXCJzaGFyZWRfY29kZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJNYXggaXNzdWFuY2UgcGVyIGl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0ubWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZUNvdXBvbihcIm1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICB7YWxsb3dQcm9tb3Rpb25NaXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlByb21vdGlvbiBtaXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0ucHJvbW90aW9uX21pcnJvcl9tb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25fbWlycm9yX21vZGU6IHZhbHVlIGFzIE1pcnJvck1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cIm5vbmVcIj5Ob25lPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJtYW51YWxcIj5NYW51YWw8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImF1dG9cIj5BdXRvPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5Db250ZW50PlxuXG4gICAgICAgICAgICAgICAge2FsbG93UHJvbW90aW9uTWlycm9yICYmIChcbiAgICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuQ29udGVudCB2YWx1ZT1cImNhbXBhaWduXCIgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt0d29Db2x1bW5HcmlkU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNhbXBhaWduXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbkZvcm0ubW9kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENhbXBhaWduRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiB2YWx1ZSBhcyBDYW1wYWlnbk1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cIm5vbmVcIj5ObyBjYW1wYWlnbjwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZXhpc3RpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4aXN0aW5nIGNhbXBhaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJuZXdcIj5OZXcgY2FtcGFpZ248L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICB7Y2FtcGFpZ25Gb3JtLm1vZGUgPT09IFwiZXhpc3RpbmdcIiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJFeGlzdGluZyBjYW1wYWlnblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduRm9ybS5jYW1wYWlnbl9pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLmNhbXBhaWducyB8fCBbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2FtcGFpZ25Gb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1wYWlnbl9pZDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAge2NhbXBhaWduRm9ybS5tb2RlID09PSBcIm5ld1wiICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIk5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbkZvcm0ubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDYW1wYWlnbihcIm5hbWVcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiSWRlbnRpZmllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduRm9ybS5jYW1wYWlnbl9pZGVudGlmaWVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZUNhbXBhaWduKFwiY2FtcGFpZ25faWRlbnRpZmllclwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJTdGFydHMgYXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2FtcGFpZ25Gb3JtLnN0YXJ0c19hdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDYW1wYWlnbihcInN0YXJ0c19hdFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJFbmRzIGF0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduRm9ybS5lbmRzX2F0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZUNhbXBhaWduKFwiZW5kc19hdFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5Db250ZW50PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9Gb2N1c01vZGFsLkJvZHk+XG4gICAgICAgICAgPC9Qcm9ncmVzc1RhYnM+XG4gICAgICAgICAgPEZvY3VzTW9kYWwuRm9vdGVyIHN0eWxlPXttb2RhbFN0YXRpY1Jvd1N0eWxlfT5cbiAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cInNlY29uZGFyeVwiIG9uQ2xpY2s9eygpID0+IHNldE1vZGFsT3BlbihmYWxzZSl9PlxuICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAge2NhbkdvQmFjayAmJiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlU3RlcCh2aXNpYmxlU3RlcHNbY3VycmVudFN0ZXBJbmRleCAtIDFdKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEJhY2tcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2NhbkdvTmV4dCAmJlxuICAgICAgICAgICAgYWN0aXZlU3RlcCAhPT0gdmlzaWJsZVN0ZXBzW3Zpc2libGVTdGVwcy5sZW5ndGggLSAxXSA/IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgICBzZXRBY3RpdmVTdGVwKHZpc2libGVTdGVwc1tjdXJyZW50U3RlcEluZGV4ICsgMV0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQ29udGludWVcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8QnV0dG9uIGlzTG9hZGluZz17c2F2aW5nfSBvbkNsaWNrPXsoKSA9PiB2b2lkIHNhdmVQcm9kdWN0KCl9PlxuICAgICAgICAgICAgICAgIFNhdmVcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvRm9jdXNNb2RhbC5Gb290ZXI+XG4gICAgICAgIDwvRm9jdXNNb2RhbC5Db250ZW50PlxuICAgICAgPC9Gb2N1c01vZGFsPlxuICAgIDwvQ29udGFpbmVyPlxuICApXG59XG5cbmZ1bmN0aW9uIE9wdGlvblNlbGVjdCh7XG4gIHZhbHVlLFxuICBvcHRpb25zLFxuICBvbkNoYW5nZSxcbn06IHtcbiAgdmFsdWU6IHN0cmluZ1xuICBvcHRpb25zOiBPcHRpb25SZWNvcmRbXVxuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0XG4gICAgICB2YWx1ZT17dmFsdWUgfHwgTk9ORX1cbiAgICAgIG9uVmFsdWVDaGFuZ2U9eyhuZXh0KSA9PiBvbkNoYW5nZShuZXh0ID09PSBOT05FID8gXCJcIiA6IG5leHQpfVxuICAgID5cbiAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgPFNlbGVjdC5WYWx1ZSAvPlxuICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPXtOT05FfT5Ob25lPC9TZWxlY3QuSXRlbT5cbiAgICAgICAge29wdGlvbnMubWFwKChvcHRpb24pID0+IChcbiAgICAgICAgICA8U2VsZWN0Lkl0ZW0ga2V5PXtvcHRpb24uaWR9IHZhbHVlPXtvcHRpb24uaWR9PlxuICAgICAgICAgICAge29wdGlvbkxhYmVsKG9wdGlvbil9XG4gICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgKSl9XG4gICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgIDwvU2VsZWN0PlxuICApXG59XG4iLCAiaW1wb3J0IHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbiAgdHlwZSBDaGFuZ2VFdmVudCxcbiAgdHlwZSBDU1NQcm9wZXJ0aWVzLFxuICB0eXBlIERyYWdFdmVudCxcbiAgdHlwZSBSZWFjdE5vZGUsXG59IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge1xuICBBZGp1c3RtZW50cyxcbiAgQXJyb3dQYXRoLFxuICBBcnJvd1VwVHJheSxcbiAgSW5mb3JtYXRpb25DaXJjbGUsXG4gIFBlbmNpbFNxdWFyZSxcbiAgUGx1cyxcbiAgVGF4RXhjbHVzaXZlLFxuICBUYXhJbmNsdXNpdmUsXG4gIFRyYXNoLFxuICBYTWFya01pbmksXG59IGZyb20gXCJAbWVkdXNhanMvaWNvbnNcIlxuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDaGVja2JveCxcbiAgQ29udGFpbmVyLFxuICBDdXJyZW5jeUlucHV0LFxuICBEaXZpZGVyLFxuICBEcm9wZG93bk1lbnUsXG4gIERyYXdlcixcbiAgRm9jdXNNb2RhbCxcbiAgSGVhZGluZyxcbiAgSW5wdXQsXG4gIExhYmVsLFxuICBQcm9ncmVzc1RhYnMsXG4gIFJhZGlvR3JvdXAsXG4gIFNlbGVjdCxcbiAgU3RhdHVzQmFkZ2UsXG4gIFN3aXRjaCxcbiAgVGFibGUsXG4gIFRleHQsXG4gIFRleHRhcmVhLFxuICBUb29sdGlwLFxuICB0b2FzdCxcbiAgdXNlUHJvbXB0LFxufSBmcm9tIFwiQG1lZHVzYWpzL3VpXCJcbmltcG9ydCB7IENvdXBvbkVtcHR5U3RhdGUgfSBmcm9tIFwiLi9lbXB0eS1zdGF0ZVwiXG5cbmRlY2xhcmUgY29uc3QgX19CQUNLRU5EX1VSTF9fOiBzdHJpbmdcblxudHlwZSBBcGlCYXNlID0gXCIvYWRtaW5cIiB8IFwiL3ZlbmRvclwiXG50eXBlIEJlbmVmaXRUeXBlID0gXCJmaXhlZF9hbW91bnRcIiB8IFwicGVyY2VudGFnZVwiIHwgXCJmcmVlX3NoaXBwaW5nXCIgfCBcImJ1eV9nZXRcIlxudHlwZSBDb3Vwb25UeXBlID1cbiAgfCBcImFtb3VudF9vZmZfcHJvZHVjdHNcIlxuICB8IFwiYW1vdW50X29mZl9vcmRlclwiXG4gIHwgXCJwZXJjZW50YWdlX29mZl9wcm9kdWN0XCJcbiAgfCBcInBlcmNlbnRhZ2Vfb2ZmX29yZGVyXCJcbiAgfCBcImJ1eV94X2dldF95XCJcbiAgfCBcImZyZWVfc2hpcHBpbmdcIlxudHlwZSBDb2RlU3RyYXRlZ3kgPSBcInVuaXF1ZV9jb2RlXCIgfCBcInNoYXJlZF9jb2RlXCJcbnR5cGUgTWlycm9yTW9kZSA9IFwibm9uZVwiIHwgXCJtYW51YWxcIiB8IFwiYXV0b1wiXG50eXBlIFByb21vdGlvblN0YXR1cyA9IFwiZHJhZnRcIiB8IFwiYWN0aXZlXCIgfCBcImluYWN0aXZlXCJcbnR5cGUgQ2FtcGFpZ25Nb2RlID0gXCJub25lXCIgfCBcImV4aXN0aW5nXCIgfCBcIm5ld1wiXG50eXBlIEV4cGlyYXRpb25Qb2xpY3lUeXBlID0gXCJub25lXCIgfCBcIm1vbnRoX2VuZFwiIHwgXCJkdXJhdGlvblwiIHwgXCJmaXhlZFwiXG50eXBlIEV4cGlyYXRpb25EdXJhdGlvblVuaXQgPSBcImRheXNcIiB8IFwibW9udGhzXCJcbnR5cGUgRXhwaXJhdGlvblRpbWVQb2xpY3kgPSBcImV4YWN0bHlcIiB8IFwiZGF5X2VuZFwiXG50eXBlIENvdXBvbkFsbG9jYXRpb24gPSBcImVhY2hcIiB8IFwib25jZVwiXG50eXBlIFdpemFyZFN0ZXAgPSBcImRldGFpbHNcIiB8IFwib3JnYW5pemVcIiB8IFwiY2FtcGFpZ25cIiB8IFwicHJpY2VzXCJcbnR5cGUgUHVyY2hhc2VDb25kaXRpb25BdHRyaWJ1dGUgPVxuICB8IFwiY3VzdG9tZXIuZ3JvdXBzLmlkXCJcbiAgfCBcInJlZ2lvbi5pZFwiXG4gIHwgXCJzaGlwcGluZ19hZGRyZXNzLmNvdW50cnlfY29kZVwiXG4gIHwgXCJzYWxlc19jaGFubmVsX2lkXCJcbiAgfCBcImN1cnJlbmN5X2NvZGVcIlxudHlwZSBQdXJjaGFzZUNvbmRpdGlvbk9wZXJhdG9yID0gXCJpblwiIHwgXCJlcVwiIHwgXCJuZVwiXG5cbnR5cGUgUHVyY2hhc2VDb25kaXRpb25Gb3JtID0ge1xuICBrZXk6IHN0cmluZ1xuICBhdHRyaWJ1dGU6IFB1cmNoYXNlQ29uZGl0aW9uQXR0cmlidXRlIHwgXCJcIlxuICBvcGVyYXRvcjogUHVyY2hhc2VDb25kaXRpb25PcGVyYXRvciB8IFwiXCJcbiAgdmFsdWVzOiBzdHJpbmdbXVxufVxuXG50eXBlIE9wdGlvblJlY29yZCA9IHtcbiAgaWQ6IHN0cmluZ1xuICBuYW1lPzogc3RyaW5nIHwgbnVsbFxuICB0aXRsZT86IHN0cmluZyB8IG51bGxcbiAgdmFsdWU/OiBzdHJpbmcgfCBudWxsXG4gIGhhbmRsZT86IHN0cmluZyB8IG51bGxcbiAgY2FtcGFpZ25faWRlbnRpZmllcj86IHN0cmluZyB8IG51bGxcbiAgZGlzcGxheV9uYW1lPzogc3RyaW5nIHwgbnVsbFxuICBpc29fMj86IHN0cmluZyB8IG51bGxcbn1cblxudHlwZSBDdXJyZW5jeU9wdGlvbiA9IHtcbiAgY29kZTogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBzeW1ib2w6IHN0cmluZ1xuICBzeW1ib2xfbmF0aXZlOiBzdHJpbmdcbiAgaXNfZGVmYXVsdDogYm9vbGVhblxuICBpc190YXhfaW5jbHVzaXZlPzogYm9vbGVhblxufVxuXG50eXBlIE9wdGlvbnNQYXlsb2FkID0ge1xuICBjdXJyZW5jaWVzPzogQ3VycmVuY3lPcHRpb25bXVxuICBwcm9kdWN0X3R5cGVzPzogT3B0aW9uUmVjb3JkW11cbiAgcHJvZHVjdF9jb2xsZWN0aW9ucz86IE9wdGlvblJlY29yZFtdXG4gIHByb2R1Y3RfY2F0ZWdvcmllcz86IE9wdGlvblJlY29yZFtdXG4gIHByb2R1Y3RfdGFncz86IE9wdGlvblJlY29yZFtdXG4gIHNhbGVzX2NoYW5uZWxzPzogT3B0aW9uUmVjb3JkW11cbiAgc2hpcHBpbmdfcHJvZmlsZXM/OiBPcHRpb25SZWNvcmRbXVxuICBjYW1wYWlnbnM/OiBPcHRpb25SZWNvcmRbXVxuICBzZWxsZXJzPzogT3B0aW9uUmVjb3JkW11cbiAgY3VzdG9tZXJfZ3JvdXBzPzogT3B0aW9uUmVjb3JkW11cbiAgcmVnaW9ucz86IE9wdGlvblJlY29yZFtdXG4gIGNvdW50cmllcz86IE9wdGlvblJlY29yZFtdXG59XG5cbnR5cGUgQ291cG9uUHJvZHVjdENvbmZpZyA9IHtcbiAgaWQ6IHN0cmluZ1xuICBlbmFibGVkOiBib29sZWFuXG4gIHByb2R1Y3RfaWQ6IHN0cmluZ1xuICBiZW5lZml0X3R5cGU6IEJlbmVmaXRUeXBlXG4gIHB1cmNoYXNlX2NvbmRpdGlvbnM/OiBBcnJheTx7XG4gICAgYXR0cmlidXRlOiBQdXJjaGFzZUNvbmRpdGlvbkF0dHJpYnV0ZVxuICAgIG9wZXJhdG9yOiBQdXJjaGFzZUNvbmRpdGlvbk9wZXJhdG9yXG4gICAgdmFsdWVzOiBzdHJpbmdbXVxuICB9PiB8IG51bGxcbiAgYW1vdW50cz86IHsgY3VycmVuY3lfY29kZTogc3RyaW5nOyBhbW91bnQ6IG51bWJlciB9W10gfCBudWxsXG4gIGFtb3VudDogbnVtYmVyIHwgbnVsbFxuICBwZXJjZW50YWdlOiBudW1iZXIgfCBudWxsXG4gIGN1cnJlbmN5X2NvZGU6IHN0cmluZyB8IG51bGxcbiAgY29kZV9zdHJhdGVneTogQ29kZVN0cmF0ZWd5XG4gIGNvZGVfcHJlZml4OiBzdHJpbmcgfCBudWxsXG4gIHNoYXJlZF9jb2RlOiBzdHJpbmcgfCBudWxsXG4gIGV4cGlyYXRpb25fcG9saWN5OlxuICB8IHsgdHlwZTogXCJub25lXCIgfVxuICB8IHtcbiAgICB0eXBlOiBcIm1vbnRoX2VuZFwiXG4gICAgdGltZV9wb2xpY3k6IEV4cGlyYXRpb25UaW1lUG9saWN5XG4gICAgY2FwX2J5X2NhbXBhaWduPzogYm9vbGVhblxuICAgIGNhcF9hdD86IHN0cmluZyB8IG51bGxcbiAgfVxuICB8IHtcbiAgICB0eXBlOiBcImR1cmF0aW9uXCJcbiAgICBkdXJhdGlvbjogbnVtYmVyXG4gICAgZHVyYXRpb25fZGF5cz86IG51bWJlclxuICAgIGR1cmF0aW9uX3VuaXQ6IEV4cGlyYXRpb25EdXJhdGlvblVuaXRcbiAgICB0aW1lX3BvbGljeTogRXhwaXJhdGlvblRpbWVQb2xpY3lcbiAgICBjYXBfYnlfY2FtcGFpZ24/OiBib29sZWFuXG4gICAgY2FwX2F0Pzogc3RyaW5nIHwgbnVsbFxuICB9XG4gIHwge1xuICAgIHR5cGU6IFwiZml4ZWRcIlxuICAgIGV4cGlyZXNfYXQ6IHN0cmluZ1xuICAgIGNhcF9ieV9jYW1wYWlnbj86IGJvb2xlYW5cbiAgICBjYXBfYXQ/OiBzdHJpbmcgfCBudWxsXG4gIH1cbiAgbWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtOiBudW1iZXJcbiAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiBNaXJyb3JNb2RlXG4gIHByb21vdGlvbl9zdGF0dXM/OiBQcm9tb3Rpb25TdGF0dXMgfCBudWxsXG4gIHByb21vdGlvbl90ZW1wbGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsXG4gIGNhbXBhaWduX2lkPzogc3RyaW5nIHwgbnVsbFxuICBjYW1wYWlnbl9zbmFwc2hvdD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxufVxuXG50eXBlIFByb2R1Y3RSZWNvcmQgPSB7XG4gIGlkOiBzdHJpbmdcbiAgdGl0bGU6IHN0cmluZyB8IG51bGxcbiAgc3VidGl0bGU/OiBzdHJpbmcgfCBudWxsXG4gIGhhbmRsZTogc3RyaW5nIHwgbnVsbFxuICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bGxcbiAgc3RhdHVzOiBzdHJpbmcgfCBudWxsXG4gIHRodW1ibmFpbDogc3RyaW5nIHwgbnVsbFxuICB0aHVtYm5haWxfYXNzZXRfaWQ/OiBzdHJpbmcgfCBudWxsXG4gIGltYWdlcz86IHsgaWQ/OiBzdHJpbmc7IHVybD86IHN0cmluZyB8IG51bGw7IGFzc2V0X2lkPzogc3RyaW5nIHwgbnVsbCB9W11cbiAgZGlzY291bnRhYmxlPzogYm9vbGVhblxuICB0eXBlX2lkPzogc3RyaW5nIHwgbnVsbFxuICBjb2xsZWN0aW9uX2lkPzogc3RyaW5nIHwgbnVsbFxuICBzaGlwcGluZ19wcm9maWxlX2lkPzogc3RyaW5nIHwgbnVsbFxuICB2YXJpYW50cz86IHtcbiAgICBpZDogc3RyaW5nXG4gICAgc2t1Pzogc3RyaW5nIHwgbnVsbFxuICAgIHByaWNlcz86IHsgY3VycmVuY3lfY29kZT86IHN0cmluZzsgYW1vdW50PzogbnVtYmVyIH1bXVxuICB9W11cbiAgY2F0ZWdvcmllcz86IHsgaWQ6IHN0cmluZyB9W11cbiAgdGFncz86IHsgaWQ6IHN0cmluZyB9W11cbiAgc2FsZXNfY2hhbm5lbHM/OiB7IGlkOiBzdHJpbmc7IG5hbWU/OiBzdHJpbmcgfCBudWxsIH1bXVxufVxuXG50eXBlIFByb2R1Y3RNZWRpYSA9IHtcbiAgdXJsOiBzdHJpbmdcbiAgYXNzZXRfaWQ/OiBzdHJpbmdcbn1cblxudHlwZSBDb3Vwb25Qcm9kdWN0Um93ID0ge1xuICBpZDogc3RyaW5nXG4gIHByb2R1Y3Q6IFByb2R1Y3RSZWNvcmRcbiAgY291cG9uX3Byb2R1Y3RfY29uZmlnOiBDb3Vwb25Qcm9kdWN0Q29uZmlnXG4gIGVudGl0bGVtZW50c19jb3VudDogbnVtYmVyXG59XG5cbnR5cGUgUHJvZHVjdEZvcm1TdGF0ZSA9IHtcbiAgdGl0bGU6IHN0cmluZ1xuICBzdWJ0aXRsZTogc3RyaW5nXG4gIGhhbmRsZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbiAgbWVkaWE6IFByb2R1Y3RNZWRpYVtdXG4gIHNrdTogc3RyaW5nXG4gIHByaWNlX2Ftb3VudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgc3RhdHVzOiBzdHJpbmdcbiAgZGlzY291bnRhYmxlOiBib29sZWFuXG4gIHNlbGxlcl9pZDogc3RyaW5nXG4gIHR5cGVfaWQ6IHN0cmluZ1xuICBjb2xsZWN0aW9uX2lkOiBzdHJpbmdcbiAgY2F0ZWdvcnlfaWQ6IHN0cmluZ1xuICB0YWdfaWQ6IHN0cmluZ1xufVxuXG50eXBlIENvdXBvbkZvcm1TdGF0ZSA9IHtcbiAgZW5hYmxlZDogYm9vbGVhblxuICB0eXBlOiBDb3Vwb25UeXBlXG4gIHB1cmNoYXNlX2NvbmRpdGlvbnM6IFB1cmNoYXNlQ29uZGl0aW9uRm9ybVtdXG4gIGFtb3VudHM6IENvdXBvbkFtb3VudEZvcm1Sb3dbXVxuICBwZXJjZW50YWdlOiBzdHJpbmdcbiAgYWxsb2NhdGlvbjogQ291cG9uQWxsb2NhdGlvblxuICBjb2RlX3N0cmF0ZWd5OiBDb2RlU3RyYXRlZ3lcbiAgY29kZV9wcmVmaXg6IHN0cmluZ1xuICBzaGFyZWRfY29kZTogc3RyaW5nXG4gIGV4cGlyYXRpb25fdHlwZTogRXhwaXJhdGlvblBvbGljeVR5cGVcbiAgZXhwaXJhdGlvbl9kdXJhdGlvbjogc3RyaW5nXG4gIGV4cGlyYXRpb25fZHVyYXRpb25fdW5pdDogRXhwaXJhdGlvbkR1cmF0aW9uVW5pdFxuICBleHBpcmF0aW9uX3RpbWVfcG9saWN5OiBFeHBpcmF0aW9uVGltZVBvbGljeVxuICBleHBpcmF0aW9uX2RhdGU6IHN0cmluZ1xuICBleHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbjogYm9vbGVhblxuICBleHBpcmF0aW9uX2NhcF9hdDogc3RyaW5nXG4gIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTogc3RyaW5nXG4gIHByb21vdGlvbl9taXJyb3JfbW9kZTogTWlycm9yTW9kZVxuICBwcm9tb3Rpb25fc3RhdHVzOiBQcm9tb3Rpb25TdGF0dXNcbn1cblxudHlwZSBDb3Vwb25BbW91bnRGb3JtUm93ID0ge1xuICBrZXk6IHN0cmluZ1xuICBjdXJyZW5jeV9jb2RlOiBzdHJpbmdcbiAgYW1vdW50OiBzdHJpbmdcbn1cblxudHlwZSBDYW1wYWlnbkZvcm1TdGF0ZSA9IHtcbiAgbW9kZTogQ2FtcGFpZ25Nb2RlXG4gIGNhbXBhaWduX2lkOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIGNhbXBhaWduX2lkZW50aWZpZXI6IHN0cmluZ1xuICBzdGFydHNfYXQ6IHN0cmluZ1xuICBlbmRzX2F0OiBzdHJpbmdcbn1cblxuY29uc3QgTk9ORSA9IFwiX19ub25lX19cIlxuY29uc3QgYWxsU3RlcHM6IFdpemFyZFN0ZXBbXSA9IFtcImRldGFpbHNcIiwgXCJvcmdhbml6ZVwiLCBcImNhbXBhaWduXCIsIFwicHJpY2VzXCJdXG5cbmNvbnN0IGNvbmRpdGlvbkF0dHJpYnV0ZXM6IEFycmF5PHtcbiAgdmFsdWU6IFB1cmNoYXNlQ29uZGl0aW9uQXR0cmlidXRlXG4gIGxhYmVsOiBzdHJpbmdcbn0+ID0gW1xuICB7IHZhbHVlOiBcImN1c3RvbWVyLmdyb3Vwcy5pZFwiLCBsYWJlbDogXCJDdXN0b21lciBHcm91cFwiIH0sXG4gIHsgdmFsdWU6IFwicmVnaW9uLmlkXCIsIGxhYmVsOiBcIlJlZ2lvblwiIH0sXG4gIHsgdmFsdWU6IFwic2hpcHBpbmdfYWRkcmVzcy5jb3VudHJ5X2NvZGVcIiwgbGFiZWw6IFwiQ291bnRyeVwiIH0sXG4gIHsgdmFsdWU6IFwic2FsZXNfY2hhbm5lbF9pZFwiLCBsYWJlbDogXCJTYWxlcyBDaGFubmVsXCIgfSxcbiAgeyB2YWx1ZTogXCJjdXJyZW5jeV9jb2RlXCIsIGxhYmVsOiBcIkN1cnJlbmN5IENvZGVcIiB9LFxuXVxuXG5jb25zdCBjb25kaXRpb25PcGVyYXRvcnM6IEFycmF5PHtcbiAgdmFsdWU6IFB1cmNoYXNlQ29uZGl0aW9uT3BlcmF0b3JcbiAgbGFiZWw6IHN0cmluZ1xufT4gPSBbXG4gIHsgdmFsdWU6IFwiaW5cIiwgbGFiZWw6IFwiSW5cIiB9LFxuICB7IHZhbHVlOiBcImVxXCIsIGxhYmVsOiBcIkVxdWFsc1wiIH0sXG4gIHsgdmFsdWU6IFwibmVcIiwgbGFiZWw6IFwiTm90IEluXCIgfSxcbl1cblxuZXhwb3J0IGNvbnN0IHR5cGVDaG9pY2VzOiB7XG4gIHZhbHVlOiBDb3Vwb25UeXBlXG4gIGxhYmVsOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xufVtdID0gW1xuICAgIHtcbiAgICAgIHZhbHVlOiBcImFtb3VudF9vZmZfcHJvZHVjdHNcIixcbiAgICAgIGxhYmVsOiBcIkFtb3VudCBvZmYgcHJvZHVjdHNcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkRpc2NvdW50IHNwZWNpZmljIHByb2R1Y3RzIG9yIGEgY29sbGVjdGlvbiBvZiBwcm9kdWN0c1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6IFwiYW1vdW50X29mZl9vcmRlclwiLFxuICAgICAgbGFiZWw6IFwiQW1vdW50IG9mZiBvcmRlclwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiRGlzY291bnQgdGhlIHRvdGFsIG9yZGVyIGFtb3VudFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6IFwicGVyY2VudGFnZV9vZmZfcHJvZHVjdFwiLFxuICAgICAgbGFiZWw6IFwiUGVyY2VudGFnZSBvZmYgcHJvZHVjdFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiRGlzY291bnQgYSBwZXJjZW50YWdlIG9mZiBzZWxlY3RlZCBwcm9kdWN0c1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6IFwicGVyY2VudGFnZV9vZmZfb3JkZXJcIixcbiAgICAgIGxhYmVsOiBcIlBlcmNlbnRhZ2Ugb2ZmIG9yZGVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJEaXNjb3VudCBhIHBlcmNlbnRhZ2Ugb2ZmIHRoZSB0b3RhbCBvcmRlciBhbW91bnRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiBcImJ1eV94X2dldF95XCIsXG4gICAgICBsYWJlbDogXCJCdXkgWCBHZXQgWVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiSXNzdWUgYSBCdXkgWCBHZXQgWSBjb3Vwb24gZW50aXRsZW1lbnRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiBcImZyZWVfc2hpcHBpbmdcIixcbiAgICAgIGxhYmVsOiBcIkZyZWUgc2hpcHBpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFwcGx5IGEgMTAwJSBkaXNjb3VudCB0byBzaGlwcGluZyBmZWVzXCIsXG4gICAgfSxcbiAgXVxuXG5jb25zdCBzdGF0dXNDaG9pY2VzOiB7XG4gIHZhbHVlOiBQcm9tb3Rpb25TdGF0dXNcbiAgbGFiZWw6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG59W10gPSBbXG4gICAge1xuICAgICAgdmFsdWU6IFwiZHJhZnRcIixcbiAgICAgIGxhYmVsOiBcIkRyYWZ0XCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJDdXN0b21lcnMgd2lsbCBub3QgYmUgYWJsZSB0byB1c2UgdGhlIGNvZGUgeWV0XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogXCJhY3RpdmVcIixcbiAgICAgIGxhYmVsOiBcIkFjdGl2ZVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQ3VzdG9tZXJzIHdpbGwgYmUgYWJsZSB0byB1c2UgdGhlIGNvZGVcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiBcImluYWN0aXZlXCIsXG4gICAgICBsYWJlbDogXCJJbmFjdGl2ZVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiS2VlcCB0aGUgcHJvbW90aW9uIHVuYXZhaWxhYmxlIHVudGlsIHJlYWN0aXZhdGVkXCIsXG4gICAgfSxcbiAgXVxuXG5mdW5jdGlvbiBiYWNrZW5kVXJsKCkge1xuICByZXR1cm4gdHlwZW9mIF9fQkFDS0VORF9VUkxfXyA9PT0gXCJzdHJpbmdcIlxuICAgID8gX19CQUNLRU5EX1VSTF9fLnJlcGxhY2UoL1xcLyQvLCBcIlwiKVxuICAgIDogXCJcIlxufVxuXG5mdW5jdGlvbiBhcGlFcnJvck1lc3NhZ2UocGF5bG9hZDogYW55LCBmYWxsYmFjazogc3RyaW5nKSB7XG4gIHJldHVybiAoXG4gICAgW3BheWxvYWQ/Lm1lc3NhZ2UsIHBheWxvYWQ/LmVycm9yPy5tZXNzYWdlLCBwYXlsb2FkPy5lcnJvcl0uZmluZChcbiAgICAgIChjYW5kaWRhdGUpID0+IHR5cGVvZiBjYW5kaWRhdGUgPT09IFwic3RyaW5nXCIgJiYgY2FuZGlkYXRlLnRyaW0oKSxcbiAgICApIHx8XG4gICAgZmFsbGJhY2sgfHxcbiAgICBcIlJlcXVlc3QgZmFpbGVkXCJcbiAgKVxufVxuXG5hc3luYyBmdW5jdGlvbiBhcGlGZXRjaDxUPihcbiAgcGF0aDogc3RyaW5nLFxuICBvcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHt9LFxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YmFja2VuZFVybCgpfSR7cGF0aH1gLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uKG9wdGlvbnMuYm9keSA/IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSA6IHt9KSxcbiAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICB9LFxuICB9KVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+IG51bGwpXG4gICAgdGhyb3cgbmV3IEVycm9yKGFwaUVycm9yTWVzc2FnZShwYXlsb2FkLCByZXNwb25zZS5zdGF0dXNUZXh0KSlcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZS5qc29uKClcbn1cblxuZnVuY3Rpb24gb3B0aW9uTGFiZWwob3B0aW9uOiBPcHRpb25SZWNvcmQpIHtcbiAgcmV0dXJuIChcbiAgICBvcHRpb24ubmFtZSB8fCBvcHRpb24udGl0bGUgfHwgb3B0aW9uLnZhbHVlIHx8IG9wdGlvbi5oYW5kbGUgfHwgb3B0aW9uLmlkXG4gIClcbn1cblxuZnVuY3Rpb24gbnVtYmVyT3JOdWxsKHZhbHVlOiBzdHJpbmcpIHtcbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlKVxuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgJiYgcGFyc2VkID4gMCA/IHBhcnNlZCA6IG51bGxcbn1cblxuZnVuY3Rpb24gbm9uTmVnYXRpdmVOdW1iZXJPck51bGwodmFsdWU6IHN0cmluZykge1xuICBpZiAoIXZhbHVlLnRyaW0oKSkgcmV0dXJuIG51bGxcbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlKVxuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgJiYgcGFyc2VkID49IDAgPyBwYXJzZWQgOiBudWxsXG59XG5cbmZ1bmN0aW9uIHRvRGF0ZVRpbWVMb2NhbCh2YWx1ZT86IHN0cmluZyB8IG51bGwpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiXCJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKVxuICBpZiAoTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgcmV0dXJuIFwiXCJcbiAgY29uc3QgbG9jYWxEYXRlID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MF8wMDApXG4gIHJldHVybiBsb2NhbERhdGUudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxNilcbn1cblxuZnVuY3Rpb24gY3VycmVuY3lEZWNpbWFsRGlnaXRzKGNvZGU6IHN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXCJlblwiLCB7XG4gICAgICBzdHlsZTogXCJjdXJyZW5jeVwiLFxuICAgICAgY3VycmVuY3k6IGNvZGUudG9VcHBlckNhc2UoKSxcbiAgICB9KS5yZXNvbHZlZE9wdGlvbnMoKS5tYXhpbXVtRnJhY3Rpb25EaWdpdHNcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIDJcbiAgfVxufVxuXG5mdW5jdGlvbiBjdXJyZW5jeVN5bWJvbChjb2RlOiBzdHJpbmcpIHtcbiAgaWYgKCFjb2RlKSByZXR1cm4gXCJcIlxuICB0cnkge1xuICAgIHJldHVybiAoXG4gICAgICBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXCJlblwiLCB7XG4gICAgICAgIHN0eWxlOiBcImN1cnJlbmN5XCIsXG4gICAgICAgIGN1cnJlbmN5OiBjb2RlLnRvVXBwZXJDYXNlKCksXG4gICAgICAgIGN1cnJlbmN5RGlzcGxheTogXCJuYXJyb3dTeW1ib2xcIixcbiAgICAgIH0pXG4gICAgICAgIC5mb3JtYXRUb1BhcnRzKDApXG4gICAgICAgIC5maW5kKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09IFwiY3VycmVuY3lcIik/LnZhbHVlIHx8IGNvZGUudG9VcHBlckNhc2UoKVxuICAgIClcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGNvZGUudG9VcHBlckNhc2UoKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3Vwb25UeXBlRnJvbUNvbmZpZyhjb25maWc6IENvdXBvblByb2R1Y3RDb25maWcpOiBDb3Vwb25UeXBlIHtcbiAgaWYgKGNvbmZpZy5iZW5lZml0X3R5cGUgPT09IFwicGVyY2VudGFnZVwiKSB7XG4gICAgcmV0dXJuIGNvbmZpZy5wcm9tb3Rpb25fdGVtcGxhdGU/LmFwcGxpY2F0aW9uX21ldGhvZD8udGFyZ2V0X3R5cGUgPT09IFwib3JkZXJcIlxuICAgICAgPyBcInBlcmNlbnRhZ2Vfb2ZmX29yZGVyXCJcbiAgICAgIDogXCJwZXJjZW50YWdlX29mZl9wcm9kdWN0XCJcbiAgfVxuICBpZiAoY29uZmlnLmJlbmVmaXRfdHlwZSA9PT0gXCJidXlfZ2V0XCIpIHJldHVybiBcImJ1eV94X2dldF95XCJcbiAgaWYgKGNvbmZpZy5iZW5lZml0X3R5cGUgPT09IFwiZnJlZV9zaGlwcGluZ1wiKSByZXR1cm4gXCJmcmVlX3NoaXBwaW5nXCJcblxuICByZXR1cm4gY29uZmlnLnByb21vdGlvbl90ZW1wbGF0ZT8uYXBwbGljYXRpb25fbWV0aG9kPy50YXJnZXRfdHlwZSA9PT0gXCJvcmRlclwiXG4gICAgPyBcImFtb3VudF9vZmZfb3JkZXJcIlxuICAgIDogXCJhbW91bnRfb2ZmX3Byb2R1Y3RzXCJcbn1cblxuZnVuY3Rpb24gYmVuZWZpdFR5cGVGcm9tQ291cG9uVHlwZSh0eXBlOiBDb3Vwb25UeXBlKTogQmVuZWZpdFR5cGUge1xuICBpZiAoXG4gICAgdHlwZSA9PT0gXCJwZXJjZW50YWdlX29mZl9wcm9kdWN0XCIgfHxcbiAgICB0eXBlID09PSBcInBlcmNlbnRhZ2Vfb2ZmX29yZGVyXCJcbiAgKSByZXR1cm4gXCJwZXJjZW50YWdlXCJcbiAgaWYgKHR5cGUgPT09IFwiYnV5X3hfZ2V0X3lcIikgcmV0dXJuIFwiYnV5X2dldFwiXG4gIGlmICh0eXBlID09PSBcImZyZWVfc2hpcHBpbmdcIikgcmV0dXJuIFwiZnJlZV9zaGlwcGluZ1wiXG4gIHJldHVybiBcImZpeGVkX2Ftb3VudFwiXG59XG5cbmZ1bmN0aW9uIGNvdXBvblR5cGVMYWJlbChjb25maWc6IENvdXBvblByb2R1Y3RDb25maWcpIHtcbiAgcmV0dXJuIHR5cGVDaG9pY2VzLmZpbmQoXG4gICAgKGNob2ljZSkgPT4gY2hvaWNlLnZhbHVlID09PSBjb3Vwb25UeXBlRnJvbUNvbmZpZyhjb25maWcpLFxuICApPy5sYWJlbFxufVxuXG5mdW5jdGlvbiBjb3Vwb25TdGF0dXNDb2xvcihzdGF0dXM/OiBQcm9tb3Rpb25TdGF0dXMgfCBudWxsKSB7XG4gIGlmIChzdGF0dXMgPT09IFwiYWN0aXZlXCIpIHJldHVybiBcImdyZWVuXCIgYXMgY29uc3RcbiAgaWYgKHN0YXR1cyA9PT0gXCJpbmFjdGl2ZVwiKSByZXR1cm4gXCJvcmFuZ2VcIiBhcyBjb25zdFxuICByZXR1cm4gXCJncmV5XCIgYXMgY29uc3Rcbn1cblxuZnVuY3Rpb24gcHJvZHVjdFN0YXR1c0Zyb21Db3Vwb25TdGF0dXMoc3RhdHVzOiBQcm9tb3Rpb25TdGF0dXMpIHtcbiAgcmV0dXJuIHN0YXR1cyA9PT0gXCJhY3RpdmVcIiA/IFwicHVibGlzaGVkXCIgOiBcImRyYWZ0XCJcbn1cblxuZnVuY3Rpb24gY2FtcGFpZ25MYWJlbChjb25maWc6IENvdXBvblByb2R1Y3RDb25maWcpIHtcbiAgY29uc3QgbmFtZSA9IGNvbmZpZy5jYW1wYWlnbl9zbmFwc2hvdD8ubmFtZVxuICByZXR1cm4gdHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIgJiYgbmFtZSA/IG5hbWUgOiBjb25maWcuY2FtcGFpZ25faWQgfHwgXCJOb25lXCJcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEN1cnJlbmN5KG9wdGlvbnM6IE9wdGlvbnNQYXlsb2FkKSB7XG4gIHJldHVybiAoXG4gICAgb3B0aW9ucy5jdXJyZW5jaWVzPy5maW5kKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuaXNfZGVmYXVsdCk/LmNvZGUgfHxcbiAgICBvcHRpb25zLmN1cnJlbmNpZXM/LlswXT8uY29kZSB8fFxuICAgIFwiXCJcbiAgKVxufVxuXG5mdW5jdGlvbiBjb25kaXRpb25LZXkocHJlZml4ID0gXCJjb25kaXRpb25cIikge1xuICByZXR1cm4gYCR7cHJlZml4fS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgOCl9YFxufVxuXG5mdW5jdGlvbiBpc0Ftb3VudENvdXBvblR5cGUodHlwZTogQ291cG9uVHlwZSkge1xuICByZXR1cm4gdHlwZSA9PT0gXCJhbW91bnRfb2ZmX3Byb2R1Y3RzXCIgfHwgdHlwZSA9PT0gXCJhbW91bnRfb2ZmX29yZGVyXCJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVmZmVjdGl2ZUNvdXBvbkN1cnJlbmNpZXMoXG4gIGNvbmRpdGlvbnM6IFB1cmNoYXNlQ29uZGl0aW9uRm9ybVtdLFxuICBjdXJyZW5jaWVzOiBDdXJyZW5jeU9wdGlvbltdLFxuKSB7XG4gIGNvbnN0IGNvbmRpdGlvbiA9IGNvbmRpdGlvbnMuZmluZChcbiAgICAoaXRlbSkgPT4gaXRlbS5hdHRyaWJ1dGUgPT09IFwiY3VycmVuY3lfY29kZVwiLFxuICApXG4gIGlmICghY29uZGl0aW9uIHx8ICFjb25kaXRpb24ub3BlcmF0b3IpIHJldHVybiBbXVxuICBjb25zdCBzZWxlY3RlZCA9IG5ldyBTZXQoY29uZGl0aW9uLnZhbHVlcylcbiAgY29uc3Qgc3VwcG9ydGVkID0gY3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiBjdXJyZW5jeS5jb2RlKVxuXG4gIHJldHVybiBjb25kaXRpb24ub3BlcmF0b3IgPT09IFwibmVcIlxuICAgID8gc3VwcG9ydGVkLmZpbHRlcigoY29kZSkgPT4gIXNlbGVjdGVkLmhhcyhjb2RlKSlcbiAgICA6IHN1cHBvcnRlZC5maWx0ZXIoKGNvZGUpID0+IHNlbGVjdGVkLmhhcyhjb2RlKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY29uY2lsZUNvdXBvbkFtb3VudHMoXG4gIGN1cnJlbnQ6IENvdXBvbkFtb3VudEZvcm1Sb3dbXSxcbiAgY3VycmVuY3lDb2Rlczogc3RyaW5nW10sXG4pIHtcbiAgY29uc3QgYnlDdXJyZW5jeSA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBjdXJyZW50Lm1hcCgocm93KSA9PiBbcm93LmN1cnJlbmN5X2NvZGUsIHJvd10pLFxuICApXG4gIHJldHVybiBjdXJyZW5jeUNvZGVzLm1hcCgoY3VycmVuY3lDb2RlKSA9PiAoe1xuICAgIGtleTogYnlDdXJyZW5jeVtjdXJyZW5jeUNvZGVdPy5rZXkgfHwgY29uZGl0aW9uS2V5KFwiY291cG9uLXZhbHVlXCIpLFxuICAgIGN1cnJlbmN5X2NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICBhbW91bnQ6IGJ5Q3VycmVuY3lbY3VycmVuY3lDb2RlXT8uYW1vdW50IHx8IFwiXCIsXG4gIH0pKVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHVyY2hhc2VDb25kaXRpb25zKG9wdGlvbnM6IE9wdGlvbnNQYXlsb2FkKSB7XG4gIGNvbnN0IGN1cnJlbmN5Q29kZSA9IGRlZmF1bHRDdXJyZW5jeShvcHRpb25zKVxuICByZXR1cm4gY3VycmVuY3lDb2RlXG4gICAgPyBbXG4gICAgICB7XG4gICAgICAgIGtleTogY29uZGl0aW9uS2V5KFwiY3VycmVuY3lcIiksXG4gICAgICAgIGF0dHJpYnV0ZTogXCJjdXJyZW5jeV9jb2RlXCIgYXMgY29uc3QsXG4gICAgICAgIG9wZXJhdG9yOiBcImVxXCIgYXMgY29uc3QsXG4gICAgICAgIHZhbHVlczogW2N1cnJlbmN5Q29kZV0sXG4gICAgICB9LFxuICAgIF1cbiAgICA6IFtdXG59XG5cbmZ1bmN0aW9uIGVtcHR5UHJvZHVjdChvcHRpb25zOiBPcHRpb25zUGF5bG9hZCk6IFByb2R1Y3RGb3JtU3RhdGUge1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiBcIlwiLFxuICAgIHN1YnRpdGxlOiBcIlwiLFxuICAgIGhhbmRsZTogXCJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICBtZWRpYTogW10sXG4gICAgc2t1OiBcIlwiLFxuICAgIHByaWNlX2Ftb3VudHM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIChvcHRpb25zLmN1cnJlbmNpZXMgfHwgW10pLm1hcCgoY3VycmVuY3kpID0+IFtjdXJyZW5jeS5jb2RlLCBcIlwiXSksXG4gICAgKSxcbiAgICBzdGF0dXM6IFwiZHJhZnRcIixcbiAgICBkaXNjb3VudGFibGU6IGZhbHNlLFxuICAgIHNlbGxlcl9pZDogXCJcIixcbiAgICB0eXBlX2lkOiBcIlwiLFxuICAgIGNvbGxlY3Rpb25faWQ6IFwiXCIsXG4gICAgY2F0ZWdvcnlfaWQ6IFwiXCIsXG4gICAgdGFnX2lkOiBcIlwiLFxuICB9XG59XG5cbmZ1bmN0aW9uIGVtcHR5Q291cG9uKG9wdGlvbnM6IE9wdGlvbnNQYXlsb2FkKTogQ291cG9uRm9ybVN0YXRlIHtcbiAgY29uc3QgY3VycmVuY3lDb2RlID0gZGVmYXVsdEN1cnJlbmN5KG9wdGlvbnMpXG4gIGNvbnN0IHB1cmNoYXNlQ29uZGl0aW9ucyA9IGRlZmF1bHRQdXJjaGFzZUNvbmRpdGlvbnMob3B0aW9ucylcbiAgcmV0dXJuIHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIHR5cGU6IFwiYW1vdW50X29mZl9wcm9kdWN0c1wiLFxuICAgIHB1cmNoYXNlX2NvbmRpdGlvbnM6IHB1cmNoYXNlQ29uZGl0aW9ucyxcbiAgICBhbW91bnRzOiBjdXJyZW5jeUNvZGVcbiAgICAgID8gW1xuICAgICAgICB7XG4gICAgICAgICAga2V5OiBcImNvdXBvbi12YWx1ZS1kZWZhdWx0XCIsXG4gICAgICAgICAgY3VycmVuY3lfY29kZTogY3VycmVuY3lDb2RlLFxuICAgICAgICAgIGFtb3VudDogXCJcIixcbiAgICAgICAgfSxcbiAgICAgIF1cbiAgICAgIDogW10sXG4gICAgcGVyY2VudGFnZTogXCJcIixcbiAgICBhbGxvY2F0aW9uOiBcImVhY2hcIixcbiAgICBjb2RlX3N0cmF0ZWd5OiBcInVuaXF1ZV9jb2RlXCIsXG4gICAgY29kZV9wcmVmaXg6IFwiQ09VUE9OXCIsXG4gICAgc2hhcmVkX2NvZGU6IFwiXCIsXG4gICAgZXhwaXJhdGlvbl90eXBlOiBcImR1cmF0aW9uXCIsXG4gICAgZXhwaXJhdGlvbl9kdXJhdGlvbjogXCIzMFwiLFxuICAgIGV4cGlyYXRpb25fZHVyYXRpb25fdW5pdDogXCJkYXlzXCIsXG4gICAgZXhwaXJhdGlvbl90aW1lX3BvbGljeTogXCJkYXlfZW5kXCIsXG4gICAgZXhwaXJhdGlvbl9kYXRlOiBcIlwiLFxuICAgIGV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduOiB0cnVlLFxuICAgIGV4cGlyYXRpb25fY2FwX2F0OiBcIlwiLFxuICAgIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTogXCIxXCIsXG4gICAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiBcIm5vbmVcIixcbiAgICBwcm9tb3Rpb25fc3RhdHVzOiBcImRyYWZ0XCIsXG4gIH1cbn1cblxuY29uc3QgZW1wdHlDYW1wYWlnbjogQ2FtcGFpZ25Gb3JtU3RhdGUgPSB7XG4gIG1vZGU6IFwibm9uZVwiLFxuICBjYW1wYWlnbl9pZDogXCJcIixcbiAgbmFtZTogXCJcIixcbiAgY2FtcGFpZ25faWRlbnRpZmllcjogXCJcIixcbiAgc3RhcnRzX2F0OiBcIlwiLFxuICBlbmRzX2F0OiBcIlwiLFxufVxuXG5mdW5jdGlvbiBmb3Jtc0Zyb21Sb3coXG4gIHJvdzogQ291cG9uUHJvZHVjdFJvdyxcbiAgb3B0aW9uczogT3B0aW9uc1BheWxvYWQsXG4pOiB7XG4gIHByb2R1Y3Q6IFByb2R1Y3RGb3JtU3RhdGVcbiAgY291cG9uOiBDb3Vwb25Gb3JtU3RhdGVcbiAgY2FtcGFpZ246IENhbXBhaWduRm9ybVN0YXRlXG59IHtcbiAgY29uc3QgcHJvZHVjdCA9IHJvdy5wcm9kdWN0XG4gIGNvbnN0IGNvbmZpZyA9IHJvdy5jb3Vwb25fcHJvZHVjdF9jb25maWdcbiAgY29uc3QgdmFyaWFudCA9IHByb2R1Y3QudmFyaWFudHM/LlswXVxuICBjb25zdCBwcmljZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgKHZhcmlhbnQ/LnByaWNlcyB8fCBbXSlcbiAgICAgIC5maWx0ZXIoKHByaWNlKSA9PiBwcmljZS5jdXJyZW5jeV9jb2RlKVxuICAgICAgLm1hcCgocHJpY2UpID0+IFtcbiAgICAgICAgU3RyaW5nKHByaWNlLmN1cnJlbmN5X2NvZGUpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHByaWNlLmFtb3VudCA9PSBudWxsID8gXCJcIiA6IFN0cmluZyhwcmljZS5hbW91bnQpLFxuICAgICAgXSksXG4gIClcbiAgY29uc3QgbWVkaWEgPSBBcnJheS5mcm9tKFxuICAgIG5ldyBNYXAoXG4gICAgICBbXG4gICAgICAgIC4uLihwcm9kdWN0LnRodW1ibmFpbFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdXJsOiBwcm9kdWN0LnRodW1ibmFpbCxcbiAgICAgICAgICAgICAgICBhc3NldF9pZDogcHJvZHVjdC50aHVtYm5haWxfYXNzZXRfaWQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW10pLFxuICAgICAgICAuLi4ocHJvZHVjdC5pbWFnZXMgfHwgW10pXG4gICAgICAgICAgLmZpbHRlcigoaW1hZ2UpID0+IGltYWdlLnVybClcbiAgICAgICAgICAubWFwKChpbWFnZSkgPT4gKHtcbiAgICAgICAgICAgIHVybDogU3RyaW5nKGltYWdlLnVybCksXG4gICAgICAgICAgICBhc3NldF9pZDogaW1hZ2UuYXNzZXRfaWQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIH0pKSxcbiAgICAgIF0ubWFwKChpdGVtKSA9PiBbaXRlbS51cmwsIGl0ZW1dKSxcbiAgICApLnZhbHVlcygpLFxuICApXG4gIGNvbnN0IGNvbmZpZ3VyZWRBbW91bnRzID1cbiAgICBBcnJheS5pc0FycmF5KGNvbmZpZy5hbW91bnRzKSAmJiBjb25maWcuYW1vdW50cy5sZW5ndGhcbiAgICAgID8gY29uZmlnLmFtb3VudHNcbiAgICAgIDogY29uZmlnLmFtb3VudCAhPSBudWxsICYmIGNvbmZpZy5jdXJyZW5jeV9jb2RlXG4gICAgICAgID8gW3sgYW1vdW50OiBjb25maWcuYW1vdW50LCBjdXJyZW5jeV9jb2RlOiBjb25maWcuY3VycmVuY3lfY29kZSB9XVxuICAgICAgICA6IFtdXG4gIGNvbnN0IGNvbmZpZ3VyZWRDb25kaXRpb25zID0gKGNvbmZpZy5wdXJjaGFzZV9jb25kaXRpb25zIHx8IFtdKS5tYXAoXG4gICAgKGNvbmRpdGlvbiwgaW5kZXgpID0+ICh7XG4gICAgICBrZXk6IGBjb25kaXRpb24tJHtpbmRleH1gLFxuICAgICAgYXR0cmlidXRlOiBjb25kaXRpb24uYXR0cmlidXRlLFxuICAgICAgb3BlcmF0b3I6IGNvbmRpdGlvbi5vcGVyYXRvcixcbiAgICAgIHZhbHVlczogY29uZGl0aW9uLnZhbHVlcy5tYXAoKHZhbHVlKSA9PlxuICAgICAgICBjb25kaXRpb24uYXR0cmlidXRlID09PSBcImN1cnJlbmN5X2NvZGVcIiB8fFxuICAgICAgICAgIGNvbmRpdGlvbi5hdHRyaWJ1dGUgPT09IFwic2hpcHBpbmdfYWRkcmVzcy5jb3VudHJ5X2NvZGVcIlxuICAgICAgICAgID8gdmFsdWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIDogdmFsdWUsXG4gICAgICApLFxuICAgIH0pLFxuICApXG4gIGlmIChcbiAgICAhY29uZmlndXJlZENvbmRpdGlvbnMuc29tZShcbiAgICAgIChjb25kaXRpb24pID0+IGNvbmRpdGlvbi5hdHRyaWJ1dGUgPT09IFwiY3VycmVuY3lfY29kZVwiLFxuICAgICkgJiZcbiAgICBjb25maWcuYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiICYmXG4gICAgY29uZmlndXJlZEFtb3VudHMubGVuZ3RoXG4gICkge1xuICAgIGNvbmZpZ3VyZWRDb25kaXRpb25zLnB1c2goe1xuICAgICAga2V5OiBcImNvbmRpdGlvbi1sZWdhY3ktY3VycmVuY3lcIixcbiAgICAgIGF0dHJpYnV0ZTogXCJjdXJyZW5jeV9jb2RlXCIsXG4gICAgICBvcGVyYXRvcjogY29uZmlndXJlZEFtb3VudHMubGVuZ3RoID09PSAxID8gXCJlcVwiIDogXCJpblwiLFxuICAgICAgdmFsdWVzOiBjb25maWd1cmVkQW1vdW50cy5tYXAoKGFtb3VudCkgPT5cbiAgICAgICAgYW1vdW50LmN1cnJlbmN5X2NvZGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICksXG4gICAgfSlcbiAgfVxuICBpZiAoXG4gICAgIWNvbmZpZ3VyZWRDb25kaXRpb25zLnNvbWUoXG4gICAgICAoY29uZGl0aW9uKSA9PiBjb25kaXRpb24uYXR0cmlidXRlID09PSBcInNhbGVzX2NoYW5uZWxfaWRcIixcbiAgICApICYmXG4gICAgcHJvZHVjdC5zYWxlc19jaGFubmVscz8ubGVuZ3RoXG4gICkge1xuICAgIGNvbmZpZ3VyZWRDb25kaXRpb25zLnB1c2goe1xuICAgICAga2V5OiBcImNvbmRpdGlvbi1sZWdhY3ktc2FsZXMtY2hhbm5lbFwiLFxuICAgICAgYXR0cmlidXRlOiBcInNhbGVzX2NoYW5uZWxfaWRcIixcbiAgICAgIG9wZXJhdG9yOiBwcm9kdWN0LnNhbGVzX2NoYW5uZWxzLmxlbmd0aCA9PT0gMSA/IFwiZXFcIiA6IFwiaW5cIixcbiAgICAgIHZhbHVlczogcHJvZHVjdC5zYWxlc19jaGFubmVscy5tYXAoKGNoYW5uZWwpID0+IGNoYW5uZWwuaWQpLFxuICAgIH0pXG4gIH1cbiAgY29uc3QgZXhwaXJhdGlvblBvbGljeSA9IGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeVxuICBjb25zdCBjb25maWd1cmVkQW1vdW50Um93cyA9IGNvbmZpZ3VyZWRBbW91bnRzLm1hcCgocm93LCBpbmRleCkgPT4gKHtcbiAgICBrZXk6IGBjb3Vwb24tdmFsdWUtJHtpbmRleH1gLFxuICAgIGFtb3VudDogU3RyaW5nKHJvdy5hbW91bnQpLFxuICAgIGN1cnJlbmN5X2NvZGU6IHJvdy5jdXJyZW5jeV9jb2RlLnRvTG93ZXJDYXNlKCksXG4gIH0pKVxuICBjb25zdCBhbW91bnRSb3dzID1cbiAgICBjb25maWcuYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiXG4gICAgICA/IHJlY29uY2lsZUNvdXBvbkFtb3VudHMoXG4gICAgICAgIGNvbmZpZ3VyZWRBbW91bnRSb3dzLFxuICAgICAgICBlZmZlY3RpdmVDb3Vwb25DdXJyZW5jaWVzKGNvbmZpZ3VyZWRDb25kaXRpb25zLCBvcHRpb25zLmN1cnJlbmNpZXMgfHwgW10pLFxuICAgICAgKVxuICAgICAgOiBjb25maWd1cmVkQW1vdW50Um93c1xuXG4gIHJldHVybiB7XG4gICAgcHJvZHVjdDoge1xuICAgICAgLi4uZW1wdHlQcm9kdWN0KG9wdGlvbnMpLFxuICAgICAgdGl0bGU6IHByb2R1Y3QudGl0bGUgfHwgXCJcIixcbiAgICAgIHN1YnRpdGxlOiBwcm9kdWN0LnN1YnRpdGxlIHx8IFwiXCIsXG4gICAgICBoYW5kbGU6IHByb2R1Y3QuaGFuZGxlIHx8IFwiXCIsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvZHVjdC5kZXNjcmlwdGlvbiB8fCBcIlwiLFxuICAgICAgbWVkaWEsXG4gICAgICBza3U6IHZhcmlhbnQ/LnNrdSB8fCBcIlwiLFxuICAgICAgcHJpY2VfYW1vdW50czoge1xuICAgICAgICAuLi5lbXB0eVByb2R1Y3Qob3B0aW9ucykucHJpY2VfYW1vdW50cyxcbiAgICAgICAgLi4ucHJpY2VzLFxuICAgICAgfSxcbiAgICAgIHN0YXR1czogcHJvZHVjdC5zdGF0dXMgfHwgXCJkcmFmdFwiLFxuICAgICAgZGlzY291bnRhYmxlOiBCb29sZWFuKHByb2R1Y3QuZGlzY291bnRhYmxlKSxcbiAgICAgIHR5cGVfaWQ6IHByb2R1Y3QudHlwZV9pZCB8fCBcIlwiLFxuICAgICAgY29sbGVjdGlvbl9pZDogcHJvZHVjdC5jb2xsZWN0aW9uX2lkIHx8IFwiXCIsXG4gICAgICBjYXRlZ29yeV9pZDogcHJvZHVjdC5jYXRlZ29yaWVzPy5bMF0/LmlkIHx8IFwiXCIsXG4gICAgICB0YWdfaWQ6IHByb2R1Y3QudGFncz8uWzBdPy5pZCB8fCBcIlwiLFxuICAgIH0sXG4gICAgY291cG9uOiB7XG4gICAgICAuLi5lbXB0eUNvdXBvbihvcHRpb25zKSxcbiAgICAgIGVuYWJsZWQ6IGNvbmZpZy5lbmFibGVkLFxuICAgICAgdHlwZTogY291cG9uVHlwZUZyb21Db25maWcoY29uZmlnKSxcbiAgICAgIHB1cmNoYXNlX2NvbmRpdGlvbnM6IGNvbmZpZ3VyZWRDb25kaXRpb25zLFxuICAgICAgYW1vdW50czpcbiAgICAgICAgY29uZmlnLmJlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIlxuICAgICAgICAgID8gYW1vdW50Um93c1xuICAgICAgICAgIDogYW1vdW50Um93cy5sZW5ndGhcbiAgICAgICAgICAgID8gYW1vdW50Um93c1xuICAgICAgICAgICAgOiBlbXB0eUNvdXBvbihvcHRpb25zKS5hbW91bnRzLFxuICAgICAgcGVyY2VudGFnZTogY29uZmlnLnBlcmNlbnRhZ2UgPT0gbnVsbCA/IFwiXCIgOiBTdHJpbmcoY29uZmlnLnBlcmNlbnRhZ2UpLFxuICAgICAgYWxsb2NhdGlvbjpcbiAgICAgICAgY29uZmlnLnByb21vdGlvbl90ZW1wbGF0ZT8uYXBwbGljYXRpb25fbWV0aG9kPy5hbGxvY2F0aW9uID09PSBcIm9uY2VcIlxuICAgICAgICAgID8gKFwib25jZVwiIGFzIGNvbnN0KVxuICAgICAgICAgIDogKFwiZWFjaFwiIGFzIGNvbnN0KSxcbiAgICAgIGNvZGVfc3RyYXRlZ3k6IGNvbmZpZy5jb2RlX3N0cmF0ZWd5LFxuICAgICAgY29kZV9wcmVmaXg6IGNvbmZpZy5jb2RlX3ByZWZpeCB8fCBcIlwiLFxuICAgICAgc2hhcmVkX2NvZGU6IGNvbmZpZy5zaGFyZWRfY29kZSB8fCBcIlwiLFxuICAgICAgZXhwaXJhdGlvbl90eXBlOiBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3k/LnR5cGUgfHwgXCJkdXJhdGlvblwiLFxuICAgICAgZXhwaXJhdGlvbl9kdXJhdGlvbjpcbiAgICAgICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlID09PSBcImR1cmF0aW9uXCJcbiAgICAgICAgICA/IFN0cmluZyhcbiAgICAgICAgICAgICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5LmR1cmF0aW9uID8/XG4gICAgICAgICAgICAgIGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeS5kdXJhdGlvbl9kYXlzID8/XG4gICAgICAgICAgICAgIDMwLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogXCIzMFwiLFxuICAgICAgZXhwaXJhdGlvbl9kdXJhdGlvbl91bml0OlxuICAgICAgICBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3k/LnR5cGUgPT09IFwiZHVyYXRpb25cIlxuICAgICAgICAgID8gY29uZmlnLmV4cGlyYXRpb25fcG9saWN5LmR1cmF0aW9uX3VuaXQgfHwgXCJkYXlzXCJcbiAgICAgICAgICA6IFwiZGF5c1wiLFxuICAgICAgZXhwaXJhdGlvbl90aW1lX3BvbGljeTpcbiAgICAgICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlID09PSBcImR1cmF0aW9uXCIgfHxcbiAgICAgICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlID09PSBcIm1vbnRoX2VuZFwiXG4gICAgICAgICAgPyBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3kudGltZV9wb2xpY3kgfHwgXCJleGFjdGx5XCJcbiAgICAgICAgICA6IFwiZGF5X2VuZFwiLFxuICAgICAgZXhwaXJhdGlvbl9kYXRlOlxuICAgICAgICBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3k/LnR5cGUgPT09IFwiZml4ZWRcIlxuICAgICAgICAgID8gdG9EYXRlVGltZUxvY2FsKGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeS5leHBpcmVzX2F0KVxuICAgICAgICAgIDogXCJcIixcbiAgICAgIGV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduOlxuICAgICAgICBleHBpcmF0aW9uUG9saWN5LnR5cGUgPT09IFwibm9uZVwiIHx8XG4gICAgICAgIGV4cGlyYXRpb25Qb2xpY3kuY2FwX2J5X2NhbXBhaWduICE9PSBmYWxzZSxcbiAgICAgIGV4cGlyYXRpb25fY2FwX2F0OlxuICAgICAgICBleHBpcmF0aW9uUG9saWN5LnR5cGUgPT09IFwibm9uZVwiXG4gICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgOiB0b0RhdGVUaW1lTG9jYWwoZXhwaXJhdGlvblBvbGljeS5jYXBfYXQpLFxuICAgICAgbWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtOiBTdHJpbmcoXG4gICAgICAgIGNvbmZpZy5tYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW0gfHwgMSxcbiAgICAgICksXG4gICAgICBwcm9tb3Rpb25fbWlycm9yX21vZGU6IGNvbmZpZy5wcm9tb3Rpb25fbWlycm9yX21vZGUgfHwgXCJub25lXCIsXG4gICAgICBwcm9tb3Rpb25fc3RhdHVzOiBjb25maWcucHJvbW90aW9uX3N0YXR1cyB8fCBcImRyYWZ0XCIsXG4gICAgfSxcbiAgICBjYW1wYWlnbjoge1xuICAgICAgLi4uZW1wdHlDYW1wYWlnbixcbiAgICAgIG1vZGU6IGNvbmZpZy5jYW1wYWlnbl9pZCA/IChcImV4aXN0aW5nXCIgYXMgY29uc3QpIDogKFwibm9uZVwiIGFzIGNvbnN0KSxcbiAgICAgIGNhbXBhaWduX2lkOiBjb25maWcuY2FtcGFpZ25faWQgfHwgXCJcIixcbiAgICB9LFxuICB9XG59XG5cbmNvbnN0IG1vZGFsQ29udGVudFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImZsZXhcIixcbiAgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIixcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG59XG5cbmNvbnN0IG1vZGFsV2l6YXJkU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6IFwiZmxleFwiLFxuICBmbGV4OiBcIjEgMSBhdXRvXCIsXG4gIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gIG1pbkhlaWdodDogMCxcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG59XG5cbmNvbnN0IHZpc3VhbGx5SGlkZGVuU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGNsaXA6IFwicmVjdCgwIDAgMCAwKVwiLFxuICBjbGlwUGF0aDogXCJpbnNldCg1MCUpXCIsXG4gIGhlaWdodDogMSxcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gIHdoaXRlU3BhY2U6IFwibm93cmFwXCIsXG4gIHdpZHRoOiAxLFxufVxuXG5jb25zdCBtb2RhbEJvZHlTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZmxleDogXCIxIDEgYXV0b1wiLFxuICBtaW5IZWlnaHQ6IDAsXG4gIHBhZGRpbmc6IDAsXG59XG5cbmNvbnN0IG1vZGFsU2Nyb2xsU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIG92ZXJmbG93WTogXCJhdXRvXCIsXG4gIHBhZGRpbmc6IFwiNjRweCAyNHB4IDExMnB4XCIsXG4gIHdpZHRoOiBcIjEwMCVcIixcbn1cblxuY29uc3QgbW9kYWxGb3JtU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIG1hcmdpbjogXCIwIGF1dG9cIixcbiAgbWF4V2lkdGg6IDcyMCxcbiAgd2lkdGg6IFwibWluKDcyMHB4LCAxMDAlKVwiLFxufVxuXG5jb25zdCBzdGFja1N0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImZsZXhcIixcbiAgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIixcbiAgZ2FwOiAyNCxcbn1cblxuY29uc3QgdHdvQ29sdW1uR3JpZFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImdyaWRcIixcbiAgZ2FwOiAxNixcbiAgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCJyZXBlYXQoYXV0by1maXQsIG1pbm1heCgyNjBweCwgMWZyKSlcIixcbn1cblxuY29uc3QgdGhyZWVDb2x1bW5HcmlkU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6IFwiZ3JpZFwiLFxuICBnYXA6IDE2LFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiBcInJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDE4MHB4LCAxZnIpKVwiLFxufVxuXG5jb25zdCBwYW5lbFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBib3JkZXI6IFwiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1iYXNlKVwiLFxuICBib3JkZXJSYWRpdXM6IDgsXG4gIHBhZGRpbmc6IDE2LFxufVxuXG5mdW5jdGlvbiBGaWVsZCh7XG4gIGNoaWxkcmVuLFxuICBsYWJlbCxcbiAgb3B0aW9uYWwsXG4gIHRvb2x0aXAsXG59OiB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgbGFiZWw6IHN0cmluZ1xuICBvcHRpb25hbD86IGJvb2xlYW5cbiAgdG9vbHRpcD86IHN0cmluZ1xufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAteS0xXCIgc3R5bGU9e3sgbWluV2lkdGg6IDAgfX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC14LTFcIj5cbiAgICAgICAgPExhYmVsPntsYWJlbH08L0xhYmVsPlxuICAgICAgICB7dG9vbHRpcCAmJiAoXG4gICAgICAgICAgPFRvb2x0aXAgY29udGVudD17dG9vbHRpcH0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtgJHtsYWJlbH0gaW5mb3JtYXRpb25gfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEluZm9ybWF0aW9uQ2lyY2xlIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICl9XG4gICAgICAgIHtvcHRpb25hbCAmJiAoXG4gICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPlxuICAgICAgICAgICAgKE9wdGlvbmFsKVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApXG59XG5cbmZ1bmN0aW9uIFNlY3Rpb24oe1xuICBjaGlsZHJlbixcbiAgZGVzY3JpcHRpb24sXG4gIHRpdGxlLFxufToge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTRcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxIZWFkaW5nIGxldmVsPVwiaDJcIj57dGl0bGV9PC9IZWFkaW5nPlxuICAgICAgICB7ZGVzY3JpcHRpb24gJiYgKFxuICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L3NlY3Rpb24+XG4gIClcbn1cblxuZnVuY3Rpb24gT3B0aW9uU2VsZWN0KHtcbiAgb25DaGFuZ2UsXG4gIG9wdGlvbnMsXG4gIHZhbHVlLFxufToge1xuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgb3B0aW9uczogT3B0aW9uUmVjb3JkW11cbiAgdmFsdWU6IHN0cmluZ1xufSkge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RcbiAgICAgIHZhbHVlPXt2YWx1ZSB8fCBOT05FfVxuICAgICAgb25WYWx1ZUNoYW5nZT17KG5leHQpID0+IG9uQ2hhbmdlKG5leHQgPT09IE5PTkUgPyBcIlwiIDogbmV4dCl9XG4gICAgPlxuICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9e05PTkV9Pk5vbmU8L1NlbGVjdC5JdGVtPlxuICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgIDxTZWxlY3QuSXRlbSBrZXk9e29wdGlvbi5pZH0gdmFsdWU9e29wdGlvbi5pZH0+XG4gICAgICAgICAgICB7b3B0aW9uTGFiZWwob3B0aW9uKX1cbiAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICApKX1cbiAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgPC9TZWxlY3Q+XG4gIClcbn1cblxuZnVuY3Rpb24gQ3VycmVuY3lTZWxlY3Qoe1xuICBjdXJyZW5jaWVzLFxuICBvbkNoYW5nZSxcbiAgdmFsdWUsXG59OiB7XG4gIGN1cnJlbmNpZXM6IEN1cnJlbmN5T3B0aW9uW11cbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIHZhbHVlOiBzdHJpbmdcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0XG4gICAgICB2YWx1ZT17dmFsdWUgfHwgdW5kZWZpbmVkfVxuICAgICAgZGlzYWJsZWQ9eyFjdXJyZW5jaWVzLmxlbmd0aH1cbiAgICAgIG9uVmFsdWVDaGFuZ2U9e29uQ2hhbmdlfVxuICAgID5cbiAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgPFNlbGVjdC5WYWx1ZVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtcbiAgICAgICAgICAgIGN1cnJlbmNpZXMubGVuZ3RoID8gXCJTZWxlY3QgY3VycmVuY3lcIiA6IFwiTm8gY3VycmVuY2llcyBhdmFpbGFibGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgIHtjdXJyZW5jaWVzLm1hcCgoY3VycmVuY3kpID0+IChcbiAgICAgICAgICA8U2VsZWN0Lkl0ZW0ga2V5PXtjdXJyZW5jeS5jb2RlfSB2YWx1ZT17Y3VycmVuY3kuY29kZX0+XG4gICAgICAgICAgICB7Y3VycmVuY3kubmFtZX0gKHtjdXJyZW5jeS5jb2RlLnRvVXBwZXJDYXNlKCl9KVxuICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICkpfVxuICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICA8L1NlbGVjdD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDdXJyZW5jeUFtb3VudEZpZWxkKHtcbiAgY3VycmVuY2llcyxcbiAgY3VycmVuY3lDb2RlLFxuICBvbkNoYW5nZSxcbiAgdmFsdWUsXG59OiB7XG4gIGN1cnJlbmNpZXM6IEN1cnJlbmN5T3B0aW9uW11cbiAgY3VycmVuY3lDb2RlOiBzdHJpbmdcbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIHZhbHVlOiBzdHJpbmdcbn0pIHtcbiAgY29uc3QgY3VycmVuY3kgPSBjdXJyZW5jaWVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uY29kZSA9PT0gY3VycmVuY3lDb2RlKVxuICBjb25zdCBjb2RlID0gY3VycmVuY3lDb2RlLnRvVXBwZXJDYXNlKClcbiAgY29uc3QgZGVjaW1hbHMgPSBjdXJyZW5jeURlY2ltYWxEaWdpdHMoY29kZSB8fCBcIlVTRFwiKVxuICByZXR1cm4gKFxuICAgIDxDdXJyZW5jeUlucHV0XG4gICAgICBjb2RlPXtjb2RlIHx8IFwiVVNEXCJ9XG4gICAgICBzeW1ib2w9e1xuICAgICAgICBjdXJyZW5jeT8uc3ltYm9sX25hdGl2ZSB8fFxuICAgICAgICBjdXJyZW5jeT8uc3ltYm9sIHx8XG4gICAgICAgIGN1cnJlbmN5U3ltYm9sKGNvZGUgfHwgXCJVU0RcIilcbiAgICAgIH1cbiAgICAgIG1pbj17MH1cbiAgICAgIGRlY2ltYWxTY2FsZT17ZGVjaW1hbHN9XG4gICAgICBkZWNpbWFsc0xpbWl0PXtkZWNpbWFsc31cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIGRpc2FibGVkPXshY3VycmVuY3lDb2RlfVxuICAgICAgb25WYWx1ZUNoYW5nZT17KG5leHRWYWx1ZSkgPT4gb25DaGFuZ2UobmV4dFZhbHVlIHx8IFwiXCIpfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gUGVyY2VudGFnZUlucHV0KHtcbiAgb25DaGFuZ2UsXG4gIHZhbHVlLFxufToge1xuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgdmFsdWU6IHN0cmluZ1xufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtc3RyZXRjaFwiIHN0eWxlPXt7IHdpZHRoOiBcIjEwMCVcIiB9fT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiYmctdWktYmctZmllbGQgdGV4dC11aS1mZy1tdXRlZCBmbGV4IGl0ZW1zLWNlbnRlciBib3JkZXJcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGJvcmRlckNvbG9yOiBcInZhcigtLWJvcmRlci1iYXNlKVwiLFxuICAgICAgICAgIGJvcmRlclJhZGl1czogXCI2cHggMCAwIDZweFwiLFxuICAgICAgICAgIGJvcmRlclJpZ2h0OiAwLFxuICAgICAgICAgIHBhZGRpbmc6IFwiMCAxMnB4XCIsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgICVcbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJtaW4tdy0wIGZsZXgtMVwiXG4gICAgICAgIHN0eWxlPXt7IGZsZXg6IFwiMSAxIDAlXCIsIG1pbldpZHRoOiAwIH19XG4gICAgICA+XG4gICAgICAgIDxJbnB1dFxuICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbFwiXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgbWluPXsxfVxuICAgICAgICAgIG1heD17MTAwfVxuICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjAgNnB4IDZweCAwXCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiBvbkNoYW5nZShldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZnVuY3Rpb24gSGFuZGxlSW5wdXQoe1xuICBvbkNoYW5nZSxcbiAgdmFsdWUsXG59OiB7XG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuICB2YWx1ZTogc3RyaW5nXG59KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkIHBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgaW5zZXQteS0wIGxlZnQtMCB6LTEwIGZsZXggbWluLXctOCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLXIgcHgtMi41XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInR4dC1jb21wYWN0LXNtYWxsIGZvbnQtbWVkaXVtXCI+Lzwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPElucHV0XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ3aW50ZXItamFja2V0XCJcbiAgICAgICAgc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IDM0IH19XG4gICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+IG9uQ2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSl9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmZ1bmN0aW9uIE1lZGlhVXBsb2FkKHtcbiAgaXNVcGxvYWRpbmcsXG4gIG1lZGlhLFxuICBvblJlbW92ZSxcbiAgb25VcGxvYWQsXG59OiB7XG4gIGlzVXBsb2FkaW5nOiBib29sZWFuXG4gIG1lZGlhOiBQcm9kdWN0TWVkaWFbXVxuICBvblJlbW92ZTogKG1lZGlhOiBQcm9kdWN0TWVkaWEpID0+IHZvaWRcbiAgb25VcGxvYWQ6IChmaWxlczogRmlsZVtdKSA9PiB2b2lkXG59KSB7XG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGFjY2VwdCA9XG4gICAgXCJpbWFnZS9qcGVnLGltYWdlL3BuZyxpbWFnZS9naWYsaW1hZ2Uvd2VicCxpbWFnZS9oZWljLGltYWdlL3N2Zyt4bWxcIlxuXG4gIGNvbnN0IGhhbmRsZUZpbGVzID0gKGZpbGVzOiBGaWxlTGlzdCB8IG51bGwpID0+IHtcbiAgICBpZiAoIWZpbGVzPy5sZW5ndGgpIHJldHVyblxuICAgIG9uVXBsb2FkKEFycmF5LmZyb20oZmlsZXMpKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJvcCA9IChldmVudDogRHJhZ0V2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICBoYW5kbGVGaWxlcyhldmVudC5kYXRhVHJhbnNmZXIuZmlsZXMpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAteS0zXCI+XG4gICAgICB7bWVkaWEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJncmlkIGdhcC0zXCJcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCJyZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTIwcHgsIDFmcikpXCIsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHttZWRpYS5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGtleT17aXRlbS5hc3NldF9pZCB8fCBpdGVtLnVybH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbWQgYm9yZGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz17aXRlbS51cmx9XG4gICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTMyIHctZnVsbCBvYmplY3QtY292ZXJcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogMTI4IH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQteC0wIGJvdHRvbS0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBiZy1ibGFjay82MCBweC0yIHB5LTFcIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwieHNtYWxsXCIgc3R5bGU9e3sgY29sb3I6IFwid2hpdGVcIiB9fT5cbiAgICAgICAgICAgICAgICAgIHtpbmRleCA9PT0gMCA/IFwiVGh1bWJuYWlsXCIgOiBgSW1hZ2UgJHtpbmRleCArIDF9YH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVtb3ZlIGltYWdlXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiBcIndoaXRlXCIgfX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uUmVtb3ZlKGl0ZW0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxYTWFya01pbmkgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPGlucHV0XG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgaGlkZGVuXG4gICAgICAgIG11bHRpcGxlXG4gICAgICAgIGFjY2VwdD17YWNjZXB0fVxuICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgaGFuZGxlRmlsZXMoZXZlbnQudGFyZ2V0LmZpbGVzKVxuICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IFwiXCJcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBkaXNhYmxlZD17aXNVcGxvYWRpbmd9XG4gICAgICAgIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWQgZmxleCB3LWZ1bGwgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC15LTIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWRhc2hlZCBwLThcIlxuICAgICAgICBzdHlsZT17eyBtaW5IZWlnaHQ6IDE0OCB9fVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBpbnB1dFJlZi5jdXJyZW50Py5jbGljaygpfVxuICAgICAgICBvbkRyYWdPdmVyPXsoZXZlbnQpID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCl9XG4gICAgICAgIG9uRHJvcD17aGFuZGxlRHJvcH1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC11aS1mZy1iYXNlIGZsZXggaXRlbXMtY2VudGVyIGdhcC14LTJcIj5cbiAgICAgICAgICA8QXJyb3dVcFRyYXkgLz5cbiAgICAgICAgICB7aXNVcGxvYWRpbmcgPyBcIlVwbG9hZGluZyBpbWFnZXMuLi5cIiA6IFwiVXBsb2FkIGltYWdlc1wifVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICBEcmFnIGFuZCBkcm9wIGltYWdlcyBoZXJlIG9yIGNsaWNrIHRvIHVwbG9hZC5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIClcbn1cblxudHlwZSBDb25kaXRpb25WYWx1ZU9wdGlvbiA9IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9XG5cbmZ1bmN0aW9uIGNvbmRpdGlvblZhbHVlT3B0aW9ucyhcbiAgYXR0cmlidXRlOiBQdXJjaGFzZUNvbmRpdGlvbkF0dHJpYnV0ZSB8IFwiXCIsXG4gIG9wdGlvbnM6IE9wdGlvbnNQYXlsb2FkLFxuKTogQ29uZGl0aW9uVmFsdWVPcHRpb25bXSB7XG4gIGlmIChhdHRyaWJ1dGUgPT09IFwiY3VycmVuY3lfY29kZVwiKSB7XG4gICAgcmV0dXJuIChvcHRpb25zLmN1cnJlbmNpZXMgfHwgW10pLm1hcCgoY3VycmVuY3kpID0+ICh7XG4gICAgICB2YWx1ZTogY3VycmVuY3kuY29kZSxcbiAgICAgIGxhYmVsOiBgJHtjdXJyZW5jeS5uYW1lfSAoJHtjdXJyZW5jeS5jb2RlLnRvVXBwZXJDYXNlKCl9KWAsXG4gICAgfSkpXG4gIH1cbiAgaWYgKGF0dHJpYnV0ZSA9PT0gXCJzaGlwcGluZ19hZGRyZXNzLmNvdW50cnlfY29kZVwiKSB7XG4gICAgcmV0dXJuIChvcHRpb25zLmNvdW50cmllcyB8fCBbXSkubWFwKChjb3VudHJ5KSA9PiAoe1xuICAgICAgdmFsdWU6IFN0cmluZyhjb3VudHJ5Lmlzb18yIHx8IGNvdW50cnkuaWQpLnRvTG93ZXJDYXNlKCksXG4gICAgICBsYWJlbDogY291bnRyeS5kaXNwbGF5X25hbWUgfHwgY291bnRyeS5uYW1lIHx8IGNvdW50cnkuaWQsXG4gICAgfSkpXG4gIH1cblxuICBjb25zdCByZWNvcmRzID1cbiAgICBhdHRyaWJ1dGUgPT09IFwiY3VzdG9tZXIuZ3JvdXBzLmlkXCJcbiAgICAgID8gb3B0aW9ucy5jdXN0b21lcl9ncm91cHNcbiAgICAgIDogYXR0cmlidXRlID09PSBcInJlZ2lvbi5pZFwiXG4gICAgICAgID8gb3B0aW9ucy5yZWdpb25zXG4gICAgICAgIDogYXR0cmlidXRlID09PSBcInNhbGVzX2NoYW5uZWxfaWRcIlxuICAgICAgICAgID8gb3B0aW9ucy5zYWxlc19jaGFubmVsc1xuICAgICAgICAgIDogW11cbiAgcmV0dXJuIChyZWNvcmRzIHx8IFtdKS5tYXAoKHJlY29yZCkgPT4gKHtcbiAgICB2YWx1ZTogcmVjb3JkLmlkLFxuICAgIGxhYmVsOiBvcHRpb25MYWJlbChyZWNvcmQpLFxuICB9KSlcbn1cblxuZnVuY3Rpb24gTXVsdGlDb25kaXRpb25WYWx1ZXMoe1xuICBhdHRyaWJ1dGUsXG4gIG9uQ2hhbmdlLFxuICBvcHRpb25zLFxuICB2YWx1ZSxcbn06IHtcbiAgYXR0cmlidXRlOiBQdXJjaGFzZUNvbmRpdGlvbkF0dHJpYnV0ZVxuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmdbXSkgPT4gdm9pZFxuICBvcHRpb25zOiBDb25kaXRpb25WYWx1ZU9wdGlvbltdXG4gIHZhbHVlOiBzdHJpbmdbXVxufSkge1xuICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2RyYWZ0LCBzZXREcmFmdF0gPSB1c2VTdGF0ZSh2YWx1ZSlcbiAgY29uc3QgW3NlYXJjaCwgc2V0U2VhcmNoXSA9IHVzZVN0YXRlKFwiXCIpXG4gIGNvbnN0IGxhYmVscyA9IE9iamVjdC5mcm9tRW50cmllcyhvcHRpb25zLm1hcCgob3B0aW9uKSA9PiBbb3B0aW9uLnZhbHVlLCBvcHRpb24ubGFiZWxdKSlcbiAgY29uc3QgZmlsdGVyZWQgPSBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PlxuICAgIG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50cmltKCkudG9Mb3dlckNhc2UoKSksXG4gIClcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnRcIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgc2V0RHJhZnQodmFsdWUpXG4gICAgICAgICAgc2V0U2VhcmNoKFwiXCIpXG4gICAgICAgICAgc2V0T3Blbih0cnVlKVxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dmFsdWUubGVuZ3RoXG4gICAgICAgICAgPyB2YWx1ZS5sZW5ndGggPT09IDFcbiAgICAgICAgICAgID8gbGFiZWxzW3ZhbHVlWzBdXSB8fCB2YWx1ZVswXVxuICAgICAgICAgICAgOiBgJHt2YWx1ZS5sZW5ndGh9IHZhbHVlcyBzZWxlY3RlZGBcbiAgICAgICAgICA6IFwiU2VsZWN0IHZhbHVlc1wifVxuICAgICAgPC9CdXR0b24+XG4gICAgICB7dmFsdWUubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmbGV4IGZsZXgtd3JhcCBnYXAtMVwiPlxuICAgICAgICAgIHt2YWx1ZS5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGtleT17aXRlbX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctdWktYmctY29tcG9uZW50IHRleHQtdWktZmctc3VidGxlIGZsZXggaXRlbXMtY2VudGVyIGdhcC14LTEgcm91bmRlZC1tZCBib3JkZXIgcHgtMiBweS0xIHRleHQteHNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bGFiZWxzW2l0ZW1dIHx8IGl0ZW19XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtgUmVtb3ZlICR7bGFiZWxzW2l0ZW1dIHx8IGl0ZW19YH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh2YWx1ZS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeSAhPT0gaXRlbSkpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFhNYXJrTWluaSAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPERyYXdlciBvcGVuPXtvcGVufSBvbk9wZW5DaGFuZ2U9e3NldE9wZW59PlxuICAgICAgICA8RHJhd2VyLkNvbnRlbnQ+XG4gICAgICAgICAgPERyYXdlci5IZWFkZXI+XG4gICAgICAgICAgICA8RHJhd2VyLlRpdGxlPlxuICAgICAgICAgICAgICBTZWxlY3Qge2NvbmRpdGlvbkF0dHJpYnV0ZXMuZmluZCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gYXR0cmlidXRlKT8ubGFiZWx9XG4gICAgICAgICAgICA8L0RyYXdlci5UaXRsZT5cbiAgICAgICAgICA8L0RyYXdlci5IZWFkZXI+XG4gICAgICAgICAgPERyYXdlci5Cb2R5IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktMyBvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICB2YWx1ZT17c2VhcmNofVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCB2YWx1ZXNcIlxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiBzZXRTZWFyY2goZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7ZmlsdGVyZWQubGVuZ3RoID8gKFxuICAgICAgICAgICAgICBmaWx0ZXJlZC5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAga2V5PXtvcHRpb24udmFsdWV9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBnYXAteC0zIHJvdW5kZWQtbWQgYm9yZGVyIHAtM1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2RyYWZ0LmluY2x1ZGVzKG9wdGlvbi52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RHJhZnQoKGN1cnJlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi5jdXJyZW50LCBvcHRpb24udmFsdWVdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50LmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSBvcHRpb24udmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxUZXh0PntvcHRpb24ubGFiZWx9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VGV4dCBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+Tm8gbWF0Y2hpbmcgdmFsdWVzLjwvVGV4dD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9EcmF3ZXIuQm9keT5cbiAgICAgICAgICA8RHJhd2VyLkZvb3Rlcj5cbiAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKSA9PiBzZXRPcGVuKGZhbHNlKX0+XG4gICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBkaXNhYmxlZD17IWRyYWZ0Lmxlbmd0aH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIG9uQ2hhbmdlKGRyYWZ0KVxuICAgICAgICAgICAgICAgIHNldE9wZW4oZmFsc2UpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEFwcGx5XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L0RyYXdlci5Gb290ZXI+XG4gICAgICAgIDwvRHJhd2VyLkNvbnRlbnQ+XG4gICAgICA8L0RyYXdlcj5cbiAgICA8Lz5cbiAgKVxufVxuXG5mdW5jdGlvbiBQdXJjaGFzZUNvbmRpdGlvbnNGaWVsZCh7XG4gIGZpeGVkQW1vdW50LFxuICBvbkNoYW5nZSxcbiAgb3B0aW9ucyxcbiAgdmFsdWUsXG59OiB7XG4gIGZpeGVkQW1vdW50OiBib29sZWFuXG4gIG9uQ2hhbmdlOiAoY29uZGl0aW9uczogUHVyY2hhc2VDb25kaXRpb25Gb3JtW10pID0+IHZvaWRcbiAgb3B0aW9uczogT3B0aW9uc1BheWxvYWRcbiAgdmFsdWU6IFB1cmNoYXNlQ29uZGl0aW9uRm9ybVtdXG59KSB7XG4gIGNvbnN0IHNlbGVjdGVkQXR0cmlidXRlcyA9IG5ldyBTZXQoXG4gICAgdmFsdWUubWFwKChjb25kaXRpb24pID0+IGNvbmRpdGlvbi5hdHRyaWJ1dGUpLmZpbHRlcihCb29sZWFuKSxcbiAgKVxuXG4gIGNvbnN0IHJlcGxhY2UgPSAoa2V5OiBzdHJpbmcsIHVwZGF0ZTogUGFydGlhbDxQdXJjaGFzZUNvbmRpdGlvbkZvcm0+KSA9PlxuICAgIG9uQ2hhbmdlKFxuICAgICAgdmFsdWUubWFwKChjb25kaXRpb24pID0+XG4gICAgICAgIGNvbmRpdGlvbi5rZXkgPT09IGtleSA/IHsgLi4uY29uZGl0aW9uLCAuLi51cGRhdGUgfSA6IGNvbmRpdGlvbixcbiAgICAgICksXG4gICAgKVxuXG4gIHJldHVybiAoXG4gICAgPFNlY3Rpb25cbiAgICAgIHRpdGxlPVwiV2hvIGNhbiBwdXJjaGFzZSB0aGlzIGNvdXBvbj9cIlxuICAgICAgZGVzY3JpcHRpb249XCJDb3Vwb24gcHJvZHVjdHMgY2FuIGJlIHB1cmNoYXNlZCBieSBhbGwgY3VzdG9tZXJzIHdoZW4gbm8gY29uZGl0aW9ucyBhcmUgY29uZmlndXJlZC4gQ29uZGl0aW9ucyBhcmUgY29tYmluZWQgd2l0aCBBTkQuXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktM1wiPlxuICAgICAgICB7dmFsdWUubWFwKChjb25kaXRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gY29uZGl0aW9uVmFsdWVPcHRpb25zKGNvbmRpdGlvbi5hdHRyaWJ1dGUsIG9wdGlvbnMpXG4gICAgICAgICAgY29uc3QgY3VycmVuY3lSZXF1aXJlZCA9XG4gICAgICAgICAgICBmaXhlZEFtb3VudCAmJiBjb25kaXRpb24uYXR0cmlidXRlID09PSBcImN1cnJlbmN5X2NvZGVcIlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGtleT17Y29uZGl0aW9uLmtleX0+XG4gICAgICAgICAgICAgIHtpbmRleCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZCBmbGV4IGgtOCBpdGVtcy1jZW50ZXIgdGV4dC14cyBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgQU5EXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3BhbmVsU3R5bGV9IGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXggZmxleC1jb2wgZ2FwLXktM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1zdGFydCBnYXAteC0yXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvbmRpdGlvbi5hdHRyaWJ1dGUgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjdXJyZW5jeVJlcXVpcmVkfVxuICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyhhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlKGNvbmRpdGlvbi5rZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlOiBhdHRyaWJ1dGUgYXMgUHVyY2hhc2VDb25kaXRpb25BdHRyaWJ1dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGF0dHJpYnV0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29uZGl0aW9uQXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUudmFsdWUgPT09IGNvbmRpdGlvbi5hdHRyaWJ1dGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZEF0dHJpYnV0ZXMuaGFzKGF0dHJpYnV0ZS52YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoYXR0cmlidXRlKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIGtleT17YXR0cmlidXRlLnZhbHVlfSB2YWx1ZT17YXR0cmlidXRlLnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHthdHRyaWJ1dGUubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjdXJyZW5jeVJlcXVpcmVkfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVtb3ZlIGNvbmRpdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2UodmFsdWUuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtleSAhPT0gY29uZGl0aW9uLmtleSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFhNYXJrTWluaSAvPlxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvbmRpdGlvbi5vcGVyYXRvciB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY29uZGl0aW9uLmF0dHJpYnV0ZX1cbiAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KG9wZXJhdG9yKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2UoY29uZGl0aW9uLmtleSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yIGFzIFB1cmNoYXNlQ29uZGl0aW9uT3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSBcImVxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNvbmRpdGlvbi52YWx1ZXMuc2xpY2UoMCwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbmRpdGlvbi52YWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSBwbGFjZWhvbGRlcj1cIlNlbGVjdCBvcGVyYXRvclwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICB7Y29uZGl0aW9uT3BlcmF0b3JzLm1hcCgob3BlcmF0b3IpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSBrZXk9e29wZXJhdG9yLnZhbHVlfSB2YWx1ZT17b3BlcmF0b3IudmFsdWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7b3BlcmF0b3IubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICB7Y29uZGl0aW9uLmF0dHJpYnV0ZSAmJiBjb25kaXRpb24ub3BlcmF0b3IgPT09IFwiZXFcIiA/IChcbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb25kaXRpb24udmFsdWVzWzBdIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsoc2VsZWN0ZWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlKGNvbmRpdGlvbi5rZXksIHsgdmFsdWVzOiBbc2VsZWN0ZWRdIH0pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSBwbGFjZWhvbGRlcj1cIlNlbGVjdCB2YWx1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFsdWVzLm1hcCgob3B0aW9uKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSBrZXk9e29wdGlvbi52YWx1ZX0gdmFsdWU9e29wdGlvbi52YWx1ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgKSA6IGNvbmRpdGlvbi5hdHRyaWJ1dGUgJiYgY29uZGl0aW9uLm9wZXJhdG9yID8gKFxuICAgICAgICAgICAgICAgICAgICA8TXVsdGlDb25kaXRpb25WYWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGU9e2NvbmRpdGlvbi5hdHRyaWJ1dGV9XG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17dmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb25kaXRpb24udmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsodmFsdWVzKSA9PiByZXBsYWNlKGNvbmRpdGlvbi5rZXksIHsgdmFsdWVzIH0pfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cInNlY29uZGFyeVwiIGRpc2FibGVkIGNsYXNzTmFtZT1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLXgtMlwiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRBdHRyaWJ1dGVzLnNpemUgPj0gY29uZGl0aW9uQXR0cmlidXRlcy5sZW5ndGh9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICBvbkNoYW5nZShbXG4gICAgICAgICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgICAgICAgeyBrZXk6IGNvbmRpdGlvbktleSgpLCBhdHRyaWJ1dGU6IFwiXCIsIG9wZXJhdG9yOiBcIlwiLCB2YWx1ZXM6IFtdIH0sXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFBsdXMgLz4gQWRkIGNvbmRpdGlvblxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdmFyaWFudD1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgIG9uQ2hhbmdlKGZpeGVkQW1vdW50ID8gZGVmYXVsdFB1cmNoYXNlQ29uZGl0aW9ucyhvcHRpb25zKSA6IFtdKVxuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIENsZWFyIGFsbFxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvU2VjdGlvbj5cbiAgKVxufVxuXG5mdW5jdGlvbiBQcm9kdWN0UHJpY2VzVGFibGUoe1xuICBjdXJyZW5jaWVzLFxuICBjb3Vwb25WYWx1ZSxcbiAgb25DaGFuZ2UsXG4gIHByaWNlcyxcbn06IHtcbiAgY3VycmVuY2llczogQ3VycmVuY3lPcHRpb25bXVxuICBjb3Vwb25WYWx1ZTogc3RyaW5nXG4gIG9uQ2hhbmdlOiAoY3VycmVuY3lDb2RlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgcHJpY2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG59KSB7XG4gIGNvbnN0IFt2aXNpYmxlQ3VycmVuY2llcywgc2V0VmlzaWJsZUN1cnJlbmNpZXNdID0gdXNlU3RhdGU8c3RyaW5nW10+KCgpID0+XG4gICAgY3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiBjdXJyZW5jeS5jb2RlKSxcbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0VmlzaWJsZUN1cnJlbmNpZXMoKGN1cnJlbnQpID0+IHtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZSA9IG5ldyBTZXQoY3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiBjdXJyZW5jeS5jb2RlKSlcbiAgICAgIGNvbnN0IHJldGFpbmVkID0gY3VycmVudC5maWx0ZXIoKGNvZGUpID0+IGF2YWlsYWJsZS5oYXMoY29kZSkpXG4gICAgICBjb25zdCBhZGRlZCA9IGN1cnJlbmNpZXNcbiAgICAgICAgLm1hcCgoY3VycmVuY3kpID0+IGN1cnJlbmN5LmNvZGUpXG4gICAgICAgIC5maWx0ZXIoKGNvZGUpID0+ICFjdXJyZW50LmluY2x1ZGVzKGNvZGUpKVxuICAgICAgcmV0dXJuIFsuLi5yZXRhaW5lZCwgLi4uYWRkZWRdXG4gICAgfSlcbiAgfSwgW2N1cnJlbmNpZXNdKVxuXG4gIGNvbnN0IHNob3duQ3VycmVuY2llcyA9IGN1cnJlbmNpZXMuZmlsdGVyKChjdXJyZW5jeSkgPT5cbiAgICB2aXNpYmxlQ3VycmVuY2llcy5pbmNsdWRlcyhjdXJyZW5jeS5jb2RlKSxcbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHNpemUtZnVsbCBmbGV4LWNvbCBkaXZpZGUteSBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctdWktYmctc3VidGxlIGZsZXggc2l6ZS1mdWxsIGZsZXgtY29sXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctdWktYmctYmFzZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gYm9yZGVyLWIgcC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0yXCI+XG4gICAgICAgICAgICA8RHJvcGRvd25NZW51PlxuICAgICAgICAgICAgICA8RHJvcGRvd25NZW51LlRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBzaXplPVwic21hbGxcIiB2YXJpYW50PVwic2Vjb25kYXJ5XCI+XG4gICAgICAgICAgICAgICAgICA8QWRqdXN0bWVudHMgLz5cbiAgICAgICAgICAgICAgICAgIFZpZXdcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9Ecm9wZG93bk1lbnUuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgPERyb3Bkb3duTWVudS5Db250ZW50IGFsaWduPVwic3RhcnRcIj5cbiAgICAgICAgICAgICAgICB7Y3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8RHJvcGRvd25NZW51LkNoZWNrYm94SXRlbVxuICAgICAgICAgICAgICAgICAgICBrZXk9e2N1cnJlbmN5LmNvZGV9XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Zpc2libGVDdXJyZW5jaWVzLmluY2x1ZGVzKGN1cnJlbmN5LmNvZGUpfVxuICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldFZpc2libGVDdXJyZW5jaWVzKChjdXJyZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IEFycmF5LmZyb20obmV3IFNldChbLi4uY3VycmVudCwgY3VycmVuY3kuY29kZV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuZmlsdGVyKChjb2RlKSA9PiBjb2RlICE9PSBjdXJyZW5jeS5jb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgUHJpY2Uge2N1cnJlbmN5LmNvZGUudG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51LkNoZWNrYm94SXRlbT5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9Ecm9wZG93bk1lbnUuQ29udGVudD5cbiAgICAgICAgICAgIDwvRHJvcGRvd25NZW51PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLXgtMlwiIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2l6ZS1mdWxsIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICA8VGFibGVcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGJvcmRlckNvbGxhcHNlOiBcImNvbGxhcHNlXCIsXG4gICAgICAgICAgICAgIHRhYmxlTGF5b3V0OiBcImZpeGVkXCIsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIm1heC1jb250ZW50XCJcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRhYmxlLkhlYWRlciBzdHlsZT17eyBib3JkZXJUb3A6IFwibm9uZVwiIH19PlxuICAgICAgICAgICAgICA8VGFibGUuUm93IHN0eWxlPXt7IGhlaWdodDogNDAgfX0+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGxcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IFwidmFyKC0tYmctYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tOiBcIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1iYXNlKVwiLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogMjAwLFxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogMjAwLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjAgMTZweFwiLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJzdGlja3lcIixcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgekluZGV4OiAxLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDb3Vwb24gVmFsdWVcbiAgICAgICAgICAgICAgICA8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAge3Nob3duQ3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbFxuICAgICAgICAgICAgICAgICAgICBrZXk9e2N1cnJlbmN5LmNvZGV9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogXCJ2YXIoLS1iZy1iYXNlKVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgdmFyKC0tYm9yZGVyLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1iYXNlKVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogMjAwLFxuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMCAxNnB4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidHJ1bmNhdGVcIiB0aXRsZT17YFByaWNlICR7Y3VycmVuY3kuY29kZS50b1VwcGVyQ2FzZSgpfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJpY2Uge2N1cnJlbmN5LmNvZGUudG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAge2N1cnJlbmN5LmlzX3RheF9pbmNsdXNpdmUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGF4SW5jbHVzaXZlIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWQgc2hyaW5rLTBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGF4RXhjbHVzaXZlIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWQgc2hyaW5rLTBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgIDwvVGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgICAgICAgIDxUYWJsZS5Sb3cgY2xhc3NOYW1lPVwiYmctdWktYmctc3VidGxlXCIgc3R5bGU9e3sgaGVpZ2h0OiA0MCB9fT5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbFxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogXCJ2YXIoLS1iZy1zdWJ0bGUpXCIsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgdmFyKC0tYm9yZGVyLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIwIDE2cHhcIixcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFwic3RpY2t5XCIsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIHpJbmRleDogMSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmxvY2sgdHJ1bmNhdGVcIj57Y291cG9uVmFsdWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICB7c2hvd25DdXJyZW5jaWVzLm1hcCgoY3VycmVuY3kpID0+IChcbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsXG4gICAgICAgICAgICAgICAgICAgIGtleT17Y3VycmVuY3kuY29kZX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBcInZhcigtLWJnLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tOiBcIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSaWdodDogXCIxcHggc29saWQgdmFyKC0tYm9yZGVyLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogMjAwLFxuICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjAwLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8VGFibGVQcmljZUlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3k9e2N1cnJlbmN5fVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcmljZXNbY3VycmVuY3kuY29kZV0gfHwgXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PiBvbkNoYW5nZShjdXJyZW5jeS5jb2RlLCB2YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgIDwvVGFibGU+XG5cbiAgICAgICAgICB7IWN1cnJlbmNpZXMubGVuZ3RoICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC00XCI+XG4gICAgICAgICAgICAgIDxUZXh0IGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICBBZGQgYSBzdXBwb3J0ZWQgY3VycmVuY3kgdG8gdGhlIHN0b3JlIGJlZm9yZSBzZXR0aW5nIHByaWNlcy5cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Q291cG9uVmFsdWUoXG4gIGNvdXBvbjogUGljazxDb3Vwb25Gb3JtU3RhdGUsIFwiYW1vdW50c1wiIHwgXCJwZXJjZW50YWdlXCIgfCBcInR5cGVcIj4sXG4gIGN1cnJlbmNpZXM6IFBpY2s8Q3VycmVuY3lPcHRpb24sIFwiY29kZVwiIHwgXCJpc19kZWZhdWx0XCI+W10sXG4pIHtcbiAgaWYgKFxuICAgIGNvdXBvbi50eXBlID09PSBcImFtb3VudF9vZmZfcHJvZHVjdHNcIiB8fFxuICAgIGNvdXBvbi50eXBlID09PSBcImFtb3VudF9vZmZfb3JkZXJcIlxuICApIHtcbiAgICBjb25zdCBkZWZhdWx0Q29kZSA9XG4gICAgICBjdXJyZW5jaWVzLmZpbmQoKGN1cnJlbmN5KSA9PiBjdXJyZW5jeS5pc19kZWZhdWx0KT8uY29kZSB8fFxuICAgICAgY3VycmVuY2llc1swXT8uY29kZVxuICAgIGNvbnN0IHByaW1hcnkgPVxuICAgICAgY291cG9uLmFtb3VudHMuZmluZCgocm93KSA9PiByb3cuY3VycmVuY3lfY29kZSA9PT0gZGVmYXVsdENvZGUpIHx8XG4gICAgICBjb3Vwb24uYW1vdW50c1swXVxuICAgIGNvbnN0IGFtb3VudCA9IG51bWJlck9yTnVsbChwcmltYXJ5Py5hbW91bnQpXG4gICAgaWYgKGFtb3VudCA9PSBudWxsKSByZXR1cm4gXCJcdTIwMTRcIlxuICAgIGNvbnN0IGFkZGl0aW9uYWwgPSBNYXRoLm1heCgwLCBjb3Vwb24uYW1vdW50cy5sZW5ndGggLSAxKVxuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGAke2Ftb3VudH0ke3ByaW1hcnkuY3VycmVuY3lfY29kZS50b1VwcGVyQ2FzZSgpfWBcbiAgICByZXR1cm4gYWRkaXRpb25hbCA/IGAke2Zvcm1hdHRlZH0gKyR7YWRkaXRpb25hbH1gIDogZm9ybWF0dGVkXG4gIH1cblxuICBpZiAoXG4gICAgY291cG9uLnR5cGUgPT09IFwicGVyY2VudGFnZV9vZmZfcHJvZHVjdFwiIHx8XG4gICAgY291cG9uLnR5cGUgPT09IFwicGVyY2VudGFnZV9vZmZfb3JkZXJcIlxuICApIHtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gbnVtYmVyT3JOdWxsKGNvdXBvbi5wZXJjZW50YWdlKVxuICAgIGlmIChwZXJjZW50YWdlID09IG51bGwpIHJldHVybiBcIlx1MjAxNFwiXG4gICAgcmV0dXJuIGNvdXBvbi50eXBlID09PSBcInBlcmNlbnRhZ2Vfb2ZmX29yZGVyXCJcbiAgICAgID8gYCR7cGVyY2VudGFnZX0lIG9mZiBvcmRlcmBcbiAgICAgIDogYCR7cGVyY2VudGFnZX0lIG9mZiBwcm9kdWN0c2BcbiAgfVxuXG4gIHJldHVybiBjb3Vwb24udHlwZSA9PT0gXCJmcmVlX3NoaXBwaW5nXCIgPyBcIkZyZWUgc2hpcHBpbmdcIiA6IFwiQnV5IFggR2V0IFlcIlxufVxuXG5mdW5jdGlvbiBUYWJsZVByaWNlSW5wdXQoe1xuICBjdXJyZW5jeSxcbiAgb25DaGFuZ2UsXG4gIHZhbHVlLFxufToge1xuICBjdXJyZW5jeTogQ3VycmVuY3lPcHRpb25cbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIHZhbHVlOiBzdHJpbmdcbn0pIHtcbiAgY29uc3Qgc3ltYm9sID1cbiAgICBjdXJyZW5jeS5zeW1ib2xfbmF0aXZlIHx8XG4gICAgY3VycmVuY3kuc3ltYm9sIHx8XG4gICAgY3VycmVuY3lTeW1ib2woY3VycmVuY3kuY29kZSB8fCBcIlVTRFwiKVxuXG4gIHJldHVybiAoXG4gICAgPGxhYmVsXG4gICAgICBjbGFzc05hbWU9XCJiZy11aS1iZy1iYXNlIGhvdmVyOmJnLXVpLWJnLXN1YnRsZSBmb2N1cy13aXRoaW46c2hhZG93LWJvcmRlcnMtaW50ZXJhY3RpdmUtd2l0aC1hY3RpdmUgdGV4dC11aS1mZy1iYXNlXCJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgIG1hcmdpbjogMCxcbiAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICBzdHlsZT17eyBmbGV4OiBcIjAgMCA0MHB4XCIsIHBhZGRpbmdMZWZ0OiAxNiB9fVxuICAgICAgPlxuICAgICAgICB7c3ltYm9sfVxuICAgICAgPC9zcGFuPlxuICAgICAgPGlucHV0XG4gICAgICAgIGFyaWEtbGFiZWw9e2BQcmljZSAke2N1cnJlbmN5LmNvZGUudG9VcHBlckNhc2UoKX1gfVxuICAgICAgICBpbnB1dE1vZGU9XCJkZWNpbWFsXCJcbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiBvbkNoYW5nZShldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGFwcGVhcmFuY2U6IFwibm9uZVwiLFxuICAgICAgICAgIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgICAgICBib3JkZXI6IDAsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgICAgICAgIGZsZXg6IFwiMSAxIGF1dG9cIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgICAgIG1hcmdpbjogMCxcbiAgICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgICBvdXRsaW5lOiBcIm5vbmVcIixcbiAgICAgICAgICBwYWRkaW5nOiBcIjAgMTZweCAwIDBcIixcbiAgICAgICAgICB0ZXh0QWxpZ246IFwicmlnaHRcIixcbiAgICAgICAgfX1cbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgLz5cbiAgICA8L2xhYmVsPlxuICApXG59XG5cbmZ1bmN0aW9uIENvdXBvblByb2R1Y3RNb2RhbCh7XG4gIGFsbG93UHJvbW90aW9uTWlycm9yLFxuICBhcGlCYXNlLFxuICBvbk9wZW5DaGFuZ2UsXG4gIG9uU2F2ZWQsXG4gIG9wZW4sXG4gIG9wdGlvbnMsXG4gIHJvdyxcbn06IHtcbiAgYWxsb3dQcm9tb3Rpb25NaXJyb3I6IGJvb2xlYW5cbiAgYXBpQmFzZTogQXBpQmFzZVxuICBvbk9wZW5DaGFuZ2U6IChvcGVuOiBib29sZWFuKSA9PiB2b2lkXG4gIG9uU2F2ZWQ6ICgpID0+IFByb21pc2U8dm9pZD5cbiAgb3BlbjogYm9vbGVhblxuICBvcHRpb25zOiBPcHRpb25zUGF5bG9hZFxuICByb3c6IENvdXBvblByb2R1Y3RSb3cgfCBudWxsXG59KSB7XG4gIGNvbnN0IFthY3RpdmVTdGVwLCBzZXRBY3RpdmVTdGVwXSA9IHVzZVN0YXRlPFdpemFyZFN0ZXA+KFwiZGV0YWlsc1wiKVxuICBjb25zdCBbcHJvZHVjdCwgc2V0UHJvZHVjdF0gPSB1c2VTdGF0ZTxQcm9kdWN0Rm9ybVN0YXRlPigoKSA9PlxuICAgIGVtcHR5UHJvZHVjdChvcHRpb25zKSxcbiAgKVxuICBjb25zdCBbY291cG9uLCBzZXRDb3Vwb25dID0gdXNlU3RhdGU8Q291cG9uRm9ybVN0YXRlPigoKSA9PlxuICAgIGVtcHR5Q291cG9uKG9wdGlvbnMpLFxuICApXG4gIGNvbnN0IFtjYW1wYWlnbiwgc2V0Q2FtcGFpZ25dID0gdXNlU3RhdGU8Q2FtcGFpZ25Gb3JtU3RhdGU+KGVtcHR5Q2FtcGFpZ24pXG4gIGNvbnN0IFtzYXZpbmcsIHNldFNhdmluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3VwbG9hZGluZywgc2V0VXBsb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZnVydGhlc3RTdGVwSW5kZXgsIHNldEZ1cnRoZXN0U3RlcEluZGV4XSA9IHVzZVN0YXRlKDApXG5cbiAgY29uc3QgdmlzaWJsZVN0ZXBzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYWxsb3dQcm9tb3Rpb25NaXJyb3JcbiAgICAgICAgPyBhbGxTdGVwc1xuICAgICAgICA6IGFsbFN0ZXBzLmZpbHRlcigoc3RlcCkgPT4gc3RlcCAhPT0gXCJjYW1wYWlnblwiKSxcbiAgICBbYWxsb3dQcm9tb3Rpb25NaXJyb3JdLFxuICApXG4gIGNvbnN0IGN1cnJlbnRTdGVwSW5kZXggPSB2aXNpYmxlU3RlcHMuaW5kZXhPZihhY3RpdmVTdGVwKVxuICBjb25zdCBjdXJyZW5jaWVzID0gb3B0aW9ucy5jdXJyZW5jaWVzIHx8IFtdXG4gIGNvbnN0IHN1cHBvcnRlZEN1cnJlbmN5Q29kZXMgPSB1c2VNZW1vKFxuICAgICgpID0+IG5ldyBTZXQoY3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiBjdXJyZW5jeS5jb2RlKSksXG4gICAgW2N1cnJlbmNpZXNdLFxuICApXG4gIGNvbnN0IGlzQW1vdW50VHlwZSA9XG4gICAgY291cG9uLnR5cGUgPT09IFwiYW1vdW50X29mZl9wcm9kdWN0c1wiIHx8IGNvdXBvbi50eXBlID09PSBcImFtb3VudF9vZmZfb3JkZXJcIlxuICBjb25zdCBpc1BlcmNlbnRhZ2VUeXBlID1cbiAgICBjb3Vwb24udHlwZSA9PT0gXCJwZXJjZW50YWdlX29mZl9wcm9kdWN0XCIgfHxcbiAgICBjb3Vwb24udHlwZSA9PT0gXCJwZXJjZW50YWdlX29mZl9vcmRlclwiXG4gIGNvbnN0IGlzSXRlbVNjb3BlZERpc2NvdW50ID1cbiAgICBjb3Vwb24udHlwZSA9PT0gXCJhbW91bnRfb2ZmX3Byb2R1Y3RzXCIgfHxcbiAgICBjb3Vwb24udHlwZSA9PT0gXCJwZXJjZW50YWdlX29mZl9wcm9kdWN0XCJcbiAgY29uc3QgZWZmZWN0aXZlQ3VycmVuY2llcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZWZmZWN0aXZlQ291cG9uQ3VycmVuY2llcyhjb3Vwb24ucHVyY2hhc2VfY29uZGl0aW9ucywgY3VycmVuY2llcyksXG4gICAgW2NvdXBvbi5wdXJjaGFzZV9jb25kaXRpb25zLCBjdXJyZW5jaWVzXSxcbiAgKVxuICBjb25zdCBwcm9kdWN0UHJpY2VzID0gY3VycmVuY2llcy5mbGF0TWFwKChjdXJyZW5jeSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gcHJvZHVjdC5wcmljZV9hbW91bnRzW2N1cnJlbmN5LmNvZGVdIHx8IFwiXCJcbiAgICBjb25zdCBhbW91bnQgPSBub25OZWdhdGl2ZU51bWJlck9yTnVsbCh2YWx1ZSlcbiAgICByZXR1cm4gYW1vdW50ID09IG51bGwgPyBbXSA6IFt7IGN1cnJlbmN5X2NvZGU6IGN1cnJlbmN5LmNvZGUsIGFtb3VudCB9XVxuICB9KVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSByZXR1cm5cbiAgICBjb25zdCBmb3JtcyA9IHJvd1xuICAgICAgPyBmb3Jtc0Zyb21Sb3cocm93LCBvcHRpb25zKVxuICAgICAgOiB7XG4gICAgICAgIHByb2R1Y3Q6IGVtcHR5UHJvZHVjdChvcHRpb25zKSxcbiAgICAgICAgY291cG9uOiBlbXB0eUNvdXBvbihvcHRpb25zKSxcbiAgICAgICAgY2FtcGFpZ246IGVtcHR5Q2FtcGFpZ24sXG4gICAgICB9XG4gICAgc2V0UHJvZHVjdChmb3Jtcy5wcm9kdWN0KVxuICAgIHNldENvdXBvbihmb3Jtcy5jb3Vwb24pXG4gICAgc2V0Q2FtcGFpZ24oZm9ybXMuY2FtcGFpZ24pXG4gICAgc2V0QWN0aXZlU3RlcChcImRldGFpbHNcIilcbiAgICBzZXRGdXJ0aGVzdFN0ZXBJbmRleCgwKVxuICB9LCBbb3Blbiwgcm93LCBvcHRpb25zXSlcblxuICBjb25zdCB1cGRhdGVQdXJjaGFzZUNvbmRpdGlvbnMgPSAoXG4gICAgcHVyY2hhc2VDb25kaXRpb25zOiBQdXJjaGFzZUNvbmRpdGlvbkZvcm1bXSxcbiAgKSA9PiB7XG4gICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIHB1cmNoYXNlX2NvbmRpdGlvbnM6IHB1cmNoYXNlQ29uZGl0aW9ucyxcbiAgICAgIGFtb3VudHM6IGlzQW1vdW50Q291cG9uVHlwZShjdXJyZW50LnR5cGUpXG4gICAgICAgID8gcmVjb25jaWxlQ291cG9uQW1vdW50cyhcbiAgICAgICAgICBjdXJyZW50LmFtb3VudHMsXG4gICAgICAgICAgZWZmZWN0aXZlQ291cG9uQ3VycmVuY2llcyhwdXJjaGFzZUNvbmRpdGlvbnMsIGN1cnJlbmNpZXMpLFxuICAgICAgICApXG4gICAgICAgIDogY3VycmVudC5hbW91bnRzLFxuICAgIH0pKVxuICB9XG5cbiAgY29uc3QgdXBkYXRlQ291cG9uVHlwZSA9ICh0eXBlOiBDb3Vwb25UeXBlKSA9PiB7XG4gICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiB7XG4gICAgICBsZXQgcHVyY2hhc2VDb25kaXRpb25zID0gY3VycmVudC5wdXJjaGFzZV9jb25kaXRpb25zXG4gICAgICBpZiAoXG4gICAgICAgIGlzQW1vdW50Q291cG9uVHlwZSh0eXBlKSAmJlxuICAgICAgICAhcHVyY2hhc2VDb25kaXRpb25zLnNvbWUoXG4gICAgICAgICAgKGNvbmRpdGlvbikgPT4gY29uZGl0aW9uLmF0dHJpYnV0ZSA9PT0gXCJjdXJyZW5jeV9jb2RlXCIsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBwdXJjaGFzZUNvbmRpdGlvbnMgPSBbXG4gICAgICAgICAgLi4ucHVyY2hhc2VDb25kaXRpb25zLFxuICAgICAgICAgIC4uLmRlZmF1bHRQdXJjaGFzZUNvbmRpdGlvbnMob3B0aW9ucyksXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHB1cmNoYXNlX2NvbmRpdGlvbnM6IHB1cmNoYXNlQ29uZGl0aW9ucyxcbiAgICAgICAgYW1vdW50czogaXNBbW91bnRDb3Vwb25UeXBlKHR5cGUpXG4gICAgICAgICAgPyByZWNvbmNpbGVDb3Vwb25BbW91bnRzKFxuICAgICAgICAgICAgY3VycmVudC5hbW91bnRzLFxuICAgICAgICAgICAgZWZmZWN0aXZlQ291cG9uQ3VycmVuY2llcyhwdXJjaGFzZUNvbmRpdGlvbnMsIGN1cnJlbmNpZXMpLFxuICAgICAgICAgIClcbiAgICAgICAgICA6IGN1cnJlbnQuYW1vdW50cyxcbiAgICAgICAgcHJvbW90aW9uX21pcnJvcl9tb2RlOlxuICAgICAgICAgIHR5cGUgPT09IFwiYnV5X3hfZ2V0X3lcIiA/IFwibm9uZVwiIDogY3VycmVudC5wcm9tb3Rpb25fbWlycm9yX21vZGUsXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHVwbG9hZE1lZGlhID0gYXN5bmMgKGZpbGVzOiBGaWxlW10pID0+IHtcbiAgICBpZiAoIWZpbGVzLmxlbmd0aCkgcmV0dXJuXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgIGZpbGVzLmZvckVhY2goKGZpbGUpID0+IGZvcm1EYXRhLmFwcGVuZChcImZpbGVzXCIsIGZpbGUpKVxuICAgIGlmIChhcGlCYXNlID09PSBcIi9hZG1pblwiICYmIHByb2R1Y3Quc2VsbGVyX2lkKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoXCJzZWxsZXJfaWRcIiwgcHJvZHVjdC5zZWxsZXJfaWQpXG4gICAgfVxuICAgIHNldFVwbG9hZGluZyh0cnVlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICBgJHtiYWNrZW5kVXJsKCl9JHthcGlCYXNlfS9jb3Vwb24tcHJvZHVjdHMvdXBsb2Fkc2AsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYXBpRXJyb3JNZXNzYWdlKHBheWxvYWQsIHJlc3BvbnNlLnN0YXR1c1RleHQpKVxuICAgICAgfVxuICAgICAgY29uc3QgcGF5bG9hZCA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHtcbiAgICAgICAgZmlsZXM/OiB7IGFzc2V0X2lkPzogc3RyaW5nOyB1cmw/OiBzdHJpbmcgfVtdXG4gICAgICB9XG4gICAgICBjb25zdCB1cGxvYWRlZCA9IChwYXlsb2FkLmZpbGVzIHx8IFtdKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChmaWxlKTogZmlsZSBpcyB7IGFzc2V0X2lkOiBzdHJpbmc7IHVybDogc3RyaW5nIH0gPT5cbiAgICAgICAgICAgIEJvb2xlYW4oZmlsZS5hc3NldF9pZCAmJiBmaWxlLnVybCksXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgoZmlsZSkgPT4gKHsgYXNzZXRfaWQ6IGZpbGUuYXNzZXRfaWQsIHVybDogZmlsZS51cmwgfSkpXG4gICAgICBpZiAoIXVwbG9hZGVkLmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHVwbG9hZCBkaWQgbm90IHJldHVybiBhbiBpbWFnZSBVUkxcIilcbiAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7XG4gICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgIG1lZGlhOiBBcnJheS5mcm9tKFxuICAgICAgICAgIG5ldyBNYXAoXG4gICAgICAgICAgICBbLi4uY3VycmVudC5tZWRpYSwgLi4udXBsb2FkZWRdLm1hcCgoaXRlbSkgPT4gW2l0ZW0udXJsLCBpdGVtXSksXG4gICAgICAgICAgKS52YWx1ZXMoKSxcbiAgICAgICAgKSxcbiAgICAgIH0pKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0b2FzdC5lcnJvcihcbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkltYWdlIHVwbG9hZCBmYWlsZWRcIixcbiAgICAgIClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0VXBsb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRldGFpbHNDb21wbGV0ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghcHJvZHVjdC50aXRsZS50cmltKCkpIHJldHVybiBmYWxzZVxuICAgIGlmICghY3VycmVuY2llcy5sZW5ndGgpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gICAgZm9yIChjb25zdCBjb25kaXRpb24gb2YgY291cG9uLnB1cmNoYXNlX2NvbmRpdGlvbnMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIWNvbmRpdGlvbi5hdHRyaWJ1dGUgfHxcbiAgICAgICAgIWNvbmRpdGlvbi5vcGVyYXRvciB8fFxuICAgICAgICAhY29uZGl0aW9uLnZhbHVlcy5sZW5ndGggfHxcbiAgICAgICAgKGNvbmRpdGlvbi5vcGVyYXRvciA9PT0gXCJlcVwiICYmIGNvbmRpdGlvbi52YWx1ZXMubGVuZ3RoICE9PSAxKSB8fFxuICAgICAgICBhdHRyaWJ1dGVzLmhhcyhjb25kaXRpb24uYXR0cmlidXRlKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgYXR0cmlidXRlcy5hZGQoY29uZGl0aW9uLmF0dHJpYnV0ZSlcbiAgICB9XG5cbiAgICBpZiAoaXNBbW91bnRUeXBlKSB7XG4gICAgICBpZiAoIWF0dHJpYnV0ZXMuaGFzKFwiY3VycmVuY3lfY29kZVwiKSkgcmV0dXJuIGZhbHNlXG4gICAgICBpZiAoIWNvdXBvbi5hbW91bnRzLmxlbmd0aCkgcmV0dXJuIGZhbHNlXG4gICAgICBpZiAoY291cG9uLmFtb3VudHMubGVuZ3RoICE9PSBlZmZlY3RpdmVDdXJyZW5jaWVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlXG4gICAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KClcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGNvdXBvbi5hbW91bnRzKSB7XG4gICAgICAgIGlmICghc3VwcG9ydGVkQ3VycmVuY3lDb2Rlcy5oYXMocm93LmN1cnJlbmN5X2NvZGUpKSByZXR1cm4gZmFsc2VcbiAgICAgICAgaWYgKHNlZW4uaGFzKHJvdy5jdXJyZW5jeV9jb2RlKSkgcmV0dXJuIGZhbHNlXG4gICAgICAgIGlmIChudW1iZXJPck51bGwocm93LmFtb3VudCkgPT0gbnVsbCkgcmV0dXJuIGZhbHNlXG4gICAgICAgIHNlZW4uYWRkKHJvdy5jdXJyZW5jeV9jb2RlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1BlcmNlbnRhZ2VUeXBlKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG51bWJlck9yTnVsbChjb3Vwb24ucGVyY2VudGFnZSlcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID4gMTAwKSByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoY291cG9uLmNvZGVfc3RyYXRlZ3kgPT09IFwic2hhcmVkX2NvZGVcIiAmJiAhY291cG9uLnNoYXJlZF9jb2RlLnRyaW0oKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGNvdXBvbi5leHBpcmF0aW9uX3R5cGUgPT09IFwiZHVyYXRpb25cIikge1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBOdW1iZXIoY291cG9uLmV4cGlyYXRpb25fZHVyYXRpb24pXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZHVyYXRpb24pIHx8IGR1cmF0aW9uIDwgMSkgcmV0dXJuIGZhbHNlXG4gICAgfSBlbHNlIGlmIChjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcImZpeGVkXCIpIHtcbiAgICAgIGNvbnN0IGV4cGlyYXRpb24gPSBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9kYXRlKVxuICAgICAgaWYgKCFjb3Vwb24uZXhwaXJhdGlvbl9kYXRlIHx8IE51bWJlci5pc05hTihleHBpcmF0aW9uLmdldFRpbWUoKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvdXBvbi5leHBpcmF0aW9uX3R5cGUgIT09IFwibm9uZVwiICYmIGNvdXBvbi5leHBpcmF0aW9uX2NhcF9hdCkge1xuICAgICAgY29uc3QgY2FwID0gbmV3IERhdGUoY291cG9uLmV4cGlyYXRpb25fY2FwX2F0KVxuICAgICAgaWYgKE51bWJlci5pc05hTihjYXAuZ2V0VGltZSgpKSkgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgbWF4SXNzdWFuY2UgPSBOdW1iZXIoY291cG9uLm1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbSlcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihtYXhJc3N1YW5jZSkgJiYgbWF4SXNzdWFuY2UgPiAwXG4gIH0sIFtcbiAgICBjb3Vwb24sXG4gICAgY3VycmVuY2llcy5sZW5ndGgsXG4gICAgZWZmZWN0aXZlQ3VycmVuY2llcy5sZW5ndGgsXG4gICAgaXNBbW91bnRUeXBlLFxuICAgIGlzUGVyY2VudGFnZVR5cGUsXG4gICAgcHJvZHVjdC50aXRsZSxcbiAgICBzdXBwb3J0ZWRDdXJyZW5jeUNvZGVzLFxuICBdKVxuXG4gIGNvbnN0IGNhbXBhaWduQ29tcGxldGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWFsbG93UHJvbW90aW9uTWlycm9yIHx8IGNhbXBhaWduLm1vZGUgPT09IFwibm9uZVwiKSByZXR1cm4gdHJ1ZVxuICAgIGlmIChjYW1wYWlnbi5tb2RlID09PSBcImV4aXN0aW5nXCIpIHJldHVybiBCb29sZWFuKGNhbXBhaWduLmNhbXBhaWduX2lkKVxuICAgIGlmICghY2FtcGFpZ24ubmFtZS50cmltKCkgfHwgIWNhbXBhaWduLmNhbXBhaWduX2lkZW50aWZpZXIudHJpbSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICByZXR1cm4gW2NhbXBhaWduLnN0YXJ0c19hdCwgY2FtcGFpZ24uZW5kc19hdF0uZXZlcnkoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIXZhbHVlKSByZXR1cm4gdHJ1ZVxuICAgICAgcmV0dXJuICFOdW1iZXIuaXNOYU4obmV3IERhdGUodmFsdWUpLmdldFRpbWUoKSlcbiAgICB9KVxuICB9LCBbYWxsb3dQcm9tb3Rpb25NaXJyb3IsIGNhbXBhaWduXSlcblxuICBjb25zdCBwcmljZXNDb21wbGV0ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY3VycmVuY2llcy5sZW5ndGggfHwgIXByb2R1Y3RQcmljZXMubGVuZ3RoKSByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gY3VycmVuY2llcy5ldmVyeSgoY3VycmVuY3kpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcHJvZHVjdC5wcmljZV9hbW91bnRzW2N1cnJlbmN5LmNvZGVdIHx8IFwiXCJcbiAgICAgIHJldHVybiAhdmFsdWUudHJpbSgpIHx8IG5vbk5lZ2F0aXZlTnVtYmVyT3JOdWxsKHZhbHVlKSAhPSBudWxsXG4gICAgfSlcbiAgfSwgW2N1cnJlbmNpZXMsIHByb2R1Y3QucHJpY2VfYW1vdW50cywgcHJvZHVjdFByaWNlcy5sZW5ndGhdKVxuXG4gIGNvbnN0IHN0ZXBWYWxpZGl0eSA9IHVzZU1lbW88UmVjb3JkPFdpemFyZFN0ZXAsIGJvb2xlYW4+PihcbiAgICAoKSA9PiAoe1xuICAgICAgZGV0YWlsczogZGV0YWlsc0NvbXBsZXRlLFxuICAgICAgb3JnYW5pemU6IHRydWUsXG4gICAgICBjYW1wYWlnbjogY2FtcGFpZ25Db21wbGV0ZSxcbiAgICAgIHByaWNlczogcHJpY2VzQ29tcGxldGUsXG4gICAgfSksXG4gICAgW2NhbXBhaWduQ29tcGxldGUsIGRldGFpbHNDb21wbGV0ZSwgcHJpY2VzQ29tcGxldGVdLFxuICApXG5cbiAgY29uc3QgYWN0aXZlU3RlcENvbXBsZXRlID0gc3RlcFZhbGlkaXR5W2FjdGl2ZVN0ZXBdXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW9wZW4gfHwgIWFjdGl2ZVN0ZXBDb21wbGV0ZSkgcmV0dXJuXG4gICAgc2V0RnVydGhlc3RTdGVwSW5kZXgoKGN1cnJlbnQpID0+XG4gICAgICBNYXRoLm1heChcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgTWF0aC5taW4oY3VycmVudFN0ZXBJbmRleCArIDEsIHZpc2libGVTdGVwcy5sZW5ndGggLSAxKSxcbiAgICAgICksXG4gICAgKVxuICB9LCBbYWN0aXZlU3RlcENvbXBsZXRlLCBjdXJyZW50U3RlcEluZGV4LCBvcGVuLCB2aXNpYmxlU3RlcHMubGVuZ3RoXSlcblxuICBjb25zdCBpc1N0ZXBEaXNhYmxlZCA9IChpbmRleDogbnVtYmVyKSA9PlxuICAgIGluZGV4ID4gZnVydGhlc3RTdGVwSW5kZXggfHxcbiAgICB2aXNpYmxlU3RlcHMuc2xpY2UoMCwgaW5kZXgpLnNvbWUoKHByZXZpb3VzKSA9PiAhc3RlcFZhbGlkaXR5W3ByZXZpb3VzXSlcblxuICBjb25zdCB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICBpZiAoIXByb2R1Y3QudGl0bGUudHJpbSgpKSB0aHJvdyBuZXcgRXJyb3IoXCJQcm9kdWN0IHRpdGxlIGlzIHJlcXVpcmVkXCIpXG4gICAgaWYgKCFjdXJyZW5jaWVzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWRkIGEgc3VwcG9ydGVkIGN1cnJlbmN5IHRvIHRoZSBzdG9yZSBiZWZvcmUgY29udGludWluZ1wiKVxuICAgIH1cbiAgICBjb25zdCBpbnZhbGlkUHJpY2UgPSBjdXJyZW5jaWVzLnNvbWUoKGN1cnJlbmN5KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHByb2R1Y3QucHJpY2VfYW1vdW50c1tjdXJyZW5jeS5jb2RlXSB8fCBcIlwiXG4gICAgICByZXR1cm4gdmFsdWUudHJpbSgpICYmIG5vbk5lZ2F0aXZlTnVtYmVyT3JOdWxsKHZhbHVlKSA9PSBudWxsXG4gICAgfSlcbiAgICBpZiAoaW52YWxpZFByaWNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9kdWN0IHByaWNlcyBtdXN0IGJlIDAgb3IgbW9yZVwiKVxuICAgIH1cbiAgICBpZiAoIXByb2R1Y3RQcmljZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZGQgYXQgbGVhc3Qgb25lIHByb2R1Y3QgcHJpY2VcIilcbiAgICB9XG4gICAgaWYgKGlzQW1vdW50VHlwZSkge1xuICAgICAgaWYgKCFjb3Vwb24uYW1vdW50cy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWRkIGF0IGxlYXN0IG9uZSBjb3Vwb24gdmFsdWVcIilcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKVxuICAgICAgY29uc3QgY3VycmVuY3lDb25kaXRpb24gPSBjb3Vwb24ucHVyY2hhc2VfY29uZGl0aW9ucy5maW5kKFxuICAgICAgICAoY29uZGl0aW9uKSA9PiBjb25kaXRpb24uYXR0cmlidXRlID09PSBcImN1cnJlbmN5X2NvZGVcIixcbiAgICAgIClcbiAgICAgIGlmICghY3VycmVuY3lDb25kaXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWRkIGEgQ3VycmVuY3kgQ29kZSBwdXJjaGFzZSBjb25kaXRpb25cIilcbiAgICAgIH1cbiAgICAgIGlmIChjb3Vwb24uYW1vdW50cy5sZW5ndGggIT09IGVmZmVjdGl2ZUN1cnJlbmNpZXMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkNvdXBvbiB2YWx1ZXMgbXVzdCBtYXRjaCBldmVyeSBlZmZlY3RpdmUgY3VycmVuY3kgY29uZGl0aW9uIHZhbHVlXCIsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGNvdXBvbi5hbW91bnRzKSB7XG4gICAgICAgIGlmICghc3VwcG9ydGVkQ3VycmVuY3lDb2Rlcy5oYXMocm93LmN1cnJlbmN5X2NvZGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0IGFuIGF2YWlsYWJsZSBjb3Vwb24gY3VycmVuY3lcIilcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vlbi5oYXMocm93LmN1cnJlbmN5X2NvZGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291cG9uIHZhbHVlIGN1cnJlbmNpZXMgY2Fubm90IGJlIGR1cGxpY2F0ZWRcIilcbiAgICAgICAgfVxuICAgICAgICBpZiAobnVtYmVyT3JOdWxsKHJvdy5hbW91bnQpID09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3Vwb24gdmFsdWVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcIilcbiAgICAgICAgfVxuICAgICAgICBzZWVuLmFkZChyb3cuY3VycmVuY3lfY29kZSlcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc2VlbkF0dHJpYnV0ZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICAgIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvdXBvbi5wdXJjaGFzZV9jb25kaXRpb25zKSB7XG4gICAgICBpZiAoIWNvbmRpdGlvbi5hdHRyaWJ1dGUgfHwgIWNvbmRpdGlvbi5vcGVyYXRvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb21wbGV0ZSBldmVyeSBwdXJjaGFzZSBjb25kaXRpb25cIilcbiAgICAgIH1cbiAgICAgIGlmICghY29uZGl0aW9uLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0IGF0IGxlYXN0IG9uZSB2YWx1ZSBmb3IgZXZlcnkgcHVyY2hhc2UgY29uZGl0aW9uXCIpXG4gICAgICB9XG4gICAgICBpZiAoY29uZGl0aW9uLm9wZXJhdG9yID09PSBcImVxXCIgJiYgY29uZGl0aW9uLnZhbHVlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXF1YWxzIGNvbmRpdGlvbnMgcmVxdWlyZSBleGFjdGx5IG9uZSB2YWx1ZVwiKVxuICAgICAgfVxuICAgICAgaWYgKHNlZW5BdHRyaWJ1dGVzLmhhcyhjb25kaXRpb24uYXR0cmlidXRlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQdXJjaGFzZSBjb25kaXRpb24gYXR0cmlidXRlcyBjYW5ub3QgYmUgZHVwbGljYXRlZFwiKVxuICAgICAgfVxuICAgICAgc2VlbkF0dHJpYnV0ZXMuYWRkKGNvbmRpdGlvbi5hdHRyaWJ1dGUpXG4gICAgfVxuICAgIGlmIChpc1BlcmNlbnRhZ2VUeXBlKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG51bWJlck9yTnVsbChjb3Vwb24ucGVyY2VudGFnZSlcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID4gMTAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdXBvbiB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAwIHBlcmNlbnRcIilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvdXBvbi5jb2RlX3N0cmF0ZWd5ID09PSBcInNoYXJlZF9jb2RlXCIgJiYgIWNvdXBvbi5zaGFyZWRfY29kZS50cmltKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgc2hhcmVkIGNvdXBvbiBjb2RlIGlzIHJlcXVpcmVkXCIpXG4gICAgfVxuICAgIGlmIChjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcImZpeGVkXCIpIHtcbiAgICAgIGNvbnN0IGV4cGlyYXRpb24gPSBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9kYXRlKVxuICAgICAgaWYgKCFjb3Vwb24uZXhwaXJhdGlvbl9kYXRlIHx8IE51bWJlci5pc05hTihleHBpcmF0aW9uLmdldFRpbWUoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSB2YWxpZCBmaXhlZCBleHBpcmF0aW9uIGRhdGUgaXMgcmVxdWlyZWRcIilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvdXBvbi5leHBpcmF0aW9uX3R5cGUgIT09IFwibm9uZVwiICYmIGNvdXBvbi5leHBpcmF0aW9uX2NhcF9hdCkge1xuICAgICAgY29uc3QgY2FwID0gbmV3IERhdGUoY291cG9uLmV4cGlyYXRpb25fY2FwX2F0KVxuICAgICAgaWYgKE51bWJlci5pc05hTihjYXAuZ2V0VGltZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHZhbGlkIGV4cGlyYXRpb24gY2FwIGRhdGUgaXMgcmVxdWlyZWRcIilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNhbXBhaWduLm1vZGUgPT09IFwiZXhpc3RpbmdcIiAmJiAhY2FtcGFpZ24uY2FtcGFpZ25faWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlbGVjdCBhbiBleGlzdGluZyBjYW1wYWlnblwiKVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBjYW1wYWlnbi5tb2RlID09PSBcIm5ld1wiICYmXG4gICAgICAoIWNhbXBhaWduLm5hbWUudHJpbSgpIHx8ICFjYW1wYWlnbi5jYW1wYWlnbl9pZGVudGlmaWVyLnRyaW0oKSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbXBhaWduIG5hbWUgYW5kIGlkZW50aWZpZXIgYXJlIHJlcXVpcmVkXCIpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2F2ZSA9IGFzeW5jICgpID0+IHtcbiAgICBzZXRTYXZpbmcodHJ1ZSlcbiAgICB0cnkge1xuICAgICAgdmFsaWRhdGUoKVxuICAgICAgY29uc3QgYmVuZWZpdFR5cGUgPSBiZW5lZml0VHlwZUZyb21Db3Vwb25UeXBlKGNvdXBvbi50eXBlKVxuICAgICAgY29uc3QgdGFyZ2V0VHlwZSA9XG4gICAgICAgIGNvdXBvbi50eXBlID09PSBcImFtb3VudF9vZmZfb3JkZXJcIiB8fFxuICAgICAgICBjb3Vwb24udHlwZSA9PT0gXCJwZXJjZW50YWdlX29mZl9vcmRlclwiXG4gICAgICAgICAgPyBcIm9yZGVyXCJcbiAgICAgICAgICA6IFwiaXRlbXNcIlxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgcHJvZHVjdDoge1xuICAgICAgICAgIHRpdGxlOiBwcm9kdWN0LnRpdGxlLnRyaW0oKSxcbiAgICAgICAgICBzdWJ0aXRsZTogcHJvZHVjdC5zdWJ0aXRsZS50cmltKCkgfHwgbnVsbCxcbiAgICAgICAgICBoYW5kbGU6IHByb2R1Y3QuaGFuZGxlLnRyaW0oKSB8fCBudWxsLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcm9kdWN0LmRlc2NyaXB0aW9uLnRyaW0oKSB8fCBudWxsLFxuICAgICAgICAgIHN0YXR1czogcHJvZHVjdFN0YXR1c0Zyb21Db3Vwb25TdGF0dXMoY291cG9uLnByb21vdGlvbl9zdGF0dXMpLFxuICAgICAgICAgIHRodW1ibmFpbDogcHJvZHVjdC5tZWRpYVswXT8udXJsIHx8IG51bGwsXG4gICAgICAgICAgdGh1bWJuYWlsX2Fzc2V0X2lkOiBwcm9kdWN0Lm1lZGlhWzBdPy5hc3NldF9pZCB8fCBudWxsLFxuICAgICAgICAgIGltYWdlczogcHJvZHVjdC5tZWRpYS5zbGljZSgxKS5tYXAoKG1lZGlhKSA9PiAoe1xuICAgICAgICAgICAgdXJsOiBtZWRpYS51cmwsXG4gICAgICAgICAgICAuLi4obWVkaWEuYXNzZXRfaWQgPyB7IGFzc2V0X2lkOiBtZWRpYS5hc3NldF9pZCB9IDoge30pLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgICBkaXNjb3VudGFibGU6IHByb2R1Y3QuZGlzY291bnRhYmxlLFxuICAgICAgICAgIHR5cGVfaWQ6IHByb2R1Y3QudHlwZV9pZCB8fCBudWxsLFxuICAgICAgICAgIGNvbGxlY3Rpb25faWQ6IHByb2R1Y3QuY29sbGVjdGlvbl9pZCB8fCBudWxsLFxuICAgICAgICAgIGNhdGVnb3JpZXM6IHByb2R1Y3QuY2F0ZWdvcnlfaWQgPyBbeyBpZDogcHJvZHVjdC5jYXRlZ29yeV9pZCB9XSA6IFtdLFxuICAgICAgICAgIHRhZ3M6IHByb2R1Y3QudGFnX2lkID8gW3sgaWQ6IHByb2R1Y3QudGFnX2lkIH1dIDogW10sXG4gICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGl0bGU6IFwiRGVmYXVsdFwiLFxuICAgICAgICAgICAgICBza3U6IHByb2R1Y3Quc2t1LnRyaW0oKSB8fCBudWxsLFxuICAgICAgICAgICAgICBtYW5hZ2VfaW52ZW50b3J5OiBmYWxzZSxcbiAgICAgICAgICAgICAgYWxsb3dfYmFja29yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBwcmljZXM6IHByb2R1Y3RQcmljZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvdXBvbjoge1xuICAgICAgICAgIGVuYWJsZWQ6IGNvdXBvbi5lbmFibGVkLFxuICAgICAgICAgIGJlbmVmaXRfdHlwZTogYmVuZWZpdFR5cGUsXG4gICAgICAgICAgcHVyY2hhc2VfY29uZGl0aW9uczogY291cG9uLnB1cmNoYXNlX2NvbmRpdGlvbnMubWFwKChjb25kaXRpb24pID0+ICh7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6IGNvbmRpdGlvbi5hdHRyaWJ1dGUsXG4gICAgICAgICAgICBvcGVyYXRvcjogY29uZGl0aW9uLm9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWVzOiBjb25kaXRpb24udmFsdWVzLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgICBhbW91bnRzOiBpc0Ftb3VudFR5cGVcbiAgICAgICAgICAgID8gY291cG9uLmFtb3VudHMubWFwKChyb3cpID0+ICh7XG4gICAgICAgICAgICAgIGFtb3VudDogbnVtYmVyT3JOdWxsKHJvdy5hbW91bnQpLFxuICAgICAgICAgICAgICBjdXJyZW5jeV9jb2RlOiByb3cuY3VycmVuY3lfY29kZSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIGFtb3VudDogbnVsbCxcbiAgICAgICAgICBwZXJjZW50YWdlOiBpc1BlcmNlbnRhZ2VUeXBlID8gbnVtYmVyT3JOdWxsKGNvdXBvbi5wZXJjZW50YWdlKSA6IG51bGwsXG4gICAgICAgICAgY3VycmVuY3lfY29kZTogbnVsbCxcbiAgICAgICAgICBjb2RlX3N0cmF0ZWd5OiBjb3Vwb24uY29kZV9zdHJhdGVneSxcbiAgICAgICAgICBjb2RlX3ByZWZpeDpcbiAgICAgICAgICAgIGNvdXBvbi5jb2RlX3N0cmF0ZWd5ID09PSBcInVuaXF1ZV9jb2RlXCJcbiAgICAgICAgICAgICAgPyBjb3Vwb24uY29kZV9wcmVmaXgudHJpbSgpIHx8IFwiQ09VUE9OXCJcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIHNoYXJlZF9jb2RlOlxuICAgICAgICAgICAgY291cG9uLmNvZGVfc3RyYXRlZ3kgPT09IFwic2hhcmVkX2NvZGVcIlxuICAgICAgICAgICAgICA/IGNvdXBvbi5zaGFyZWRfY29kZS50cmltKClcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIGV4cGlyYXRpb25fcG9saWN5OlxuICAgICAgICAgICAgY291cG9uLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJub25lXCJcbiAgICAgICAgICAgICAgPyB7IHR5cGU6IFwibm9uZVwiIH1cbiAgICAgICAgICAgICAgOiBjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcImZpeGVkXCJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZml4ZWRcIixcbiAgICAgICAgICAgICAgICAgIGV4cGlyZXNfYXQ6IG5ldyBEYXRlKGNvdXBvbi5leHBpcmF0aW9uX2RhdGUpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICBjYXBfYnlfY2FtcGFpZ246IGNvdXBvbi5leHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbixcbiAgICAgICAgICAgICAgICAgIGNhcF9hdDogY291cG9uLmV4cGlyYXRpb25fY2FwX2F0XG4gICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoY291cG9uLmV4cGlyYXRpb25fY2FwX2F0KS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcIm1vbnRoX2VuZFwiXG4gICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJtb250aF9lbmRcIixcbiAgICAgICAgICAgICAgICAgICAgdGltZV9wb2xpY3k6IGNvdXBvbi5leHBpcmF0aW9uX3RpbWVfcG9saWN5LFxuICAgICAgICAgICAgICAgICAgICBjYXBfYnlfY2FtcGFpZ246IGNvdXBvbi5leHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbixcbiAgICAgICAgICAgICAgICAgICAgY2FwX2F0OiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXRcbiAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKGNvdXBvbi5leHBpcmF0aW9uX2NhcF9hdCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBOdW1iZXIoY291cG9uLmV4cGlyYXRpb25fZHVyYXRpb24pIHx8IDMwLFxuICAgICAgICAgICAgICAgICAgZHVyYXRpb25fdW5pdDogY291cG9uLmV4cGlyYXRpb25fZHVyYXRpb25fdW5pdCxcbiAgICAgICAgICAgICAgICAgIHRpbWVfcG9saWN5OiBjb3Vwb24uZXhwaXJhdGlvbl90aW1lX3BvbGljeSxcbiAgICAgICAgICAgICAgICAgIGNhcF9ieV9jYW1wYWlnbjogY291cG9uLmV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduLFxuICAgICAgICAgICAgICAgICAgY2FwX2F0OiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXRcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXQpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgbWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtOlxuICAgICAgICAgICAgTnVtYmVyKGNvdXBvbi5tYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW0pIHx8IDEsXG4gICAgICAgICAgcHJvbW90aW9uX3RlbXBsYXRlOlxuICAgICAgICAgICAgYmVuZWZpdFR5cGUgPT09IFwiZml4ZWRfYW1vdW50XCIgfHwgYmVuZWZpdFR5cGUgPT09IFwicGVyY2VudGFnZVwiXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uX21ldGhvZDoge1xuICAgICAgICAgICAgICAgICAgdGFyZ2V0X3R5cGU6IHRhcmdldFR5cGUsXG4gICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uOlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID09PSBcIm9yZGVyXCIgPyBcImFjcm9zc1wiIDogY291cG9uLmFsbG9jYXRpb24sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgcHJvbW90aW9uX3N0YXR1czogY291cG9uLnByb21vdGlvbl9zdGF0dXMsXG4gICAgICAgICAgLi4uKGFsbG93UHJvbW90aW9uTWlycm9yXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcHJvbW90aW9uX21pcnJvcl9tb2RlOlxuICAgICAgICAgICAgICAgIGJlbmVmaXRUeXBlID09PSBcImJ1eV9nZXRcIiB8fFxuICAgICAgICAgICAgICAgICAgKGJlbmVmaXRUeXBlID09PSBcImZpeGVkX2Ftb3VudFwiICYmIGNvdXBvbi5hbW91bnRzLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgICA/IFwibm9uZVwiXG4gICAgICAgICAgICAgICAgICA6IGNvdXBvbi5wcm9tb3Rpb25fbWlycm9yX21vZGUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgY2FtcGFpZ246IGFsbG93UHJvbW90aW9uTWlycm9yXG4gICAgICAgICAgPyBjYW1wYWlnbi5tb2RlID09PSBcImV4aXN0aW5nXCJcbiAgICAgICAgICAgID8geyBtb2RlOiBcImV4aXN0aW5nXCIsIGNhbXBhaWduX2lkOiBjYW1wYWlnbi5jYW1wYWlnbl9pZCB9XG4gICAgICAgICAgICA6IGNhbXBhaWduLm1vZGUgPT09IFwibmV3XCJcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgbW9kZTogXCJuZXdcIixcbiAgICAgICAgICAgICAgICBjYW1wYWlnbjoge1xuICAgICAgICAgICAgICAgICAgbmFtZTogY2FtcGFpZ24ubmFtZSxcbiAgICAgICAgICAgICAgICAgIGNhbXBhaWduX2lkZW50aWZpZXI6IGNhbXBhaWduLmNhbXBhaWduX2lkZW50aWZpZXIsXG4gICAgICAgICAgICAgICAgICBzdGFydHNfYXQ6IGNhbXBhaWduLnN0YXJ0c19hdFxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKGNhbXBhaWduLnN0YXJ0c19hdCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICBlbmRzX2F0OiBjYW1wYWlnbi5lbmRzX2F0XG4gICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoY2FtcGFpZ24uZW5kc19hdCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IHsgbW9kZTogXCJub25lXCIgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBzZWxsZXJfaWQ6IHByb2R1Y3Quc2VsbGVyX2lkIHx8IG51bGwsXG4gICAgICAgIHZhcmlhbnRfb3ZlcnJpZGVzOiBbXSxcbiAgICAgIH1cblxuICAgICAgYXdhaXQgYXBpRmV0Y2goXG4gICAgICAgIHJvd1xuICAgICAgICAgID8gYCR7YXBpQmFzZX0vY291cG9uLXByb2R1Y3RzLyR7cm93LnByb2R1Y3QuaWR9YFxuICAgICAgICAgIDogYCR7YXBpQmFzZX0vY291cG9uLXByb2R1Y3RzYCxcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogcm93ID8gXCJQQVRDSFwiIDogXCJQT1NUXCIsXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgICB0b2FzdC5zdWNjZXNzKHJvdyA/IFwiQ291cG9uIHByb2R1Y3QgdXBkYXRlZFwiIDogXCJDb3Vwb24gcHJvZHVjdCBjcmVhdGVkXCIpXG4gICAgICBvbk9wZW5DaGFuZ2UoZmFsc2UpXG4gICAgICBhd2FpdCBvblNhdmVkKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdG9hc3QuZXJyb3IoXG4gICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICA6IFwiRmFpbGVkIHRvIHNhdmUgY291cG9uIHByb2R1Y3RcIixcbiAgICAgIClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U2F2aW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0ZXBTdGF0dXMgPSAoc3RlcDogV2l6YXJkU3RlcCkgPT4ge1xuICAgIGNvbnN0IGluZGV4ID0gdmlzaWJsZVN0ZXBzLmluZGV4T2Yoc3RlcClcbiAgICBpZiAoaW5kZXggPCBjdXJyZW50U3RlcEluZGV4ICYmIHN0ZXBWYWxpZGl0eVtzdGVwXSkge1xuICAgICAgcmV0dXJuIFwiY29tcGxldGVkXCIgYXMgY29uc3RcbiAgICB9XG4gICAgaWYgKGluZGV4ID09PSBjdXJyZW50U3RlcEluZGV4KSByZXR1cm4gXCJpbi1wcm9ncmVzc1wiIGFzIGNvbnN0XG4gICAgcmV0dXJuIFwibm90LXN0YXJ0ZWRcIiBhcyBjb25zdFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Rm9jdXNNb2RhbCBvcGVuPXtvcGVufSBvbk9wZW5DaGFuZ2U9e29uT3BlbkNoYW5nZX0+XG4gICAgICA8Rm9jdXNNb2RhbC5Db250ZW50IHN0eWxlPXttb2RhbENvbnRlbnRTdHlsZX0+XG4gICAgICAgIDxGb2N1c01vZGFsLlRpdGxlIHN0eWxlPXt2aXN1YWxseUhpZGRlblN0eWxlfT5cbiAgICAgICAgICB7cm93ID8gXCJFZGl0IENvdXBvbiBQcm9kdWN0XCIgOiBcIkNyZWF0ZSBDb3Vwb24gUHJvZHVjdFwifVxuICAgICAgICA8L0ZvY3VzTW9kYWwuVGl0bGU+XG4gICAgICAgIDxQcm9ncmVzc1RhYnNcbiAgICAgICAgICB2YWx1ZT17YWN0aXZlU3RlcH1cbiAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSB2YWx1ZSBhcyBXaXphcmRTdGVwXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHZpc2libGVTdGVwcy5pbmRleE9mKHN0ZXApXG4gICAgICAgICAgICBpZiAoIWlzU3RlcERpc2FibGVkKGluZGV4KSkgc2V0QWN0aXZlU3RlcChzdGVwKVxuICAgICAgICAgIH19XG4gICAgICAgICAgc3R5bGU9e21vZGFsV2l6YXJkU3R5bGV9XG4gICAgICAgID5cbiAgICAgICAgICA8Rm9jdXNNb2RhbC5IZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1teS0yIHctZnVsbCBib3JkZXItbFwiPlxuICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkxpc3QgY2xhc3NOYW1lPVwianVzdGlmeS1zdGFydC1zdGFydCBmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICB7dmlzaWJsZVN0ZXBzLm1hcCgoc3RlcCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuVHJpZ2dlclxuICAgICAgICAgICAgICAgICAgICBrZXk9e3N0ZXB9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzdGVwfVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM9e3N0ZXBTdGF0dXMoc3RlcCl9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N0ZXBEaXNhYmxlZChpbmRleCl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1heC13LVsyMDBweF0gdHJ1bmNhdGVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7c3RlcFswXS50b1VwcGVyQ2FzZSgpICsgc3RlcC5zbGljZSgxKX1cbiAgICAgICAgICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzLlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzLkxpc3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0ZvY3VzTW9kYWwuSGVhZGVyPlxuXG4gICAgICAgICAgPEZvY3VzTW9kYWwuQm9keSBjbGFzc05hbWU9XCJvdmVyZmxvdy1oaWRkZW4gcC0wXCIgc3R5bGU9e21vZGFsQm9keVN0eWxlfT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICAgIGFjdGl2ZVN0ZXAgPT09IFwicHJpY2VzXCJcbiAgICAgICAgICAgICAgICAgID8geyBoZWlnaHQ6IFwiMTAwJVwiLCBvdmVyZmxvdzogXCJoaWRkZW5cIiwgd2lkdGg6IFwiMTAwJVwiIH1cbiAgICAgICAgICAgICAgICAgIDogbW9kYWxTY3JvbGxTdHlsZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgICAgICBhY3RpdmVTdGVwID09PSBcInByaWNlc1wiXG4gICAgICAgICAgICAgICAgICAgID8geyBoZWlnaHQ6IFwiMTAwJVwiLCB3aWR0aDogXCIxMDAlXCIgfVxuICAgICAgICAgICAgICAgICAgICA6IG1vZGFsRm9ybVN0eWxlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2FjdGl2ZVN0ZXAgPT09IFwiZGV0YWlsc1wiICYmIChcbiAgICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuQ29udGVudCB2YWx1ZT1cImRldGFpbHNcIiBzdHlsZT17c3RhY2tTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgIDxIZWFkaW5nIGxldmVsPVwiaDFcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7cm93ID8gXCJFZGl0IENvdXBvbiBQcm9kdWN0XCIgOiBcIkNyZWF0ZSBDb3Vwb24gUHJvZHVjdFwifVxuICAgICAgICAgICAgICAgICAgICA8L0hlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgIDxEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiR2VuZXJhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3RocmVlQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiV2ludGVyIGphY2tldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU3VidGl0bGVcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3Quc3VidGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXYXJtIGFuZCBjb3p5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJIYW5kbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwPVwiVGhlIFVSTC1mcmllbmRseSBpZGVudGlmaWVyIGZvciB0aGlzIHByb2R1Y3QuIElmIGxlZnQgZW1wdHksIE1lZHVzYSBnZW5lcmF0ZXMgaXQgZnJvbSB0aGUgdGl0bGUuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhbmRsZUlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3QuaGFuZGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoaGFuZGxlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgaGFuZGxlIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRGVzY3JpcHRpb25cIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdC5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBIHdhcm0gYW5kIGNvenkgamFja2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJNZWRpYVwiIG9wdGlvbmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1lZGlhVXBsb2FkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzVXBsb2FkaW5nPXt1cGxvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhPXtwcm9kdWN0Lm1lZGlhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblVwbG9hZD17KGZpbGVzKSA9PiB2b2lkIHVwbG9hZE1lZGlhKGZpbGVzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25SZW1vdmU9eyhtZWRpYSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhOiBjdXJyZW50Lm1lZGlhLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lZGlhLmFzc2V0X2lkICYmIGl0ZW0uYXNzZXRfaWQgIT09IG1lZGlhLmFzc2V0X2lkKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghbWVkaWEuYXNzZXRfaWQgJiYgaXRlbS51cmwgIT09IG1lZGlhLnVybCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU0tVXCIgb3B0aW9uYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3Quc2t1fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNPVVBPTi0wMDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8RGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgICA8UHVyY2hhc2VDb25kaXRpb25zRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICBmaXhlZEFtb3VudD17aXNBbW91bnRUeXBlfVxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5wdXJjaGFzZV9jb25kaXRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVQdXJjaGFzZUNvbmRpdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5Db250ZW50PlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICB7YWN0aXZlU3RlcCA9PT0gXCJvcmdhbml6ZVwiICYmIChcbiAgICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuQ29udGVudCB2YWx1ZT1cIm9yZ2FuaXplXCIgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIk9yZ2FuaXplXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cGFuZWxTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAteC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgd2VpZ2h0PVwicGx1c1wiPkRpc2NvdW50YWJsZTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvdyBwcm9tb3Rpb25zIHRvIGRpc2NvdW50IHRoaXMgcHJvZHVjdCdzIHNhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtwcm9kdWN0LmRpc2NvdW50YWJsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhkaXNjb3VudGFibGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNjb3VudGFibGU6IEJvb2xlYW4oZGlzY291bnRhYmxlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3R3b0NvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YWxsb3dQcm9tb3Rpb25NaXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJTZWxsZXJcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdC5zZWxsZXJfaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnNlbGxlcnMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHNlbGxlcl9pZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgc2VsbGVyX2lkIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiVHlwZVwiIG9wdGlvbmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3QudHlwZV9pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnByb2R1Y3RfdHlwZXMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh0eXBlX2lkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgdHlwZV9pZCB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ29sbGVjdGlvblwiIG9wdGlvbmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3QuY29sbGVjdGlvbl9pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnByb2R1Y3RfY29sbGVjdGlvbnMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhjb2xsZWN0aW9uX2lkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDYXRlZ29yeVwiIG9wdGlvbmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3QuY2F0ZWdvcnlfaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5wcm9kdWN0X2NhdGVnb3JpZXMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhjYXRlZ29yeV9pZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGNhdGVnb3J5X2lkIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJUYWdcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LnRhZ19pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnByb2R1Y3RfdGFncyB8fCBbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHRhZ19pZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIHRhZ19pZCB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5Db250ZW50PlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICB7YWN0aXZlU3RlcCA9PT0gXCJkZXRhaWxzXCIgJiYgKFxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyAuLi5zdGFja1N0eWxlLCBtYXJnaW5Ub3A6IDI0IH19PlxuICAgICAgICAgICAgICAgICAgICA8RGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgICA8U2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ291cG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1cIkNvbmZpZ3VyZSB0aGUgY291cG9uIGlzc3VlZCB3aGVuIHRoaXMgcHJvZHVjdCBpcyBwdXJjaGFzZWQuXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3BhbmVsU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLXgtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHdlaWdodD1cInBsdXNcIj5Db3Vwb24gaXNzdWFuY2U8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXNzdWUgY291cG9ucyB3aGVuIGN1c3RvbWVycyBwdXJjaGFzZSB0aGlzIHByb2R1Y3QuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NvdXBvbi5lbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGVuYWJsZWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiVHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhZGlvR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi50eXBlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodHlwZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDb3Vwb25UeXBlKHR5cGUgYXMgQ291cG9uVHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZUNob2ljZXMubWFwKChjaG9pY2UpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9Hcm91cC5DaG9pY2VCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17Y2hvaWNlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Nob2ljZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtjaG9pY2UubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17Y2hvaWNlLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9SYWRpb0dyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiU3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLnByb21vdGlvbl9zdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyhwcm9tb3Rpb25fc3RhdHVzKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25fc3RhdHVzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25fc3RhdHVzIGFzIFByb21vdGlvblN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhdHVzQ2hvaWNlcy5tYXAoKGNob2ljZSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSYWRpb0dyb3VwLkNob2ljZUJveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtjaG9pY2UudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2hvaWNlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e2Nob2ljZS5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtjaG9pY2UuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1JhZGlvR3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgeyhpc0Ftb3VudFR5cGUgfHwgaXNQZXJjZW50YWdlVHlwZSkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb24gdGl0bGU9e2lzQW1vdW50VHlwZSA/IFwiQ291cG9uIFZhbHVlc1wiIDogXCJWYWx1ZVwifT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2lzQW1vdW50VHlwZSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvdXBvbi5hbW91bnRzLm1hcCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW5jeSA9IGN1cnJlbmNpZXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5jb2RlID09PSByb3cuY3VycmVuY3lfY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtyb3cua2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic2hhZG93LWVsZXZhdGlvbi1jYXJkLXJlc3QgYmctdWktYmctY29tcG9uZW50IHJvdW5kZWQtbWQgcHgtNCBweS0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyb3cuY3VycmVuY3lfY29kZS50b1VwcGVyQ2FzZSgpfSBDb3Vwb24gVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW5jeT8ubmFtZSB8fCByb3cuY3VycmVuY3lfY29kZS50b1VwcGVyQ2FzZSgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEN1cnJlbmN5QW1vdW50RmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmNpZXM9e2N1cnJlbmNpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeUNvZGU9e3Jvdy5jdXJyZW5jeV9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Jvdy5hbW91bnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGFtb3VudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1vdW50czogY3VycmVudC5hbW91bnRzLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPT09IHJvd0luZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7IC4uLml0ZW0sIGFtb3VudCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyFjb3Vwb24uYW1vdW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IGF0IGxlYXN0IG9uZSBlZmZlY3RpdmUgQ3VycmVuY3kgQ29kZSBjb25kaXRpb24gdmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ291cG9uIFZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UGVyY2VudGFnZUlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24ucGVyY2VudGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhwZXJjZW50YWdlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgICAgICAgIHtpc0l0ZW1TY29wZWREaXNjb3VudCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiQWxsb2NhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSYWRpb0dyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLmFsbG9jYXRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsoYWxsb2NhdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbjogYWxsb2NhdGlvbiBhcyBDb3Vwb25BbGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt0d29Db2x1bW5HcmlkU3R5bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJhZGlvR3JvdXAuQ2hvaWNlQm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiZWFjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiRWFjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPVwiQXBwbGllcyB2YWx1ZSBvbiBlYWNoIGl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSYWRpb0dyb3VwLkNob2ljZUJveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIm9uY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIk9uY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1cIkxpbWl0IGRpc2NvdW50IHRvIG1heCBxdWFudGl0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUmFkaW9Hcm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkV4cGlyYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249XCJDb250cm9sIHdoZW4gaXNzdWVkIGNvdXBvbnMgZXhwaXJlLlwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhwaXJhdGlvbiBwb2xpY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLmV4cGlyYXRpb25fdHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyhleHBpcmF0aW9uX3R5cGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fdHlwZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fdHlwZSBhcyBFeHBpcmF0aW9uUG9saWN5VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gZXhwaXJhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJtb250aF9lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmQgb2Ygc2FtZSBtb250aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJkdXJhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1cmF0aW9uIGFmdGVyIGlzc3VlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImZpeGVkXCI+Rml4ZWQgZGF0ZTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Y291cG9uLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJkdXJhdGlvblwiID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJEdXJhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5leHBpcmF0aW9uX2R1cmF0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fZHVyYXRpb246IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJEdXJhdGlvbiB1bml0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLmV4cGlyYXRpb25fZHVyYXRpb25fdW5pdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsoZXhwaXJhdGlvbl9kdXJhdGlvbl91bml0KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX2R1cmF0aW9uX3VuaXQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbl9kdXJhdGlvbl91bml0IGFzIEV4cGlyYXRpb25EdXJhdGlvblVuaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlRyaWdnZXI+PFNlbGVjdC5WYWx1ZSAvPjwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZGF5c1wiPkRheXM8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwibW9udGhzXCI+TW9udGhzPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcImZpeGVkXCIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhwaXJlcyBhdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24uZXhwaXJhdGlvbl9kYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX2RhdGU6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyhjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcImR1cmF0aW9uXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcIm1vbnRoX2VuZFwiKSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhwaXJhdGlvbiB0aW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24uZXhwaXJhdGlvbl90aW1lX3BvbGljeX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KGV4cGlyYXRpb25fdGltZV9wb2xpY3kpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fdGltZV9wb2xpY3k6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fdGltZV9wb2xpY3kgYXMgRXhwaXJhdGlvblRpbWVQb2xpY3ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPjxTZWxlY3QuVmFsdWUgLz48L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZGF5X2VuZFwiPkVuZCBvZiBkYXk8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImV4YWN0bHlcIj5FeGFjdGx5PC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtjb3Vwb24uZXhwaXJhdGlvbl90eXBlICE9PSBcIm5vbmVcIiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNhcCBleHBpcmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLXgtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgLi4ucGFuZWxTdHlsZSwgcGFkZGluZzogXCI4cHggMTJweFwiIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW1wYWlnbiBlbmQgb3IgY2FwIGRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y291cG9uLmV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWdufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbjogQm9vbGVhbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkV4cGlyYXRpb24gY2FwIGRhdGVcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNvdXBvbi5leHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLmV4cGlyYXRpb25fY2FwX2F0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fY2FwX2F0OiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1cIkNob29zZSB3aGV0aGVyIGV2ZXJ5IGlzc3VlZCBjb3Vwb24gaXMgdW5pcXVlIG9yIHNoYXJlcyBvbmUgY29kZS5cIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3R3b0NvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNvZGUgc3RyYXRlZ3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLmNvZGVfc3RyYXRlZ3l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsoY29kZV9zdHJhdGVneSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9zdHJhdGVneTogY29kZV9zdHJhdGVneSBhcyBDb2RlU3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwidW5pcXVlX2NvZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmlxdWUgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJzaGFyZWRfY29kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYXJlZCBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Y291cG9uLmNvZGVfc3RyYXRlZ3kgPT09IFwidW5pcXVlX2NvZGVcIiA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDb2RlIHByZWZpeFwiIG9wdGlvbmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24uY29kZV9wcmVmaXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ09VUE9OXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9wcmVmaXg6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlNoYXJlZCBjb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5zaGFyZWRfY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTVU1NRVIxNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZF9jb2RlOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiSXNzdWFuY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3R3b0NvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIk1heCBpc3N1YW5jZSBwZXIgaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLm1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7YWxsb3dQcm9tb3Rpb25NaXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbW91bnRUeXBlICYmIGNvdXBvbi5hbW91bnRzLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlByb21vdGlvbiBtaXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24ucHJvbW90aW9uX21pcnJvcl9tb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjb3Vwb24udHlwZSA9PT0gXCJidXlfeF9nZXRfeVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyhwcm9tb3Rpb25fbWlycm9yX21vZGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21vdGlvbl9taXJyb3JfbW9kZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25fbWlycm9yX21vZGUgYXMgTWlycm9yTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cIm5vbmVcIj5Ob25lPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cIm1hbnVhbFwiPk1hbnVhbDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJhdXRvXCI+QXV0bzwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICB7YWxsb3dQcm9tb3Rpb25NaXJyb3IgJiYgYWN0aXZlU3RlcCA9PT0gXCJjYW1wYWlnblwiICYmIChcbiAgICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuQ29udGVudCB2YWx1ZT1cImNhbXBhaWduXCIgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIkNhbXBhaWduXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNhbXBhaWduIG1vZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbi5tb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyhtb2RlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2FtcGFpZ24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6IG1vZGUgYXMgQ2FtcGFpZ25Nb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwibm9uZVwiPk5vIGNhbXBhaWduPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImV4aXN0aW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4aXN0aW5nIGNhbXBhaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwibmV3XCI+TmV3IGNhbXBhaWduPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2FtcGFpZ24ubW9kZSA9PT0gXCJleGlzdGluZ1wiICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhpc3RpbmcgY2FtcGFpZ25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2FtcGFpZ24uY2FtcGFpZ25faWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLmNhbXBhaWducyB8fCBbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoY2FtcGFpZ25faWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENhbXBhaWduKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtcGFpZ25faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAge2NhbXBhaWduLm1vZGUgPT09IFwibmV3XCIgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIk5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2FtcGFpZ24ubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDYW1wYWlnbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJJZGVudGlmaWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduLmNhbXBhaWduX2lkZW50aWZpZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2FtcGFpZ24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtcGFpZ25faWRlbnRpZmllcjogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU3RhcnRzIGF0XCIgb3B0aW9uYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduLnN0YXJ0c19hdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDYW1wYWlnbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHNfYXQ6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkVuZHMgYXRcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2FtcGFpZ24uZW5kc19hdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDYW1wYWlnbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRzX2F0OiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5Db250ZW50PlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICB7YWN0aXZlU3RlcCA9PT0gXCJwcmljZXNcIiAmJiAoXG4gICAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkNvbnRlbnQgdmFsdWU9XCJwcmljZXNcIiBzdHlsZT17eyBoZWlnaHQ6IFwiMTAwJVwiIH19PlxuICAgICAgICAgICAgICAgICAgICA8UHJvZHVjdFByaWNlc1RhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVuY2llcz17Y3VycmVuY2llc31cbiAgICAgICAgICAgICAgICAgICAgICBjb3Vwb25WYWx1ZT17Zm9ybWF0Q291cG9uVmFsdWUoY291cG9uLCBjdXJyZW5jaWVzKX1cbiAgICAgICAgICAgICAgICAgICAgICBwcmljZXM9e3Byb2R1Y3QucHJpY2VfYW1vdW50c31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGN1cnJlbmN5Q29kZSwgdmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZV9hbW91bnRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudC5wcmljZV9hbW91bnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeUNvZGVdOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0ZvY3VzTW9kYWwuQm9keT5cblxuICAgICAgICAgIDxGb2N1c01vZGFsLkZvb3RlciBzdHlsZT17eyBmbGV4U2hyaW5rOiAwIH19PlxuICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgb25DbGljaz17KCkgPT4gb25PcGVuQ2hhbmdlKGZhbHNlKX0+XG4gICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICB7Y3VycmVudFN0ZXBJbmRleCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVN0ZXAodmlzaWJsZVN0ZXBzW2N1cnJlbnRTdGVwSW5kZXggLSAxXSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBCYWNrXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtjdXJyZW50U3RlcEluZGV4IDwgdmlzaWJsZVN0ZXBzLmxlbmd0aCAtIDEgPyAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWFjdGl2ZVN0ZXBDb21wbGV0ZX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBjdXJyZW50U3RlcEluZGV4ICsgMVxuICAgICAgICAgICAgICAgICAgc2V0RnVydGhlc3RTdGVwSW5kZXgoKGN1cnJlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KGN1cnJlbnQsIG5leHRJbmRleCksXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBzZXRBY3RpdmVTdGVwKHZpc2libGVTdGVwc1tuZXh0SW5kZXhdKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDb250aW51ZVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWFjdGl2ZVN0ZXBDb21wbGV0ZX1cbiAgICAgICAgICAgICAgICBpc0xvYWRpbmc9e3NhdmluZ31cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIHNhdmUoKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFNhdmVcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvRm9jdXNNb2RhbC5Gb290ZXI+XG4gICAgICAgIDwvUHJvZ3Jlc3NUYWJzPlxuICAgICAgPC9Gb2N1c01vZGFsLkNvbnRlbnQ+XG4gICAgPC9Gb2N1c01vZGFsPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb3Vwb25Qcm9kdWN0c1BhZ2Uoe1xuICBhbGxvd1Byb21vdGlvbk1pcnJvciA9IGZhbHNlLFxuICBhcGlCYXNlLFxuICB0aXRsZSxcbn06IHtcbiAgYWxsb3dQcm9tb3Rpb25NaXJyb3I/OiBib29sZWFuXG4gIGFwaUJhc2U6IEFwaUJhc2VcbiAgdGl0bGU6IHN0cmluZ1xufSkge1xuICBjb25zdCBbcHJvZHVjdHMsIHNldFByb2R1Y3RzXSA9IHVzZVN0YXRlPENvdXBvblByb2R1Y3RSb3dbXT4oW10pXG4gIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IHVzZVN0YXRlPE9wdGlvbnNQYXlsb2FkPih7fSlcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSlcbiAgY29uc3QgW2xvYWRFcnJvciwgc2V0TG9hZEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFttb2RhbE9wZW4sIHNldE1vZGFsT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2VkaXRpbmdSb3csIHNldEVkaXRpbmdSb3ddID0gdXNlU3RhdGU8Q291cG9uUHJvZHVjdFJvdyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHByb21wdCA9IHVzZVByb21wdCgpXG4gIGNvbnN0IGNvdXBvbkJhc2UgPSBgJHthcGlCYXNlfS9jb3Vwb24tcHJvZHVjdHNgXG5cbiAgY29uc3QgbG9hZCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgc2V0TG9hZEVycm9yKG51bGwpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFtwcm9kdWN0c1BheWxvYWQsIG9wdGlvbnNQYXlsb2FkXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgYXBpRmV0Y2g8eyBjb3Vwb25fcHJvZHVjdHM6IENvdXBvblByb2R1Y3RSb3dbXSB9Pihjb3Vwb25CYXNlKSxcbiAgICAgICAgYXBpRmV0Y2g8T3B0aW9uc1BheWxvYWQ+KGAke2NvdXBvbkJhc2V9L29wdGlvbnNgKSxcbiAgICAgIF0pXG4gICAgICBzZXRQcm9kdWN0cyhwcm9kdWN0c1BheWxvYWQuY291cG9uX3Byb2R1Y3RzIHx8IFtdKVxuICAgICAgc2V0T3B0aW9ucyhvcHRpb25zUGF5bG9hZCB8fCB7fSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICA6IFwiRmFpbGVkIHRvIGxvYWQgY291cG9uIHByb2R1Y3RzXCJcbiAgICAgIHNldExvYWRFcnJvcihtZXNzYWdlKVxuICAgICAgdG9hc3QuZXJyb3IobWVzc2FnZSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH0sIFtjb3Vwb25CYXNlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHZvaWQgbG9hZCgpXG4gIH0sIFtsb2FkXSlcblxuICBjb25zdCByZW1vdmUgPSBhc3luYyAocm93OiBDb3Vwb25Qcm9kdWN0Um93KSA9PiB7XG4gICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgcHJvbXB0KHtcbiAgICAgIHRpdGxlOiBcIlJlbW92ZSBjb3Vwb24gcHJvZHVjdD9cIixcbiAgICAgIGRlc2NyaXB0aW9uOiBgVGhpcyByZW1vdmVzIGNvdXBvbiBpc3N1YW5jZSBmcm9tICR7cm93LnByb2R1Y3QudGl0bGUgfHwgcm93LnByb2R1Y3QuaWRcbiAgICAgICAgfS4gVGhlIHVuZGVybHlpbmcgTWVkdXNhIHByb2R1Y3Qgd2lsbCByZW1haW4gYXZhaWxhYmxlLmAsXG4gICAgICBjb25maXJtVGV4dDogXCJSZW1vdmUgcHJvZHVjdFwiLFxuICAgICAgY2FuY2VsVGV4dDogXCJDYW5jZWxcIixcbiAgICAgIHZhcmlhbnQ6IFwiZGFuZ2VyXCIsXG4gICAgfSlcbiAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXBpRmV0Y2goYCR7Y291cG9uQmFzZX0vJHtyb3cucHJvZHVjdC5pZH1gLCB7IG1ldGhvZDogXCJERUxFVEVcIiB9KVxuICAgICAgdG9hc3Quc3VjY2VzcyhcIkNvdXBvbiBjb25maWd1cmF0aW9uIHJlbW92ZWRcIilcbiAgICAgIGF3YWl0IGxvYWQoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0b2FzdC5lcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiRGVsZXRlIGZhaWxlZFwiKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1pcnJvciA9IGFzeW5jIChyb3c6IENvdXBvblByb2R1Y3RSb3cpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXBpRmV0Y2goXG4gICAgICAgIGAvYWRtaW4vY291cG9uLXByb2R1Y3RzLyR7cm93LnByb2R1Y3QuaWR9L21pcnJvci1wcm9tb3Rpb25gLFxuICAgICAgICB7XG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7fSksXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgICB0b2FzdC5zdWNjZXNzKFwiUHJvbW90aW9uIG1pcnJvciBjcmVhdGVkXCIpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRvYXN0LmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJNaXJyb3IgZmFpbGVkXCIpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cImRpdmlkZS15IHAtMFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNiBweS00XCI+XG4gICAgICAgIDxIZWFkaW5nIGxldmVsPVwiaDFcIj57dGl0bGV9PC9IZWFkaW5nPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC14LTJcIj5cbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKSA9PiB2b2lkIGxvYWQoKX0+XG4gICAgICAgICAgICA8QXJyb3dQYXRoIC8+IFJlZnJlc2hcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBzZXRFZGl0aW5nUm93KG51bGwpXG4gICAgICAgICAgICAgIHNldE1vZGFsT3Blbih0cnVlKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8UGx1cyAvPiBDcmVhdGVcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgIDxDb3Vwb25FbXB0eVN0YXRlIHRpdGxlPVwiTG9hZGluZyBjb3Vwb24gcHJvZHVjdHNcIiAvPlxuICAgICAgKSA6IGxvYWRFcnJvciA/IChcbiAgICAgICAgPENvdXBvbkVtcHR5U3RhdGUgdGl0bGU9e2xvYWRFcnJvcn0gLz5cbiAgICAgICkgOiBwcm9kdWN0cy5sZW5ndGggPyAoXG4gICAgICAgIDxUYWJsZT5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+UHJvZHVjdDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+U3RhdHVzPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5UeXBlPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5Db2RlPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5DYW1wYWlnbjwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+SXNzdWVkPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbCAvPlxuICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgPC9UYWJsZS5IZWFkZXI+XG4gICAgICAgICAgPFRhYmxlLkJvZHlcbiAgICAgICAgICAgIHN0eWxlPXt7IGJvcmRlckJvdHRvbTogJ25vbmUnIH19PlxuICAgICAgICAgICAge3Byb2R1Y3RzLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHJvdy5jb3Vwb25fcHJvZHVjdF9jb25maWdcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8VGFibGUuUm93IGtleT17cm93LmlkfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgYm9yZGVyQm90dG9tOiAnbm9uZScsIGJhY2tncm91bmQ6ICdub25lJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJwbHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cm93LnByb2R1Y3QudGl0bGUgfHwgcm93LnByb2R1Y3QuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtyb3cucHJvZHVjdC5oYW5kbGUgfHwgcm93LnByb2R1Y3QuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8U3RhdHVzQmFkZ2VcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17Y291cG9uU3RhdHVzQ29sb3IoY29uZmlnLnByb21vdGlvbl9zdGF0dXMpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge2NvbmZpZy5wcm9tb3Rpb25fc3RhdHVzIHx8IFwiZHJhZnRcIn1cbiAgICAgICAgICAgICAgICAgICAgPC9TdGF0dXNCYWRnZT5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntjb3Vwb25UeXBlTGFiZWwoY29uZmlnKX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAge2NvbmZpZy5jb2RlX3N0cmF0ZWd5ID09PSBcInNoYXJlZF9jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IGNvbmZpZy5zaGFyZWRfY29kZSB8fCBcIlNoYXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBgJHtjb25maWcuY29kZV9wcmVmaXggfHwgXCJDT1VQT05cIn0tKmB9XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57Y2FtcGFpZ25MYWJlbChjb25maWcpfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntyb3cuZW50aXRsZW1lbnRzX2NvdW50IHx8IDB9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBnYXAteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAge2FsbG93UHJvbW90aW9uTWlycm9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjb25maWcuYW1vdW50cz8ubGVuZ3RoIHx8IDApID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgKSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgbWlycm9yKHJvdyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdGluZ1Jvdyhyb3cpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1vZGFsT3Blbih0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UGVuY2lsU3F1YXJlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCByZW1vdmUocm93KX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VHJhc2ggLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgPC9UYWJsZT5cbiAgICAgICkgOiAoXG4gICAgICAgIDxDb3Vwb25FbXB0eVN0YXRlXG4gICAgICAgICAgdGl0bGU9XCJObyBjb3Vwb24gcHJvZHVjdHMgZm91bmRcIlxuICAgICAgICAgIGRlc2NyaXB0aW9uPVwiQ3JlYXRlIGEgbmV3IGNvdXBvbiBwcm9kdWN0IHRvIGdldCBzdGFydGVkLlwiXG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICA8Q291cG9uUHJvZHVjdE1vZGFsXG4gICAgICAgIG9wZW49e21vZGFsT3Blbn1cbiAgICAgICAgcm93PXtlZGl0aW5nUm93fVxuICAgICAgICBhcGlCYXNlPXthcGlCYXNlfVxuICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICBhbGxvd1Byb21vdGlvbk1pcnJvcj17YWxsb3dQcm9tb3Rpb25NaXJyb3J9XG4gICAgICAgIG9uT3BlbkNoYW5nZT17c2V0TW9kYWxPcGVufVxuICAgICAgICBvblNhdmVkPXtsb2FkfVxuICAgICAgLz5cbiAgICA8L0NvbnRhaW5lcj5cbiAgKVxufVxuIiwgImltcG9ydCB7IFRleHQgfSBmcm9tIFwiQG1lZHVzYWpzL3VpXCJcblxuZXhwb3J0IGZ1bmN0aW9uIENvdXBvbkVtcHR5U3RhdGUoe1xuICBkZXNjcmlwdGlvbixcbiAgdGl0bGUsXG59OiB7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGZsZXgtMSBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtaW4taC1bMjUwcHhdIHctZnVsbCBmbGV4LTEgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTYgcHktNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggc2l6ZS1mdWxsIGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxUZXh0IHdlaWdodD1cInBsdXNcIj57dGl0bGV9PC9UZXh0PlxuICAgICAgICAgIHtkZXNjcmlwdGlvbiA/IDxUZXh0PntkZXNjcmlwdGlvbn08L1RleHQ+IDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwgImltcG9ydCB7IENvdXBvbkRldGFpbFBhZ2VWaWV3IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2Rhc2hib2FyZC9jb3Vwb25zL2NvdXBvbi1tYW5hZ2VyXCJcblxuY29uc3QgQ291cG9uRGV0YWlsUGFnZSA9ICgpID0+IHtcbiAgcmV0dXJuIDxDb3Vwb25EZXRhaWxQYWdlVmlldyBhcGlCYXNlPVwiL2FkbWluXCIgLz5cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ291cG9uRGV0YWlsUGFnZVxuIiwgImltcG9ydCB7IGRlZmluZVJvdXRlQ29uZmlnIH0gZnJvbSBcIkBtZWR1c2Fqcy9hZG1pbi1zZGtcIlxuaW1wb3J0IHsgUmVjZWlwdFBlcmNlbnQgfSBmcm9tIFwiQG1lZHVzYWpzL2ljb25zXCJcbmltcG9ydCB7IENvdXBvblByb2R1Y3RzUGFnZVZpZXcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZGFzaGJvYXJkL2NvdXBvbnMvY291cG9uLW1hbmFnZXJcIlxuXG5leHBvcnQgY29uc3QgY29uZmlnID0gZGVmaW5lUm91dGVDb25maWcoe1xuICBsYWJlbDogXCJDb3Vwb24gUHJvZHVjdHNcIixcbiAgaWNvbjogUmVjZWlwdFBlcmNlbnQsXG59KVxuXG5jb25zdCBDb3Vwb25Qcm9kdWN0c1BhZ2UgPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPENvdXBvblByb2R1Y3RzUGFnZVZpZXdcbiAgICAgIGFwaUJhc2U9XCIvYWRtaW5cIlxuICAgICAgdGl0bGU9XCJDb3Vwb24gUHJvZHVjdHNcIlxuICAgICAgYWxsb3dQcm9tb3Rpb25NaXJyb3JcbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IENvdXBvblByb2R1Y3RzUGFnZVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNBQTtBQUFBLEVBQ0UsU0FBVztBQUFBLElBQ1QsTUFBUTtBQUFBLElBQ1IsY0FBZ0I7QUFBQSxFQUNsQjtBQUNGOzs7QUNIQSxJQUFPLGVBQVE7QUFBQSxFQUNiLElBQUk7QUFBQSxJQUNGLGFBQWE7QUFBQSxFQUNmO0FBQ0Y7OztBQ0pBLFNBQVMsbUJBQW1CQSxTQUFRO0FBQ2xDLFNBQU87QUFBQSxJQUNMLEdBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVFILFVBQVUsT0FBTyxJQUFJLFlB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Q3RCLGVBQWUsT0FBYztBQUFBLElBQy9CO0FBQUEsSUFDQTtBQUFBLE1BQ0UsT0FBT0MsUUFBcUI7QUFBQSxNQUM1QixNQUFNQSxRQUFxQjtBQUFBLE1BQzNCLE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxNQUNSLGVBQWVBLFFBQXFCO0FBQUEsSUFDdEM7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxJQUFPLGdCQUFRO0FBQUEsRUFDYixjQUFjO0FBQUEsSUFDWixTQUFTLENBQUM7QUFBQSxFQUNaO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLFlBQVk7QUFBQSxJQUNWLGNBQWMsQ0FBQztBQUFBLEVBQ2pCO0FBQUEsRUFDQSxlQUFlO0FBQUEsSUFDYixVQUFVLENBQUM7QUFBQSxFQUNiO0FBQUEsRUFDQSxZQUFZO0FBQ2Q7IiwKICAibmFtZXMiOiBbImNvbmZpZyIsICJjb25maWciLCAiaW1wb3J0X2ljb25zIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfaWNvbnMiLCAiaW1wb3J0X3VpIiwgImltcG9ydF91aSIsICJpbXBvcnRfanN4X3J1bnRpbWUiLCAiY29uZmlnIiwgInJvdyIsICJ2YWx1ZSIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJyb3ciLCAiY29uZmlnIiwgImltcG9ydF9qc3hfcnVudGltZSIsICJiYWNrZW5kVXJsIiwgImFwaUVycm9yTWVzc2FnZSIsICJhcGlGZXRjaCIsICJhbW91bnQiLCAiY3VycmVuY3kiLCAiYXBpRmV0Y2giLCAiaW1wb3J0X2pzeF9ydW50aW1lIiwgImltcG9ydF9qc3hfcnVudGltZSIsICJwYWdlX2RlZmF1bHQiLCAiaW1wb3J0X2ljb25zIiwgImltcG9ydF9qc3hfcnVudGltZSIsICJjb25maWciLCAiQ291cG9uUHJvZHVjdHNQYWdlIiwgInBhZ2VfZGVmYXVsdCIsICJwYWdlX2RlZmF1bHQiLCAiY29uZmlnIl0KfQo=
3227
3281
 
3228
3282
  module.exports = module.exports.default || module.exports